挂起非阻塞套接字的程序

时间:2016-04-20 16:13:03

标签: c++ c linux sockets unix

在不一致的时间间隔内,我看到一个特定的程序最近被挂起(即停止执行但没有崩溃而不是旋转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

1 个答案:

答案 0 :(得分:3)

选项SOCK_NONBLOCK不是指侦听套接字(传递给accept4()的套接字),而是指接受连接时创建的套接字。

逐字man accept4

  

SOCK_NONBLOCK 在新打开的文件说明中设置 O_NONBLOCK 文件状态标志。