linux - 当非阻塞服务器套接字上收到新请求时,为什么进程不从 sleep() 恢复?

标签 linux sockets network-programming sleep

我运行的是 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/

相关文章:

linux - 查找文件并执行命令

python - 在 Linux 中同时使用 python 执行多个命令

linux - 按进程数和最活跃用户排名最高的用户

使用标准 C 库的 C SSL 实现

java - 限制java套接字服务器中的连接数

linux - rpmbuild 需要 (rpmlib) - 自定义 rpm

c# - 为什么附加 VS 调试器后应用程序的行为会有所不同?

c - 用一个物理定时器模拟多个虚拟定时器

java - 互联网上的 UDP。它是如何工作的?

python - 使用 Blender Python 与纯数据的 TCP 连接