【发布时间】:2012-10-03 10:33:03
【问题描述】:
我正在寻找一种方法来中断对阻塞套接字的accept() 调用。使用信号不是一种选择,因为这意味着在库中,我不想弄乱用户信号。使用select() 是另一种选择,由于各种原因,它对我来说并不是很吸引人。
如果可能的话,最好的方法是从另一个线程将套接字设置为非阻塞模式(使用fcntl() 和O_NONBLOCK),而套接字在accept() 调用上被阻塞。预期的行为是accept() 调用将在errno 中返回EAGAIN 或EWOULDBLOCK。
真的会这样吗?安全吗?便携吗?
如果你知道这个方法对Windows的适用性(这里需要使用WSAIoctl()和FONBIO),我也很感兴趣。
【问题讨论】:
-
fcntl(socket, F_SETFL, O_NONBLOCK);成功了