Error de tubería rota: [Errno 32] Tubería rota en Debian 11 con python socket.socket

2 minutos de lectura

Creé un script de cliente en mi debian 11 vps y si trato de ejecutar el script obtendré el BrokenPipeError: [Errno 32] Tuberia rota.

He notado que mi servidor de destino no recibe nada. Creo que ni siquiera se ha establecido la conexión. Pero si ejecuté el mismo script en mi escritorio de Windows, funciona sin problemas.

Este es mi código que se ejecuta en una máquina con Windows pero no en Debian 11:

import socket
from time import sleep

class PySockAPIError(Exception): pass

dftHOSTPORT =   ("IPADRESS", 30001)
dftAUTHPW =     "STUPIDLONGPASSWORD"
dftCOMMAND =    ("IS_SERVER_UP",)

class SOCKAPI:
    def __init__(self, host = dftHOSTPORT, pwd = dftAUTHPW):
        #con-data
            self.HOSTPORT = host
        self.AUTHPW = pwd
        self.con = None
        self.CreateCon()

    def CreateCon(self):
        try:
            self.con = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.SOL_TCP)
            self.con.connect(self.HOSTPORT)
            print("Connected to the Server!")
        except socket.error:
            print("TBD")

    def CloseCon(self):
        if self.con:
            self.con.close()
            print("Disconnected from the Server!")

    def Send(self, cmd = dftCOMMAND):
        try:
            #send
            CMDSEND = "\xFA%s\n" % cmd
            CMDSEND = bytes(CMDSEND, "CP1252")
            print(CMDSEND)
            self.con.send(CMDSEND)

            #receive
            recv_data = self.con.recv(1024)
            try:
                print(recv_data.decode("CP1252"))
            except:
                pass
            sleep(0.1)
        except socket.error:
            raise PySockAPIError("Socket failed, con-data maybe wrong (%s, %s, %s)"%(self.HOSTPORT[0], self.HOSTPORT[1], self.AUTHPW))
        except socket.timeout:
            print("TBD!")

if __name__ == "__main__":
    sock = SOCKAPI()
    msg = ""
    while msg != "STOP":
        msg = input("Enter a Command:")
        sock.Send(msg)
    sock.CloseCon()

Aquí está la salida en el servidor debain

Ya intenté trabajar con la señal (SIGPIPE,SIG_IGN), pero esto solo hizo que mi error desapareciera, pero aún así la conexión no está registrada en mi servidor de destino. No sé por qué se ejecuta el mismo script desde Windows pero no desde Unix.

gracias de antemano

  • No cargue imágenes de código/datos/errores. Edite su pregunta y copie y pegue el resultado como texto y formatearlo como un bloque de código. ¿Qué código de servidor usas? Cree un ejemplo mínimo reproducible utilizando una conexión a localhost. Asegúrese copiar pegar exactamente el código que ejecuta en su sistema. Imprima un mensaje de error útil en los controladores de excepciones, por ejemplo traceback.print_exc()

    – Bodo

    13 de febrero a las 16:54

¿Ha sido útil esta solución?