LINUX.ORG.RU

Отпадает сокет в потоке

 , ,


0

1

Добрый день. Есть два стула скрипта:первый-сервер, второй- клиент. Для проверки на отключение клиента сервер использует такой код

data = conn.recv(1024)
if not data:
    break
Когда я использую с сервером простой клиент все работает хорошо
s = socket.socket()
s.connect((host, port))
try:
    while True:
        buf = input(">>")
        s.send(bytes(buf.encode('utf-8')))
        data=s.recv(1024)
        print (data.decode("utf-8"))
finally:
    s.close()
Но если я выношу клиент в отдельный поток, серверная проверка детектит отключение
class client(threading.Thread):
    def __init__(self, sock):
        self.sock=sock
        threading.Thread.__init__(self)
    def run(self):
        try:
            while 1:
                data = self.sock.recv(1024)
                print (data.decode("utf-8"))
        finally:
            self.sock.close()
            return
s = socket.socket()
s.connect((host, port))
th=client(s)
th.start()
Как фиксить не знаю.По лицу не бейте, в институт завтра. Сорцы: Сервер http://pastebin.com/FNhyVKjr Клиент http://pastebin.com/EpwiWZib


Ответ на: комментарий от ziemin

Для клиентского сокета racv - блокирующая операция, как input()

Какое исключение?

helium
() автор топика

как должно работать-то в итоге? и почему input() вместо raw_input() тоже не очень ясно.

Novel ★★★★
()
Ответ на: комментарий от Novel

+1

sen.start() асинхронный, поэтому finally выполняется сразу же.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.