[英]Java Socket:why is there is no “write timeout” for the socket
不會有多大用處。
通常,TCP 發送與應用程序是異步的。 send()
所做的只是將數據放入套接字發送緩沖區。 然后它返回,同時發送緩沖區被異步清空到網絡。 所以沒有什么可以超時的。 並且沒有超時並不表示數據已發送到對等方。
send()
在發送緩沖區已滿時阻塞,並且可以在其上實現超時,實際上您可以使用select()
在非阻塞模式下自己做到這一點,但問題是超時可能是當前發送或前一個發送。 因此,提供超時會相當混亂。 相反,當所有 TCP 發送計時器在內部超時時傳遞的是連接重置。
我認為TCP協議中有寫超時的概念。
確實有,但那是在 TCP 異步清空套接字發送緩沖區的級別。 它不受應用程序控制。
您可以先嘗試連接...如果連接失敗捕獲異常
InetSocketAddress sockAdr = new InetSocketAddress(serveradres, 2222);
Socket newsok = new Socket();
int timeout = 2000;
newsok.connect(sockAdr, timeout);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.