歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux檢測TCP連接斷開的一種簡單實現方法

Linux檢測TCP連接斷開的一種簡單實現方法

日期:2017/2/28 16:13:09   编辑:Linux教程

一般可以采取業務層的心跳檢測,超時沒有收到心跳包,就認為是對端已經斷開,還有些更高級的方法比如KeepAlive,但都不外乎互相定時發點校驗信息。

我要說的解法:

第一步,select函數的返回值判斷。在年ucLinux,EM8511平台下跑,select沒有數據時返回的是-1,有數據返回的就是大於0的整數,好像還沒有碰到過0的時候。 千萬不要以為返回-1就是錯誤。

小提示:select函數調用之後會將清空delay中的值(清成0),如果是反復調用select並希望有一定延時的話,一定要記得每次調用前都要指定延時參數。

第二步,檢測到select是1,說明你的對端有可能是關閉了,千萬不要高高興興不顧一切地就去讀數據。實際上這個時候由於斷開之後TCP/IP本身的一些握手信號,select會認為socket中有數據。這個使用如果使用read去讀,將會返回0。這時select和read的結果明顯是不一致的,我們認為是對端端口斷開。

用這個方法檢測,未必是完全之策,但是在我的程序上用起來還是很爽的。

Copyright © Linux教程網 All Rights Reserved