簡體   English   中英

客戶端套接字上的setSoTimeout不會影響套接字

[英]setSoTimeout on a client socket doesn't affect the socket

我有一個Java應用程序,它帶有三個打開的​​線程,每個線程一個套接字,並連接到不同端口上的服務器。 建立與服務器的連接后,我在每個套接字上都設置了so_timeout。 之后,線程阻塞,等待read()。 20秒(我設置的超時)后,只有一個線程超時。 其他兩個忽略超時。 TCP層一次只能處理一個超時嗎? 還有其他解釋嗎?

文件說:

必須先啟用該選項,然后才能執行阻止操作。

也許您應該在建立與服務器的連接之前 ,至少在調用套接字上的read()之前進行設置。
但是沒有代碼很難說...

過去在Windows中處理SO_TIMEOUT時遇到了幾個問題。 我認為設置此設置是“應有的”設置可能依賴於操作系統並與注冊表設置等沖突的底層套接字實現。

我的建議是不要使用SO_TIMEOUT強制在超時時引發拋出的異常。 使用非阻塞I / O或在讀取()之前檢查字節是否可用()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM