Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
Sockets 使用非阻塞I/O选择()和使用套接字中的阻塞I/O选择()_Sockets_Select_Nonblocking - Fatal编程技术网

Sockets 使用非阻塞I/O选择()和使用套接字中的阻塞I/O选择()

Sockets 使用非阻塞I/O选择()和使用套接字中的阻塞I/O选择(),sockets,select,nonblocking,Sockets,Select,Nonblocking,我试图理解select()和非阻塞I/O概念。 但是仍然没有得到如果将阻塞I/O与select()一起使用会发生什么,如果将非阻塞与select()一起使用会发生什么 我读到,select()已经是块调用了。那么它是如何工作的呢 如果将阻塞I/O与select() 您将获得一个非法阻塞模式异常。 select()已经是块调用。那么它是如何工作的呢 它会一直阻止,直到正在选择的事件发生或超时(如果有)过期。将select()或poll()与阻塞或非阻塞套接字一起使用是完全正确的。调用select(

我试图理解select()和非阻塞I/O概念。 但是仍然没有得到如果将阻塞I/O与select()一起使用会发生什么,如果将非阻塞与select()一起使用会发生什么

我读到,select()已经是块调用了。那么它是如何工作的呢

如果将阻塞I/O与
select()

您将获得一个非法阻塞模式异常。

select()
已经是块调用。那么它是如何工作的呢


它会一直阻止,直到正在选择的事件发生或超时(如果有)过期。

select()
poll()
与阻塞或非阻塞套接字一起使用是完全正确的。调用
select()
本身将被阻止,直到提供给
select()的(一个)套接字为止
将可供阅读。

至少在UNIX系统上,将select与阻塞套接字一起使用是完全有效的,将select与完全不支持异常的C语言一起使用也是完全有效的。也许您描述的行为是特定于Java的。不知何故,答案是假设Java的,这在问题中没有指定。谢谢您的解释。但仍有一些疑问。我无法清除阻塞和非阻塞上下文。1) 如果使用select对多个客户端执行阻塞读/写操作,或者使用select()对多个客户端执行非阻塞读/写操作,会有什么区别?
2)如果在c中的BSD套接字中使用select或NOW select对多个客户端执行阻塞读/写操作,会有什么问题