socket编程中,如何安全地主动唤醒accept、recv等阻塞调用?
如题,我们知道,同步socket编程中,accept和recv调用经常会是阻塞的,那么,如果希望主动地唤醒其阻塞,试过close,发现不行。那用什么办法可以呢,为什么那样可以唤醒,解释一下原因,谢谢。
CPlus
12 years, 9 months ago
Answers
可以使用setsockopt设置socket为非阻塞方式
阻塞方式的socket可以使用信号来打断。
accept和recv被信号打断失败返回-1,errno保存为EINTR。
EINTR
The system call was interrupted by a signal that was caught before a valid connection arrived; see signal(7).
http://linux.die.net/man/2/accept
http://linux.die.net/man/2/recv
胖子ymd
answered 12 years, 9 months ago