2009-11-09 72 views
1

裏面的閱讀FD_SET我有幾個插座:選擇()上的插座與超時

  1. 主插口監聽新的連接
  2. 接受的套接字監聽傳入的數據。

我將超時設置爲30秒,並調用select()。我很快注意到每個行爲都有所不同:

  1. 當新客戶端連接到偵聽端口時,它立即從阻塞返回。
  2. 當已連接的客戶端發送消息時,它會阻止在整個30秒。

有沒有一種方法,我可以把它立即返回在第二種情況下?

+0

一般來說,我會期待的一個代碼錯誤。你可以粘貼你的FD_SET和你的選擇電話嗎? – Will 2009-11-09 08:44:20

+0

我認爲你對1)的迴應可能會導致2)。你對1)有何迴應?發佈你的代碼會有幫助。 – 2009-11-09 13:34:32

回答

0

我不斷用這樣的選擇()■沒有任何問題。

也許你做錯事與接受的套接字等待數據。你可以請張貼代碼片段嗎?尤其最重要的是你如何設置第一個select()參數。

2

我的猜測是,你要麼不包括在正確的fd_set所有的插座或你是不是在最高編號的文件描述符加1傳遞作爲第一個參數(以下NFDs的製劑)來選擇呼叫。

select(nfds, &readfds, &writefds, &execptfds, &timeout); 
1

一個與select(2)最常見的錯誤是不是再次調用select()前重新初始化fd_set秒。