2012-10-04 31 views
0

我有以下問題:我在等待選擇一個套接字。選擇C#超時

ArrayList a = new ArrayList();  
a.Add(Socket1); 
print_time_before 
Select(a, null, null, 8000000); 
print_time_after 
  1. 我可以看到,時間之間雖然沒有其他應用程序寫入到插座印刷不是8秒。哪裏不對 ?

  2. ia a包含套接字,這意味着沒有任何可讀或存在的東西?

+1

Select()中最後一個參數的單位類型是什麼?通常它是毫秒,8000000ms不是8秒 – spots

+0

@spots我懷疑它是'Socket.Select';公共靜態無效的選擇( \t的IList的checkRead, \t IList的checkWrite, \t IList的checkError, \t INT微秒 ) –

+0

它最高審計機關它微秒,這就是說1萬元是第二 –

回答

0

它在manual

如果你處於監聽狀態,可讀性意味着調用accept不會阻塞會成功。如果您已經接受了連接,可讀性意味着可以讀取數據。在這些情況下,所有接收操作都會成功進行而不會阻塞可讀性還可以指示遠程套接字是否關閉了連接;在這種情況下,對Receive的調用將立即返回,返回零字節。

如果至少有一個感興趣的套接字(checkRead,checkWrite和checkError列表中的套接字)滿足其指定條件,或超過了microSeconds參數(以先到者爲準),則選擇返回值。將microSeconds設置爲-1指定無限超時。

那麼,什麼是插座的狀態?

+0

插座是在列表中還後的選擇。 什麼都沒有收到的插座,它走在超時前 –

+0

@BigLeonardo我問什麼是所選的套接字的狀態。它關閉了嗎?它在監聽,並且有客戶準備接受()嗎? – CodeCaster