[英]setSoTimeout on a client socket doesn't affect the socket
我有一個Java應用程序,它帶有三個打開的線程,每個線程一個套接字,並連接到不同端口上的服務器。 建立與服務器的連接后,我在每個套接字上都設置了so_timeout。 之后,線程阻塞,等待read()。 20秒(我設置的超時)后,只有一個線程超時。 其他兩個忽略超時。 TCP層一次只能處理一個超時嗎? 還有其他解釋嗎?
過去在Windows中處理SO_TIMEOUT時遇到了幾個問題。 我認為設置此設置是“應有的”設置可能依賴於操作系統並與注冊表設置等沖突的底層套接字實現。
我的建議是不要使用SO_TIMEOUT強制在超時時引發拋出的異常。 使用非阻塞I / O或在讀取()之前檢查字節是否可用()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.