0

如果进程 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);
     }

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

4

1 回答 1

1

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

相应地,当 A 尝试read并假设本地没有数据缓冲时,如果 B 已关闭连接的写入端,read则将简单地返回 0。

于 2013-04-17T10:46:26.857 回答