当一个对等体使用`send()`或`recv()`时,如果另一个对等体关闭其tcp连接,会发生什么

时间:2013-04-17 10:42:41

标签: tcp network-programming

如果进程A和B之间存在tcp连接 如果B通过

关闭其tcp连接
      shutdown(tcpfd, SHUT_RDWR);

      or

     shutdown(tcpfd, SHUT_RD);

      or 

     shutdown(tcpfd, SHUT_WR);

A怎么知道B做了以上3个动作中的一个?

如果A确实:

      send(tcpfd, buf, len, 0);

将会发生什么?

顺便说一句,如果B没有发送FIN / ACK,它只发送一个RST 和A正在等待接收数据包

    while(1){
      n=recv(tcpfd, buf, len, 0);
     }

怎么知道B发送RST? n会是0吗? 谢谢!

1 个答案:

答案 0 :(得分:1)

当A尝试send时,如果B已关闭,则连接的读取端send将通过返回-1来发出此错误信号。然后A可以决定如何处理这种情况。

相应地,当A尝试read并且假设没有数据在本地缓冲时,如果B已经关闭,则连接的写结束read将只返回0.