我只能在select()API中將timeout參數設置爲最多20秒。無論價值我給上面20,選擇()20秒本身後返回... 所以我試圖寫這樣select()用於超時的用法
int timeoutcount = 0;
do
{
FD_ZERO(&fd);
FD_SET(sock,&fd);
timeout.tv_sec = 20;
timeout.tv_usec = 0;
rc = select (sock+1,&fd,null,null,&timeout);
if(rc ==0)
timeoutcount += 20;
}
while(rc ==0 && timeoutcount <60)
1分鐘的超時循環請幫我...我會以正確的方式進行嗎? 如果是這樣,選擇返回1後第一次超時..幫助我解決這個問題 注意:我使用它在目標C
你怎麼知道你超時了,而不是'sock'上發生事件? – nos 2012-03-21 07:24:13
@nos當我第一次嘗試時,我將超時設置爲60秒。 20秒後,我在'襪子'上收到了事件,雖然我的網線已拔掉。之後,當我給超時20秒,它正常工作.. – Kesav 2012-03-21 08:19:57
好吧,你需要處理插座事件。不管你的電纜是否拔掉。你可能會得到一個事件,因爲它被拔出,或者在套接字級別超時,這取決於你在做什麼。在以下情況下選擇返回:套接字發生事件,或發生超時。 select()與廣告完全一樣。如果你不處理套接字事件,那麼你在下次調用該套接字時選擇相同的事件。 – nos 2012-03-21 08:47:55