TCP如何感知对方断开链接

TCP在client调用connect调用之后和server accept调用返回之前之前完成三次握手,在client和server之间建立了一条tcp 链接。

具体过程不表。

这里主要讨论TCP一方断开连接后,另一方如何感知。

讨论两种情况:

1)一方机器掉电。

如果是write,正常返回。因为write只保证发送到本地缓冲区,直至内核发现对方不可达,产生sigpipe信号。tcp内部有一个心跳机制。

 

2)一方正常调用close调用或者进程崩溃。这时另一方阻塞调用select和epoll_wait会捕获可读时间,但是读出的字节数为0.可认为对方主动关闭了链接。

 

如果连接主动关闭,还调用write等调用,会产生sigpipe信号。该信号的默认处理方式是终止进程,因此一般在写服务器程序时,我们会屏蔽该信号。

 

以上是本人想到tcp编程中支离破碎的点,有不对的地方还请高手们不吝赐教,就当抛钻引玉。

posted on 2013-08-28 22:42  netbar  阅读(1422)  评论(0)    收藏  举报

导航