在不一致的时间间隔内,我看到一个特定的程序最近被挂起(即停止执行但没有崩溃而不是旋转CPU)。当强制终止核心转储时,它始终坚持这一行:
int new_socket = accept4(listen_socket,NULL,NULL,SOCK_NONBLOCK);
由于这是一个非阻塞接受,程序如何挂起?它并不表现为操作条件在功能和暂停执行之间发生显着变化。
我不是网络编程专家,所以请让我知道其他来源(如果有的话)会提供跟踪此功能的上下文。
编辑:此软件正在运行并使用以下
进行编译$ uname -a
Linux phoenix 3.16.0-30-generic #40~14.04.1-Ubuntu SMP Thu Jan 15 17:43:14 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
$ g++ --version
g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2
$ ldd --version
ldd (Ubuntu EGLIBC 2.19-0ubuntu6.6) 2.19
答案 0 :(得分:3)
选项SOCK_NONBLOCK
不是指侦听套接字(传递给accept4()
的套接字),而是指接受连接时创建的套接字。
逐字man accept4
:
SOCK_NONBLOCK 在新打开的文件说明中设置 O_NONBLOCK 文件状态标志。