裏面的閱讀FD_SET
我有幾個插座:選擇()上的插座與超時
- 主插口監聽新的連接
- 接受的套接字監聽傳入的數據。
我將超時設置爲30秒,並調用select()
。我很快注意到每個行爲都有所不同:
- 當新客戶端連接到偵聽端口時,它立即從阻塞返回。
- 當已連接的客戶端發送消息時,它會阻止在整個30秒。
有沒有一種方法,我可以把它立即返回在第二種情況下?
裏面的閱讀FD_SET
我有幾個插座:選擇()上的插座與超時
我將超時設置爲30秒,並調用select()
。我很快注意到每個行爲都有所不同:
有沒有一種方法,我可以把它立即返回在第二種情況下?
我不斷用這樣的選擇()■沒有任何問題。
也許你做錯事與接受的套接字等待數據。你可以請張貼代碼片段嗎?尤其最重要的是你如何設置第一個select()參數。
我的猜測是,你要麼不包括在正確的fd_set所有的插座或你是不是在最高編號的文件描述符加1傳遞作爲第一個參數(以下NFDs的製劑)來選擇呼叫。
select(nfds, &readfds, &writefds, &execptfds, &timeout);
一個與select(2)
最常見的錯誤是不是再次調用select()
前重新初始化fd_set
秒。
一般來說,我會期待的一個代碼錯誤。你可以粘貼你的FD_SET和你的選擇電話嗎? – Will 2009-11-09 08:44:20
我認爲你對1)的迴應可能會導致2)。你對1)有何迴應?發佈你的代碼會有幫助。 – 2009-11-09 13:34:32