首页 > 解决方案 > Python 传输端点已连接

问题描述

    def ask(self):
        self.mutex.acquire()
        self.sock.connect(self.address)
        self.sock.sendall(Utility.tolength("DO UNIX-Terminal -1", " ", 2048).encode())
        m = self.sock.recv(2048)
        self.sock.close()
        self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
        self.mutex.release()
        return m

使用 ask() 后,我得到以下异常:

File "./DeviceServerRequester.py", line 22, in ask
self.sock.connect(self.address)
OSError: [Errno 106] Transport endpoint is already connected

我的意思是,我关闭了套接字。我重新实例化了套接字。一切都发生在互斥体中......我不明白,为什么操作系统保持连接。

编辑:底层服务器如下所示:

    def run(self):
    self.bindsocket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
    self.bindsocket.bind(self.adress)
    self.bindsocket.listen()

    while True:
        newsocket, addr = self.bindsocket.accept()

        string = newsocket.recv(2048).decode()
        (deviceid, cmd, cmdargs, _) = string.split(" ", 3)

        if cmd == "DO":
            message = "OK: "
            backmessage = self.give(self, deviceid, cmd, cmdargs)
            message = (message + backmessage)
            newsocket.sendall((message + " "*(MESSAGELENGTH-len(br))).encode())
        else:
            br = "BAD REQUEST"
            newsocket.sendall((br + " "*(MESSAGELENGTH-len(br))).encode())

        newsocket.close()

编辑:我可能会补充一点,有时它似乎工作了一段时间。我正在运行多个 uwsgi - 实例。

编辑:有人知道在运行客户端的多个进程时还有什么可能引发此错误吗?它可以单独处理。

标签: pythonunix

解决方案


推荐阅读