Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Posix select()函数_Posix_Sockets - Fatal编程技术网

Posix select()函数

Posix select()函数,posix,sockets,Posix,Sockets,在服务器和许多客户端之间的套接字中,我们需要select()。我想知道select()函数应该在哪里?服务器还是客户端?如果它应该在服务器中,那么我们应该在客户端中做什么更改使用select()根本不会影响套接字通信的语义。它只是提供了一种同时等待多个套接字(或文件)的方法,并随后确定哪些套接字(或文件)已准备好进行操作。由于服务器通常有许多连接,因此调用select()的是服务器。无需对客户端执行任何特殊操作。除非客户端等待服务器的答复,否则客户端将使用select()。@Blank:不,客户

在服务器和许多客户端之间的套接字中,我们需要select()。我想知道select()函数应该在哪里?服务器还是客户端?如果它应该在服务器中,那么我们应该在客户端中做什么更改使用
select()
根本不会影响套接字通信的语义。它只是提供了一种同时等待多个套接字(或文件)的方法,并随后确定哪些套接字(或文件)已准备好进行操作。由于服务器通常有许多连接,因此调用
select()
的是服务器。无需对客户端执行任何特殊操作。

除非客户端等待服务器的答复,否则客户端将使用select()。@Blank:不,客户端只需调用
send()
recv()
,如果套接字的客户端未准备好执行请求的操作,这将自然阻塞。
select()
函数仅适用于需要等待多个文件描述符事件的情况,而您不知道哪些事件将首先准备好。仅将其用于一个描述符是一种浪费(除非您想要执行某种全双工异步协议,而不是更常见的请求-响应模式);您需要它们只在可能发生时发生,因此函数会立即返回。套接字可能不是您关注的唯一内容。@Blank:当然,但这并不意味着“客户端将使用select()”。如果你写过“客户可能正在使用select()”,我不会有任何问题。嗯,我想我不会有问题的-我写过“除非客户等待答复”-诚然,我假设客户还有其他事情要做-并且-正在等待答复(例如,需要select())-但公平地说,我从来没有,二十年来没有一次,写了一个在套接字上执行阻塞等待的程序!