#python #unix
Вопрос:
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 — экземпляра.
ПРАВКА: Кто-нибудь знает, что еще может вызвать эту ошибку при запуске нескольких процессов клиента? Он работает с одной обработкой.