日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

java socket 判断是否断开_Linux Socket:如何在客户端程序中检测断开的网络?

發(fā)布時間:2023/12/10 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java socket 判断是否断开_Linux Socket:如何在客户端程序中检测断开的网络? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

僅在調用write()函數(shù)時才能檢測到未插入的以太網(wǎng)電纜 . 這是因為tcp堆棧的tcp重傳沒有你的意識 . 這是解決方案 .

即使您已經(jīng)為應用程序套接字設置了keepalive選項,但是如果您的應用程序一直在套接字上寫入,您無法及時檢測到套接字的死連接狀態(tài) . 那是因為內(nèi)核tcp堆棧的tcp重傳 . tcp_retries1和tcp_retries2是用于配置tcp重傳超時的內(nèi)核參數(shù) . 很難預測重傳超時的精確時間,因為它是由RTT機制計算的 . 你可以在rfc793中看到這個計算 . (3.7 . 數(shù)據(jù)通信)

每個平臺都具有用于tcp重傳的內(nèi)核配置 .

Linux : tcp_retries1, tcp_retries2 : (exist in /proc/sys/net/ipv4)

HPUX : tcp_ip_notify_interval, tcp_ip_abort_interval

AIX : rto_low, rto_high, rto_length, rto_limit

如果要提前檢測死連接,則應為tcp_retries2(默認值為15)設置較低的值,但它僅為單個套接字設置這些值 . 那些是全局內(nèi)核參數(shù) . 有一些嘗試為單個套接字應用tcp重新傳輸套接字選項(http://patchwork.ozlabs.org/patch/55236/),但我沒有在系統(tǒng)頭文件中找到這些選項定義 .

作為參考,您可以通過'netstat --timers'監(jiān)控您的keepalive套接字選項,如下所示 . https://stackoverflow.com/questions/34914278

netstat -c --timer | grep "192.0.0.1:43245 192.0.68.1:49742"

tcp 0 0 192.0.0.1:43245 192.0.68.1:49742 ESTABLISHED keepalive (1.92/0/0)

tcp 0 0 192.0.0.1:43245 192.0.68.1:49742 ESTABLISHED keepalive (0.71/0/0)

tcp 0 0 192.0.0.1:43245 192.0.68.1:49742 ESTABLISHED keepalive (9.46/0/1)

tcp 0 0 192.0.0.1:43245 192.0.68.1:49742 ESTABLISHED keepalive (8.30/0/1)

tcp 0 0 192.0.0.1:43245 192.0.68.1:49742 ESTABLISHED keepalive (7.14/0/1)

tcp 0 0 192.0.0.1:43245 192.0.68.1:49742 ESTABLISHED keepalive (5.98/0/1)

tcp 0 0 192.0.0.1:43245 192.0.68.1:49742 ESTABLISHED keepalive (4.82/0/1)

此外,當keepalive超時時,您可以根據(jù)您使用的平臺遇到不同的返回事件,因此您不能僅通過返回事件來確定死連接狀態(tài) . 例如,當發(fā)生keepalive超時時,HP返回POLLERR事件,AIX僅返回POLLIN事件 . 那時您將在recv()調用中遇到ETIMEDOUT錯誤 .

在最近的內(nèi)核版本(自2.6.37)中,您可以使用TCP_USER_TIMEOUT選項將運行良好 . 此選項可用于單個插槽 .

最后,您可以使用帶有MSG_PEEK標志的read函數(shù),它可以讓您檢查套接字是否正常 . (MSG_PEEK只是看看數(shù)據(jù)是否到達內(nèi)核堆棧緩沖區(qū)并且從不將數(shù)據(jù)復制到用戶緩沖區(qū) . )因此,您可以使用此標志僅用于檢查套接字是否正常,沒有任何副作用 .

總結

以上是生活随笔為你收集整理的java socket 判断是否断开_Linux Socket:如何在客户端程序中检测断开的网络?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。