socket write出EPIPE错误

     最近弄一个程序,用到unix socket来进行进程间通信,发现有时候客户端调用write函数时,返回值为-1,errno为EPIPE。经查说是连接已经关闭导致的。

可是我的客户端明明是先连接,也没报错,然后再write的,为什么会连接关闭了?

    经过测试,是服务端重启,然后客户端write,如果这一次正确,那么服务端重启,客户端write,必然出错,然后又重启服务端,客户端write必然正确,这样正确和错误交叉。看来问题就出在这了。

    后来检查客户端代码,发现为了降低服务端负载,客户端每次write完,都没有close连接,下次用的是同一个连接来发消息,也并没有每次都去连接服务器:

    if (-1 == re_conn )
    {
        re_conn = connect_unix_socket(IP_UNIX_SOCKET_PATH,SOCK_STREAM);
    }

    连接是经过判断的。

    所以,服务端重启,必然导致连接中止,但下次客户端不一定去重连了,因为re_conn很有可能不是-1,所以write会失败。


你可能感兴趣的:(网络)