我正在寻找一种方法来中断accept()
阻塞套接字上的调用。使用信号不是一种选择,因为这意味着在一个库中,我不想让用户信号混乱。使用select()
是另一种选择,由于各种原因,在我的情况下它不是很吸引人。
如果可能的话,最有效的方法是从另一个线程将套接字设置为非阻塞模式(使用fcntl()
and ),而套接字在调用时被阻塞。预期的行为是调用将返回 with或in 。O_NONBLOCK
accept()
accept()
EAGAIN
EWOULDBLOCK
errno
它真的会那样工作吗?安全吗?便携的?
如果你知道这个方法对 Windows 的适用性(你需要使用WSAIoctl()
and的地方FONBIO
),我也很感兴趣。