Найти - Пользователи
Полная версия: socket: можно ли отловить ошибку соединения через select?
Начало » Network » socket: можно ли отловить ошибку соединения через select?
1
axe
есть пул сокетов, связанных с клиентами:
class SocketPool(object):
pool = []
def run(self):
print "begin"
while 1:
for s in self.pool:
iwtd, owtd, ewtd = select.select( [s], [], [s], 0.1 )
print iwtd, owtd, ewtd
if iwtd:
data = s.recv(1024)
s.send(data.upper())
print data
когда приходят данные, цикл их успешно получает, обрабатывает и отправляет назад.

если один из клиентских сокетов отвалился, то я ожидал, что в ewtd должен стать непустым.
но непустым становится iwtd. т.е. я не различаю события, произошедшие в сокете: “данные пришли” от “отвалился клиент”.
соответственно, возникает ошибка. в-принципе, я могу отловить ошибку через try, но как-то это некрасиво.
axe
кажется, разобрался.
чтобы анализировать произошедшие события по конкретным сокетам, надо использовать poll
а select вообще надо по-другому использовать. не для каждого сокета смотреть изменения, а для всех сокетов сразу
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB