2010-10-17 24 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