2010-10-17 53 views
1

在服務器和許多客戶端之間的套接字中我們需要select()。我想知道在哪裏應該是select()函數?服務器或客戶端?如果它應該在服務器中,那麼我們應該在客戶端做什麼修改select()函數

回答

3

select()的使用根本不影響套接字通信的語義。它只是提供了一種同時等待多個套接字(或文件)的方法,並隨後找出哪些套接字可以在其上運行。由於它是通常具有多個連接的服務器,因此它是調用select()的服務器。客戶沒有什麼特別的事情要做。

+1

除非客戶端等待來自服務器的回覆,在這種情況下,客戶端將使用select()。 – 2010-10-17 11:22:46

+0

@Blank:不,客戶端只調用send()和recv(),如果套接字的客戶端沒有準備好執行請求的操作,它自然會阻塞。 'select()'函數僅用於需要等待多個文件描述符事件的情況,並且您不知道哪個會先準備好。僅僅爲一個描述符使用它是一種浪費,(除非你想做一些全雙工的異步協議,而不是更常見的請求 - 響應模式)。 – 2010-10-17 23:02:50

+0

你的程序設計可能是這樣的,你不希望/不能阻止發送/ recv;你只有在它們發生時才需要它們,所以函數立即返回。插座可能不是你唯一關注的東西。 – 2010-10-18 06:17:31