0
我想設置一個套接字的超時,我已經創建使用ASIO提升沒有運氣。我發現下面的代碼的其他地方網站上:設置流的ASIO超時
tcp::socket socket(io_service);
struct timeval tv;
tv.tv_sec = 5;
tv.tv_usec = 0;
setsockopt(socket.native(), SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
setsockopt(socket.native(), SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv));
boost::asio::connect(socket, endpoint_iterator);
超時保持在相對於話,5秒我要尋找一個在連接調用相同的60秒。我錯過了什麼?請注意,連接代碼在所有其他情況下都可以正常工作(沒有超時)。
謝謝。我剛纔發現他們不適用於連接。我準備拼湊一個計時器來執行我自己的SIG處理。我更喜歡你的方式。 – mlewis54
好的很好:)這不是我的方式,它來自asio作者Chris Kohlhoff的例子。 – Ralf
這是一個很好的解決方案Ralf,我通常做同樣的事情,我使用現有的asio :: io_service來定時器來處理我的超時。我唯一額外的補充是你可以綁定一個回調以在超時執行。如果你的系統想要/需要一個超時發生的通知來執行一些清理,重試或其他這樣的事情而不停止套接字,那麼你可以把它的代碼放在定時器過期回調中。 – OcularProgrammer