2014-10-10 70 views
2

請,示出了示例下面插座SO_RCVTIMEO超時是在C++/VC雙設定值++

int val = 120000; 
setsockopt(connSock,SOL_SOCKET,SO_RCVTIMEO,(char*)&val,sizeof(int)); 

我設定在接收超時120秒但它需要240秒。

我覺得超時是設定值的兩倍。

怎麼可能?

+0

您是否檢查以確保'setsockopt()'沒有返回錯誤?你期待什麼代碼適用於超時?請提供一個[SSCCE](http://sscce.org),顯示雙倍行動時間。 – 2014-10-10 17:14:08

回答

0

SO_RCVTIMEO和SO_SNDTIMEO不適用於所有套接字操作,您應該使用非阻塞模式和select

該行爲可能會在不同的操作系統配置上發生更改。 在我的系統上,在我設置在SO_RCVTIMEO中的值兩倍後,超時值爲connect。一個簡單的黑客就像在連接之前將SO_RCVTIMEO設置爲x/2,並在其工作後將其設置爲x,但正確的解決方案是使用select。

參考

談這個問題(閱讀評論回答):

如何使用選擇才達到期望的結果: