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会失败。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值