socket编程中,如何安全地主动唤醒accept、recv等阻塞调用?


如题,我们知道,同步socket编程中,accept和recv调用经常会是阻塞的,那么,如果希望主动地唤醒其阻塞,试过close,发现不行。那用什么办法可以呢,为什么那样可以唤醒,解释一下原因,谢谢。

网络编程 socket

CPlus 12 years, 10 months ago

可以使用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, 10 months ago

Your Answer