【发布时间】:2016-04-20 16:13:03
【问题描述】:
在不一致的时间间隔内,我最近看到一个特定的程序挂起(即停止执行但没有崩溃并且没有旋转 CPU)。当强制使用核心转储终止时,它一直停留在这一行:
int new_socket = accept4(listen_socket,NULL,NULL,SOCK_NONBLOCK);
既然这是一个非阻塞的accept,那程序怎么会挂在那里呢?在功能执行和暂停执行之间,操作条件似乎没有显着变化。
我不是网络编程专家,所以请让我知道还有哪些其他来源(如果有)可以提供跟踪此问题的上下文。
编辑:此软件正在运行并使用以下内容编译
$ 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
【问题讨论】:
-
这是用哪种语言,C 还是 C++?
-
它是非常 C 风格的 C++,但它是用 g++ 编译的,所以就是这样。我对标签很宽泛,因为我认为套接字是……嗯,很宽泛。 =)
-
啊,很公平。毫无价值,这里的首选规范 afaik 是只使用一个“语言标签”,除了专门关于语言兼容性的问题。不过,还是交给你吧。
-
这很好。细节修改。不过,似乎@alk 无论如何都提供了答案。测试时间...