如果进程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吗? 谢谢!
答案 0 :(得分:1)
当A尝试send
时,如果B已关闭,则连接的读取端send
将通过返回-1来发出此错误信号。然后A可以决定如何处理这种情况。
相应地,当A尝试read
并且假设没有数据在本地缓冲时,如果B已经关闭,则连接的写结束read
将只返回0.