ошибка [Errno 131] Сброс соединения одноранговым узлом, за которым следует ошибка: [Errno 9] Неверный файловый дескриптор

#android #python #sockets #chat #socketserver

#Android #python #сокеты #Чат #socketserver

Вопрос:

Я использую сервер чата python из этого кода, но у меня возникла проблема с исключительным поведением клиента, мой сервер зависает и перестает работать, когда мой клиент Android переключается на другую сеть, а затем переключается обратно на сеть сервера чата. сначала я получаю ошибку

 error is [Errno 131] Connection reset by peer 
  

и затем

 error: [Errno 9] Bad file descriptor
  

Я хочу обработать это в коде моего чат-сервера и поддерживать его в рабочем состоянии всегда, либо клиент подключается, либо отключается,
подробное исключение

 ---------------------------------------------
error is [Errno 131] Connection reset by peer
---------------------------------------------

Exception happened during processing of request from ('192.168.2.46', 43160)
Traceback (most recent call last):
 File "/usr/local/lib/python2.7/SocketServer.py", line 582, in process_request_thread
self.finish_request(request, client_address)
File "/usr/local/lib/python2.7/SocketServer.py", line 323, in finish_request
self.RequestHandlerClass(request, client_address, self)
 File "/usr/local/lib/python2.7/SocketServer.py", line 640, in __init__
self.finish()
File "/home/rahulm/datagroup.py", line 242, in finish
self.roomcast('n  %s has disconnected  *n' % self)
 File "/home/rahulm//datagroup.py", line 341, in roomcast
listener.request.send(data)
error: [Errno 32] Broken pipe
----------------------------------------
error is [Errno 9] Bad file descriptor
----------------------------------------

Exception happened during processing of request from ('192.168.2.63', 40460)
Traceback (most recent call last):
File "/usr/local/lib/python2.7/SocketServer.py", line 582, in process_request_thread
self.finish_request(request, client_address)
File "/usr/local/lib/python2.7/SocketServer.py", line 323, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/local/lib/python2.7/SocketServer.py", line 640, in __init__
self.finish()
File "/mnt/usb/PirateBox/Shared/datagroup.py", line 242, in finish
self.roomcast('n  %s has disconnected  *n' % self)
File "/mnt/usb/PirateBox/Shared/datagroup.py", line 341, in roomcast
listener.request.send(data)
File "/usr/local/lib/python2.7/socket.py", line 170, in _dummy
raise error(EBADF, 'Bad file descriptor')
error: [Errno 9] Bad file descriptor
----------------------------------------
  

Примечание: — Я запускаю чат-сервер на встроенном устройстве, поэтому я не могу использовать Twisted
, любая помощь наиболее ценится.
Заранее спасибо!!!

Комментарии:

1. Вероятно, ваше соединение с сокетом было закрыто до listener.request.send(data) того, как файловый дескриптор стал дескриптором операционной системы всякий раз, когда вы открываете порт, ОС открывает его как открытый файл, когда вы закрываете его, файл очищается.

2. спасибо, Коби К, так каким может быть решение для этого? можете ли вы предложить что-нибудь, пожалуйста?

3. Я бы просто отладил свой код, чтобы узнать, есть ли действие закрытия для соединения для сервера или клиента, вы можете подтвердить, что это ваша проблема, прокомментировав окончательную отправку в вашем finish() методе

4. Я прокомментировал эту строку ‘self.request.close’ в методе finish (), но все еще не работает, не могли бы вы быть более конкретными и помочь?

5. Это действительно сложно сказать без какого-либо кода, если вы можете прикрепить соответствующий код, его будет легче проверить.