我运行的是 linux 4.13.3、gcc 7.2.0。
相关代码是……。像这样
while(1) {
// let server be the nonblocking server socket
int client = accept(server, &addr, &addrlen);
if(client != -1) {
foo(client);
} else {
sleep(someTime);
}
}
我知道我应该使用 select/poll/epoll 来达到这个目的,
但是为什么当套接字上收到新数据时 sleep() 不返回?
最佳答案
先执行此操作
void sig_handler(int sig){}
...
signal(SIGIO, sig_handler);
fcntl(server, SETOWN, getpid())
fcntl(server, SETFL, fcntl(server, GETFL) | O_NONBLOCKING | O_ASYNC);
...
关于linux - 当非阻塞服务器套接字上收到新请求时,为什么进程不从 sleep() 恢复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46659550/