我有两个进程通过Unix域套接字进行主/副本设置的通信。副本需要定期询问主要指导,但仅在主要指示已准备好提供所需指导时才应如此。如果主要准备就绪,则副本应查询主要并等待响应;否则,它应继续执行当前任务。
通常,我会使用POSIX信号量向副本通信,以告知其主要是否准备就绪-这很快速且轻量级。不幸的是,我正在研究不支持POSIX共享内存的系统上工作。因此,Unix套接字是我唯一拥有的。
我知道非阻塞读取非常快,所以我想知道是否可以这样做:
1. 在副本和主之间建立连接。 2. 将副本端设置为非阻塞。 3. 定期检查副本是否可以从主读取。 4. 如果读取成功,请将套接字切换到阻塞状态并查询主要。完成查询后,请将套接字返回到非阻塞状态。 5. 如果读取失败,请继续直到下一次检查。
我能否反复在阻塞和非阻塞行为之间切换套接字?
通常,我会使用POSIX信号量向副本通信,以告知其主要是否准备就绪-这很快速且轻量级。不幸的是,我正在研究不支持POSIX共享内存的系统上工作。因此,Unix套接字是我唯一拥有的。
我知道非阻塞读取非常快,所以我想知道是否可以这样做:
1. 在副本和主之间建立连接。 2. 将副本端设置为非阻塞。 3. 定期检查副本是否可以从主读取。 4. 如果读取成功,请将套接字切换到阻塞状态并查询主要。完成查询后,请将套接字返回到非阻塞状态。 5. 如果读取失败,请继续直到下一次检查。
我能否反复在阻塞和非阻塞行为之间切换套接字?
recv(descriptor, buffer, length, MSG_DONTWAIT)
进行非阻塞读取,而使用recv(descriptor, buffer, length, 0)
进行阻塞读取呢?同样地,对于send(descriptor, buffer, length, MSG_DONTWAIT | MSG_NOSIGNAL)
进行非阻塞写入,而使用send(descriptor, buffer, length, MSG_NOSIGNAL)
进行阻塞写入。 - Nominal AnimalMSG_DONTWAIT
标志。 - tonysdg