问题标签 [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.
c++ - C++ 中 Linux 中的虚假 SIGPIPE
有人听说过没有明显原因的 SIGPIPE 吗?我有一个程序,它与 SIGPIPE 一起崩溃。我用信号(SIGPIPE,SIG_IGN)防止了崩溃;出于好奇,我什么也没做,即没有错误处理。令我惊讶的是,代码运行良好。我通过一个套接字与另一个程序通信。即使在 SIGPIPE 之后,通过套接字的数据传输也能正常工作。这可能吗?SIGPIPE 由于临时网络中断?
sockets - 使用 write() 时出现 SIGPIPE 错误
当我尝试写入打开 USB 设备时返回的文件描述符时,出现 SIGPIPE 错误。我可以整天读它,但我不能写它。下面是代码:
基本上我设置了一个线程,以便能够写入文件描述符“fd”,该文件描述符在一开始是从“open()”函数返回的。每次尝试写入时都会出错。但正如我之前所说,我可以毫无问题地阅读一整天。
旁注 我已经检查了 fd 以确保我写的是正确的,而且我肯定是。
当我研究 SIGPIPE 错误时,我看到每个人都说当 fd 在远程端关闭时会发生这种情况。那么#1该文件描述符怎么可能关闭?#2如果关闭,我如何仍然能够从同一个文件描述符上的设备读取?
c - 在对等方关闭的 TCP 套接字上写入
我有一个客户端-服务器应用程序,其中每一方都通过 TCP 套接字与另一方通信。
我正确建立了连接,然后在客户端将任何数据写入套接字之前使服务器崩溃。
我看到的是第一次write()
尝试(客户端)是成功的,它返回实际写入的字节数,而下面的返回(如我所料)-1
(接收 a SIGPIPE
)和errno=EPIPE
.
为什么第一个write()
成功,即使套接字已经关闭?
编辑
有时以下write()
也有一个正的返回值,好像一切顺利。
c - SIGPIPE 在一个简单的两进程程序中
我有一个简单的叉子和管道设置,我以前使用过。但这一次,我接到了一个SIGPIPE
电话write
。这是代码
这是函数 foo:
c - 为什么这个 C 程序生成 SIGPIPE 的时间比预期的要晚?
该程序在随机时间后将SIGPIPE
其通过管道传输到“ ”后生成。head -n 1
我知道,因为我们在head -n 1
第一行之后向 " " 提供了更多内容,所以我们希望它生成SIGPIPE
,但它会在退出之前使其成为一个随机数(通常 > 20 和 < 200)。知道为什么吗?
这不是家庭作业,只是我教授的笔记中我不明白的东西。
c - Posix PIPE 上的非阻塞读取和阻塞写入
我正在编写使用 posix FIFO 进行通信的客户端-服务器应用程序。客户端和服务器都是单线程和单进程应用程序。
服务器旨在处理多个客户端。每个客户端都有自己的一对命名管道,一个用于从服务器向该客户端发送消息,另一个用于从客户端向服务器发送消息。
这个想法很简单,Server 循环遍历所有 Client 到 Server 管道,并检查那里是否有要读取的内容。
我的第一个实现是这样的:
据我所知,此代码无效。
存在竞争条件,例如调用顺序如下:1、2、4、3、5、6 - 可能会导致 SIGPIPE。
问题是即使 PIPE 的另一端没有写入器,非阻塞读取打开总是成功的。这意味着如果客户端将在 open() 上阻塞,则服务器执行非阻塞打开(这将解锁客户端),然后 read() 将返回 0,因为此时 PIPE 和之后的 close() 中将没有任何内容,那么当控制将回到想要在打开的 PIPE 上执行 write() 的客户端,这将导致 SIGPIPE,因为阅读器不再可用(服务器已经关闭了管道)。
现在我看到两个解决方案:
- 使用“tryAgain()”在客户端处理 SIGPIPE - 这看起来非常糟糕,如果我这样做,则无法保证它在任何时候都能正常工作 - 这取决于良好的命令处理顺序的可能性......
- 继续阅读 PIPE 在服务器中一直打开(打开一次并在连接被认为完成时关闭)——这在我的应用程序架构中很不方便,但当然可能。我想它会解决问题,但我不确定。
以下是我的问题:
- 这两种方法中的任何一种都是正确的方法吗?
- 有没有其他方法来处理这种情况?
- 您认为第二种解决方案会正常工作吗?
- 你会选择什么,为什么?
感谢您的每一个回答。
ios - 忽略 SIGPIPE 不起作用 iOS
我的应用程序返回signal 13: Broken pipe: 13
错误,原因可能是服务器端问题,我试图忽略我的应用程序中的 SIGPipes 以查看它是否有效,但是 xcode 不会让我这样做。它只是继续提供信号。
我添加了以下内容:
不幸的是,这根本没有帮助,而且应用程序无论如何都会冻结。我在这里想念什么?
bash - 在 bash 中终止管道程序的策略是什么?
管道程序何时终止,谁控制这个终止过程?我读过Bash:为什么管道被终止?但它只部分涵盖了这个问题。在尝试自己回答这个问题后,我做了几个例子来看看他们的输出。而这个我不明白:(a.sh
):
我将它作为./a.sh | head -3
. 输出是:
从输出中我了解到,在读取前 3 行输入后./a.sh
以信号终止,SIGPIPE
因为不需要更多数据。但是,当我删除第 1行或第 2 行时,输出将更改为以下内容:
所以我的问题是:
- 终止管道程序的政策是什么?
- 为什么第 1 行会影响程序行为?
- 为什么第 2 行会影响程序行为?
c - 节目接收信号SIGPIPE,Broken pipe
我编写了一个基于 posix 套接字的客户端程序。该程序创建多个线程并将锁定服务器。但是在gdb时间调试期间,程序给出了一个信息(错误)
这是代码:
它是什么以及该怎么做?
c - SIGPIPE(OSX)和断开连接的套接字?
我正在开发一个通过 TCP 连接到服务器的应用程序。
如果由于某种原因关闭了套接字,我最终会进入 SIGPIPE 处理程序。
我该怎么做才能使 recv 和 send 只在断开/关闭的套接字上返回错误?
谢谢