问题标签 [sigpipe]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 对等体 104 断开管道错误和连接重置
我正在使用服务器来实现我自己的服务器,使用的实现距离这里Bottle
简单的“hello world”不远 ,我自己的实现是(当然没有路由部分):
bottleApp =bottle.app()
bottleApp.run(host='0.0.0.0',port=80, debug=true)
我的服务器一直没有响应,然后我进入浏览器:Connection reset by peer
,broken pipe errno 32
日志给了我几乎完全相同的堆栈跟踪,例如问题。
到目前为止,我尝试了什么,但没有成功:
用 try except 包装服务器运行行,例如,此处显示 了“mhawke”的答案。这停止了日志中的错误消息,显然是因为我在
except
子句中捕获了它们,但问题是当捕获这样的异常时,这意味着我们已被抛出run
方法上下文,我想以某种方式捕获它不会导致我的服务器崩溃。
我不知道它是否可能不触及bottle
.在服务器运行行之前添加这个:
from signal import signal, SIGPIPE, SIG_DFL signal(SIGPIPE,SIG_DFL)
正如这里所建议的,但它似乎对不出现 Broken pipe\connection reset 错误和服务器响应没有任何影响。我还想在这里尝试第二个答案,但我不知道在
bottle
服务器上下文中的何处定位此代码。
c - 通过 Socket 的 C 信号(sigpipe、sighup)
我必须处理 SIGHUP 和 SIGPIPE 信号,以避免通过 Socket TCP 连接的 CLIENT 关闭终端(GUI 的 [X])没有关闭或崩溃服务器。
我已经在客户端上设置了一个像这样的 sigup 处理程序
在服务器上,我设置了这样的 SIGPIPE 处理程序
但是,如果客户端关闭终端的窗口,服务器就会循环。
任何想法?无论如何谢谢你的支持
c - SIG_IGN宏定义中的数字1是什么意思?
我知道什么(void (*)(int))
意思:将 unknown_name 转换为指向返回 void 的函数 (int) 的指针。
但是下面的意思是1
什么?
c - 为什么 OpenSSL 会导致 sigpipe @ SSL_connect?
OpenSSL 导致在我调用 SSL_connect 的行上触发 SIGPIPE。我运行了 GDB 并确保套接字没有关闭。在 /proc/fd/# 中,套接字在之前或之后都没有显示为关闭。我尝试切换 set_fd 和 connect_state 调用的顺序。我想我把 OpenSSL 搞砸了,但我似乎无法弄清楚。
c - 带有 sscanf 和线程的 sigpipe
描述
我为立方体 2 制作了一个 C 服务器模块:Sauerbraten https://github.com/deathstar/QServCollect
所有代码都可以在上面的链接中找到
IRC Bot 最终停止在打开的套接字上发送 ping/pong 数据。该进程是线程化的,由于主线程是通过 PTHREAD_CREATE_JOINABLE 加入的,因此当 IRC bot 死亡时,它就会死亡。这会导致整个服务器崩溃,我只是想调试它。任何帮助,将不胜感激。
钥匙
Ircbot 代码:ircbot/ircbot.cpp、ircbot/ircbot.h
主线程:engine/server.cpp
LLDB 调试报告
服务器日志
c++ - C ++:无法连接到服务器套接字(linux)
亲爱的,
我有一个执行子进程并尝试通过套接字连接到该子进程的主程序。此连接正常工作。但是,当检测到错误时,主程序会尝试正确关闭套接字连接,然后它会杀死子进程,重新启动一个新进程,并尝试连接新的子进程。
重新连接可以工作数百次。但是,如果我重复这数百次,在一定数量的循环之后,我的主程序就不再能够连接到子进程。
我不知道它有一个链接,但是当尝试正确关闭套接字时,我的主程序有时会收到一个 SIGPIPE。我忽略它并继续处理。但是,我注意到当程序不再接受连接时,它总是收到 10 个 SIGPIPES。我试了几次,总是10点结束。
任何想法 ?
问候, 布莱斯
编辑:
这是关闭连接的代码:`
`
这是打开它的代码:`
`
杀死子进程的代码如下:`
`
c - 在库中调用 write(2) 时禁用 SIGPIPE 信号
问题
SIGPIPE
是否可以在写入pipe()
FD时禁用信号 ( ) 的提升,而无需安装我自己的信号处理程序或全局禁用/屏蔽信号?
背景
我正在研究一个偶尔创建管道的小型库,以及fork()
一个等待来自父级消息的临时子/虚拟进程。当子进程收到来自父进程的消息时,它会(故意)死亡。
问题
子进程在我无法控制的情况下运行来自另一个(第三方)库的代码,该库很容易崩溃,所以我不能总是确定子进程在我write()
进入管道之前是活跃的。
这导致我有时会尝试write()
在子进程结束时已经死/关闭的管道,并且它会SIGPIPE
在父进程中引发 a。我在其他客户将使用的库中,因此我的库必须尽可能独立且对调用应用程序透明。安装自定义信号处理程序可能会破坏客户的代码。
工作至今
我已经通过使用解决了套接字的这个问题setsockopt(..., MSG_NOSIGNAL)
,但是我找不到任何与管道等效的功能。我已经考虑过临时安装一个信号处理程序来捕获SIGPIPE
,但我没有看到任何方法可以将其范围限制在我的库中的调用函数而不是整个过程(而且它不是原子的)。
我在 SO 上也发现了一个类似的问题,它问的是同样的问题,但不幸的是,使用poll()
/select()
不会是原子的,并且子进程在我的select()
和write()
调用之间死亡的可能性很小(但可能)。
问题(redux)
有没有办法完成我在这里尝试的事情,或者在不触发将生成的行为的情况下原子地检查并写入管道SIGPIPE
?此外,是否有可能实现这一点并知道子进程是否崩溃?知道它是否崩溃可以让我为提供“崩溃”库的供应商构建一个案例,并让他们知道它失败的频率。
c - 带有两个管道的双向消息传递中的 SIGPIPE
嗨,我必须开发这个程序来创建 4 个孩子,然后依次让他们做一个简单的操作。第一个是求和,第二个是余数,第三个是乘法,第四个是除法。父亲将他希望孩子“计算”的两个数字的字符串写在套接字上,每个孩子都应该阅读这个字符串,提取数字并进行运算。显然,作为两个管道,每次字符串都需要父亲写入,因为在孩子中读取。我真的不明白为什么在第二次迭代中,我收到了父亲写的 SIGPIPE。有人可以解释我为什么吗?我在调试中损失了 3 天,但我没有找到任何东西。非常感谢。
java - 带火花管作用的 EPIPE(断管)
我正在尝试使用纱线运行火花应用程序。应用程序使用该pipe()
操作来运行本地 php 程序。连线的事情是,每次启动 PHP 进程时,它都会在SIGPIPE
大约 1 分钟后收到一个信号(成功处理了几条记录后)并终止。
PS:同样的程序可以在独立的操作系统环境中顺利运行,但在生产环境中出错,这是一个集群。
任何人都可以帮助可能的原因是什么?谢谢。
代码如下:
Scala 端:
PHP端: