网络编程中,当服务端连接断开时,客户端仍然可以调用send成功
如题,服务端断开与客户端的连接:
shutdown(s, SHUT_RDWR);
close(s);
但客户端仍然可以send数据,而且成功(当然只是函数调用成功,数据不可能真正发送出去),我每次send三个字节,有时候可以send十多次,之后返回EPIPE,有时候只能send两三次,之后返回EPIPE
注:客户端是阻塞的、tcp协议
开始我以为是时间问题,故意在连接断开之后,等了许久,结果还是能send十多次。
如果我不停的对s做recv调用,相信很快就能知道服务端断开连接了。
我想问的是,要快速的检测到服务端断开(就说正常断开吧,异常不考虑,那要用心跳包),客户端必须要不停的调用recv吗(就算服务端不会发送任何数据)?这是tcp协议的规定还是linux没有实现好,我记得windows好像没有这个问题。