标签: broken-pipe

为什么这个套接字连接只允许1个发送和接收?

背景
我有一个简单的套接字服务器设置,我试图允许同时连接和回显数据.客户端启动多个线程,每个线程都与服务器建立自己的连接.这适用于socket.send()调用,但所有后续调用都会导致"由对等方重置连接"或"断开管道".请注意,我没有找到切换重置和损坏管道的更改.我在这里寻找解决方案,但恐怕我可能不知道该搜索什么.

我是以错误的方式解决这个问题,还是我在设置中忽略了什么?

服务器

import SocketServer

class MyTCPHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        self.data = self.request.recv(1024).strip()
        print "{} wrote: {}\n".format(self.client_address[0], self.data)
        self.request.send(self.data.upper())

if __name__ == "__main__":
    HOST, PORT = "localhost", 9999
    server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
    server.serve_forever()
Run Code Online (Sandbox Code Playgroud)

客户

import socket
import sys
import threading
import time

HOST, PORT = "localhost", 9999
def create_client():
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        cur_thread = threading.current_thread()
        sock.connect((HOST, PORT))
        for x in range(55):
            msg = "{}: {}\n".format(cur_thread.name, str(x))
            # Connect to server and send data
            print cur_thread.name + ": …
Run Code Online (Sandbox Code Playgroud)

python sockets tcp broken-pipe socketserver

4
推荐指数
1
解决办法
4679
查看次数

EC2 ssh断管终止运行过程

我正在使用EC2实例运行一项大型工作,我估计大约需要24小时才能完成.我得到了同样的问题,这里描述ssh断管ec2

我按照上面帖子中的建议/解决方案,在我的ssh会话shell中,我通过以下命令启动了我的python程序:

nohup python myapplication.py > myprogram.out 2>myprogram.err
Run Code Online (Sandbox Code Playgroud)

一旦我这样做,连接保持完整的时间比我不使用nohup它的时间更长,但它最终失败broken pipe error并且我回到原点.结果' python myapplication.py'终止了.

有关正在发生的事情的任何想法以及我可以采取哪些措施来防止这种情况发生?

unix linux ssh broken-pipe amazon-ec2

3
推荐指数
2
解决办法
2856
查看次数

Socket:send()函数返回'Broken Pipe'错误

我是套接字编程的新手,我正在尝试使用send()C++中的函数向服务器发送一些数据包,但在向服务器发送数据包时,我总是收到"Broken pipe"错误.你可以帮我解决以下几点吗?

  1. send()函数返回"Broken pipe"错误时?
  2. 套接字编程中出现"Broken pipe"错误的原因是什么?
  3. send()函数的"Broken pipe"错误解决方案是什么?

注意:我使用命名套接字在客户端和服务器之间进行通信.

c++ sockets tcp broken-pipe send

2
推荐指数
1
解决办法
9210
查看次数

为什么write()不应该返回0呢?

我遇到过write()在远程关闭的客户端上使用服务器端不返回0的情况.

根据男子2 write:

成功时,返回写入的字节数(零表示没有写入).出错时,返回-1,并正确设置errno.

根据我的理解:当在远程关闭的套接字上使用read/ 时write,第一次尝试应该失败(因此返回0),并且下一次尝试应该触发断开的管道.但事实并非如此.write()就好像它在第一次尝试时成功发送数据一样,然后在下次尝试时我得到一个破损的管道.

我的问题是为什么?

我知道如何妥善处理破损的管道,这不是问题.我只是想了解为什么在这种情况下write不会返回0.

下面是我写的服务器代码.在客户端,我尝试了一个基本的C客户端(使用close()和shutdown()来关闭套接字)和netcat.这三个人给了我相同的结果.


#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>

#define MY_STR "hello world!"

int start_server(int port)
{
  int fd;
  struct sockaddr_in sin;

  fd = socket(AF_INET, SOCK_STREAM, 0);
  if (fd == -1)
    {
      perror(NULL);
      return (-1);
    }
  memset(&sin, 0, sizeof(struct sockaddr_in));
  sin.sin_addr.s_addr = htonl(INADDR_ANY);
  sin.sin_family = AF_INET;
  sin.sin_port = htons(port); …
Run Code Online (Sandbox Code Playgroud)

c sockets linux broken-pipe

1
推荐指数
1
解决办法
130
查看次数

android:java.net.SocketException:破管LG

我正在开发Android 2.2和LG Black设备的应用程序.当我在我的LG设备上运行应用程序时,我得到以下SocketException,这在其他设备上永远不会发生!

Broken pipe
  java.net.SocketException: Broken pipe
  at org.apache.harmony.luni.platform.OSNetworkSystem.writeSocketImpl(Native Method)
  at org.apache.harmony.luni.platform.OSNetworkSystem.write(OSNetworkSystem.java:723)
  at org.apache.harmony.luni.net.PlainSocketImpl.write(PlainSocketImpl.java:578)
  at org.apache.harmony.luni.net.SocketOutputStream.write(SocketOutputStream.java:59)
Run Code Online (Sandbox Code Playgroud)

如何解决?谢谢.

android broken-pipe socketexception lg

0
推荐指数
1
解决办法
2747
查看次数

标签 统计

broken-pipe ×5

sockets ×3

linux ×2

tcp ×2

amazon-ec2 ×1

android ×1

c ×1

c++ ×1

lg ×1

python ×1

send ×1

socketexception ×1

socketserver ×1

ssh ×1

unix ×1