Sockets 无阻塞方法的套接字线程间通信

Sockets 无阻塞方法的套接字线程间通信,sockets,blocking,nonblocking,Sockets,Blocking,Nonblocking,我现在已经成功地启动了我想要为向量时钟测试程序启动的线程数量。下一个问题似乎是线程间通信;线程读取的配置文件有一个IP地址(localhost)和端口组合的列表,每个线程都应该开始侦听给定的端口,同时读取输入文件,该文件告诉它们增加逻辑时钟或向某个其他线程发送消息 如果我首先为每个线程创建ServerSockets,则accept()方法显然会阻塞,直到有人试图通过套接字连接到此特定线程,同时此线程无法执行输入文件中可能指示的其他操作(该文件仅具有格式为(“int sendMessageTo i

我现在已经成功地启动了我想要为向量时钟测试程序启动的线程数量。下一个问题似乎是线程间通信;线程读取的配置文件有一个IP地址(localhost)和端口组合的列表,每个线程都应该开始侦听给定的端口,同时读取输入文件,该文件告诉它们增加逻辑时钟或向某个其他线程发送消息


如果我首先为每个线程创建ServerSockets,则accept()方法显然会阻塞,直到有人试图通过套接字连接到此特定线程,同时此线程无法执行输入文件中可能指示的其他操作(该文件仅具有格式为(“int sendMessageTo int”或“int incrementClock k”的行)-整数表示配置文件中的行,其中包含主机和端口列表)。有没有办法避免这种情况?

在linux上,您可以使用
accept4
而不是
accept
,并将
SOCK\u NONBLOCK
作为
flags
参数传递


在POSIX.1-2001、SVr4、4.4BSD兼容系统上,您可以使用
fcntl
设置
O_NONBLOCK

Oops,我忘了提到我在使用Java。我熟悉SocketChannels和选择器,但我仍然不明白如何在线程中侦听端口,同时执行其他操作,例如向另一个线程发送消息r线程,如果此线程不需要任何连接。使用选择器,select()似乎再次阻塞。以下内容可能会澄清我的需要:侦听端口号;如果未请求任何连接,则继续读取输入文件并对其执行操作,同时仍保持在将来处理传入连接请求的准备状态。