问题标签 [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.

0 投票
1 回答
728 浏览

c++ - C++ 中 Linux 中的虚假 SIGPIPE

有人听说过没有明显原因的 SIGPIPE 吗?我有一个程序,它与 SIGPIPE 一起崩溃。我用信号(SIGPIPE,SIG_IGN)防止了崩溃;出于好奇,我什么也没做,即没有错误处理。令我惊讶的是,代码运行良好。我通过一个套接字与另一个程序通信。即使在 SIGPIPE 之后,通过套接字的数据传输也能正常工作。这可能吗?SIGPIPE 由于临时网络中断?

0 投票
0 回答
661 浏览

sockets - 使用 write() 时出现 SIGPIPE 错误

当我尝试写入打开 USB 设备时返回的文件描述符时,出现 SIGPIPE 错误。我可以整天读它,但我不能写它。下面是代码:

基本上我设置了一个线程,以便能够写入文件描述符“fd”,该文件描述符在一开始是从“open()”函数返回的。每次尝试写入时都会出错。但正如我之前所说,我可以毫无问题地阅读一整天。

旁注 我已经检查了 fd 以确保我写的是正确的,而且我肯定是。

当我研究 SIGPIPE 错误时,我看到每个人都说当 fd 在远程端关闭时会发生这种情况。那么#1该文件描述符怎么可能关闭?#2如果关闭,我如何仍然能够从同一个文件描述符上的设备读取?

0 投票
3 回答
5113 浏览

c - 在对等方关闭的 TCP 套接字上写入

我有一个客户端-服务器应用程序,其中每一方都通过 TCP 套接字与另一方通信。

我正确建立了连接,然后在客户端将任何数据写入套接字之前使服务器崩溃。
我看到的是第一次write()尝试(客户端)是成功的,它返回实际写入的字节数,而下面的返回(如我所料)-1(接收 a SIGPIPE)和errno=EPIPE.

为什么第一个write()成功,即使套接字已经关闭?

编辑 有时以下write()也有一个正的返回值,好像一切顺利。

0 投票
1 回答
1604 浏览

c - SIGPIPE 在一个简单的两进程程序中

我有一个简单的叉子和管道设置,我以前使用过。但这一次,我接到了一个SIGPIPE电话write。这是代码

这是函数 foo:

0 投票
4 回答
907 浏览

c - 为什么这个 C 程序生成 SIGPIPE 的时间比预期的要晚?

该程序在随机时间后将SIGPIPE其通过管道传输到“ ”后生成。head -n 1我知道,因为我们在head -n 1第一行之后向 " " 提供了更多内容,所以我们希望它生成SIGPIPE,但它会在退出之前使其成为一个随机数(通常 > 20 和 < 200)。知道为什么吗?

这不是家庭作业,只是我教授的笔记中我不明白的东西。

0 投票
1 回答
3018 浏览

c - Posix PIPE 上的非阻塞读取和阻塞写入

我正在编写使用 posix FIFO 进行通信的客户端-服务器应用程序。客户端和服务器都是单线程和单进程应用程序。

服务器旨在处理多个客户端。每个客户端都有自己的一对命名管道,一个用于从服务器向该客户端发送消息,另一个用于从客户端向服务器发送消息。

这个想法很简单,Server 循环遍历所有 Client 到 Server 管道,并检查那里是否有要读取的内容。

我的第一个实现是这样的:

据我所知,此代码无效。

存在竞争条件,例如调用顺序如下:1、2、4、3、5、6 - 可能会导致 SIGPIPE。

问题是即使 PIPE 的另一端没有写入器,非阻塞读取打开总是成功的。这意味着如果客户端将在 open() 上阻塞,则服务器执行非阻塞打开(这将解锁客户端),然后 read() 将返回 0,因为此时 PIPE 和之后的 close() 中将没有任何内容,那么当控制将回到想要在打开的 PIPE 上执行 write() 的客户端,这将导致 SIGPIPE,因为阅读器不再可用(服务器已经关闭了管道)。

现在我看到两个解决方案:

  1. 使用“tryAgain()”在客户端处理 SIGPIPE - 这看起来非常糟糕,如果我这样做,则无法保证它在任何时候都能正常工作 - 这取决于良好的命令处理顺序的可能性......
  2. 继续阅读 PIPE 在服务器中一直打开(打开一次并在连接被认为完成时关闭)——这在我的应用程序架构中很不方便,但当然可能。我想它会解决问题,但我不确定。

以下是我的问题:

  1. 这两种方法中的任何一种都是正确的方法吗?
  2. 有没有其他方法来处理这种情况?
  3. 您认为第二种解决方案会正常工作吗?
  4. 你会选择什么,为什么?

感谢您的每一个回答。

0 投票
1 回答
1792 浏览

ios - 忽略 SIGPIPE 不起作用 iOS

我的应用程序返回signal 13: Broken pipe: 13错误,原因可能是服务器端问题,我试图忽略我的应用程序中的 SIGPipes 以查看它是否有效,但是 xcode 不会让我这样做。它只是继续提供信号。

我添加了以下内容:

不幸的是,这根本没有帮助,而且应用程序无论如何都会冻结。我在这里想念什么?

0 投票
1 回答
117 浏览

bash - 在 bash 中终止管道程序的策略是什么?

管道程序何时终止,谁控制这个终止过程?我读过Bash:为什么管道被终止?但它只部分涵盖了这个问题。在尝试自己回答这个问题后,我做了几个例子来看看他们的输出。而这个我不明白:(a.sh):

我将它作为./a.sh | head -3. 输出是:

从输出中我了解到,在读取前 3 行输入后./a.sh以信号终止,SIGPIPE因为不需要更多数据。但是,当我删除第 1行或第 2 行时输出将更改为以下内容:

所以我的问题是:

  • 终止管道程序的政策是什么?
  • 为什么第 1 行会影响程序行为?
  • 为什么第 2 行会影响程序行为?
0 投票
5 回答
90842 浏览

c - 节目接收信号SIGPIPE,Broken pipe

我编写了一个基于 posix 套接字的客户端程序。该程序创建多个线程并将锁定服务器。但是在gdb时间调试期间,程序给出了一个信息(错误)

这是代码:

它是什么以及该怎么做?

0 投票
6 回答
2503 浏览

c - SIGPIPE(OSX)和断开连接的套接字?

我正在开发一个通过 TCP 连接到服务器的应用程序。

如果由于某种原因关闭了套接字,我最终会进入 SIGPIPE 处理程序。

我该怎么做才能使 recv 和 send 只在断开/关闭的套接字上返回错误?

谢谢