在非阻塞套接字上挂起程序
Hung program on a non-blocking socket
在不一致的时间间隔内,我看到一个特定的程序最近挂断了(即停止执行,但不会崩溃,也不会旋转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
选项SOCK_NONBLOCK
不是指侦听套接字(传递给accept4()
的套接字),而是指在接受连接时创建的套接字。
来自man accept4
:的逐字记录
SOCK_NONBLOCK在新打开的文件描述上设置O_NONBLOCK文件状态标志。
相关文章:
- 使用互斥会挂起程序
- 在C++和 Python 程序中使用命名管道的 IPC 挂起
- 设置变量时C++程序挂起
- 第一次尝试使用new动态创建结构数组,程序挂起没有错误
- 有时ShowWindow从不调用OnShowWindow,主应用程序挂起
- 访问类成员的成员变量时 cpp 程序挂起
- 为什么我的 N-Queens 程序在填充=3、行=4 和 col=7/8 时挂起?
- 处理程序在处理 SIGWINCH 后挂起
- 程序在没有操作系统信号的情况下在函数中的特定行挂起
- C++多线程应用程序将永远挂起
- 如何在C++中挂起程序,然后"取消挂起"它
- 为什么新操作员挂起我的程序?
- C++程序在调用'mkfifo'时挂起(Lustre FS)
- 为什么线程分离时程序挂起
- 程序中止挂起命名的互斥锁
- 如何在Cocos2d Android应用程序中获得呼叫/挂起事件
- 当后端响应需要很长时间时,WXWIDGET应用程序会挂起
- 在非阻塞套接字上挂起程序
- 随机数的正态分布会挂起程序
- 挂起程序,直到ofstream::flush()完成