我正在寻找一种打断阻塞套接字上的
如果可能的话,一个好的解决方案是在另一个线程中将套接字设置为非阻塞模式(使用
这样确实会起作用吗?它安全吗?可移植吗?
如果您了解此方法在Windows上的适用性(需要使用
accept()
调用的方法。使用信号不是一个选项,因为这是一个库,我不想混淆用户信号。使用 select()
是另一种选择,但由于各种原因,在我的情况下并不是很有吸引力。如果可能的话,一个好的解决方案是在另一个线程中将套接字设置为非阻塞模式(使用
fcntl()
和 O_NONBLOCK
),而套接字被阻塞在 accept()
调用上。预期行为是 accept()
调用将以 errno
中的 EAGAIN
或 EWOULDBLOCK
返回。这样确实会起作用吗?它安全吗?可移植吗?
如果您了解此方法在Windows上的适用性(需要使用
WSAIoctl()
和FIONBIO
),我也很感兴趣。
fcntl(socket, F_SETFL, O_NONBLOCK);
对我很有帮助。 - Vlad Holubiev