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

当一个对等方使用'send()'或'recv()'时,如果另一个对等方关闭其tcp连接,会发生什么情况,tcp,network-programming,Tcp,Network Programming,如果进程a和进程B之间存在tcp连接 如果B通过关闭其tcp连接 shutdown(tcpfd, SHUT_RDWR); or shutdown(tcpfd, SHUT_RD); or shutdown(tcpfd, SHUT_WR); A怎么知道B做了上述三个动作中的一个 如果A有: send(tcpfd, buf, len, 0); 会发生什么 顺便说一句,如果B不发送FIN/ACK,它只发送RST A正在等待

如果进程a和进程B之间存在tcp连接 如果B通过关闭其tcp连接

      shutdown(tcpfd, SHUT_RDWR);

      or

     shutdown(tcpfd, SHUT_RD);

      or 

     shutdown(tcpfd, SHUT_WR);
A怎么知道B做了上述三个动作中的一个

如果A有:

      send(tcpfd, buf, len, 0);
会发生什么

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

    while(1){
      n=recv(tcpfd, buf, len, 0);
     }
A怎么知道B发送RST?n将是0?
谢谢

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


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

您确定第二句话,在我看来,
read
recv
如果B关闭连接的写入端,则返回0第二部分错误
read()
将返回0,表示EOF条件。@user1944267:您是对的,我已编辑以更正。不知道我在想什么。RST的情况如何?当
send
返回
-1
时,
errno
对应于cases@Jon : +1. 简单的解释。