Sockets 使用非阻塞I/O选择()和使用套接字中的阻塞I/O选择()
我试图理解select()和非阻塞I/O概念。 但是仍然没有得到如果将阻塞I/O与select()一起使用会发生什么,如果将非阻塞与select()一起使用会发生什么 我读到,select()已经是块调用了。那么它是如何工作的呢 如果将阻塞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()
您将获得一个非法阻塞模式异常。
select()
已经是块调用。那么它是如何工作的呢
它会一直阻止,直到正在选择的事件发生或超时(如果有)过期。将
select()
或poll()
与阻塞或非阻塞套接字一起使用是完全正确的。调用select()
本身将被阻止,直到提供给select()的(一个)套接字为止
将可供阅读。至少在UNIX系统上,将select与阻塞套接字一起使用是完全有效的,将select与完全不支持异常的C语言一起使用也是完全有效的。也许您描述的行为是特定于Java的。不知何故,答案是假设Java的,这在问题中没有指定。谢谢您的解释。但仍有一些疑问。我无法清除阻塞和非阻塞上下文。1) 如果使用select对多个客户端执行阻塞读/写操作,或者使用select()对多个客户端执行非阻塞读/写操作,会有什么区别?2)如果在c中的BSD套接字中使用select或NOW select对多个客户端执行阻塞读/写操作,会有什么问题