Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Network
  • » socket: можно ли отловить ошибку соединения через select? [RSS Feed]

#1 Янв. 20, 2010 09:25:07

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

socket: можно ли отловить ошибку соединения через select?

есть пул сокетов, связанных с клиентами:

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, но как-то это некрасиво.



Офлайн

#2 Янв. 20, 2010 11:05:47

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

socket: можно ли отловить ошибку соединения через select?

кажется, разобрался.
чтобы анализировать произошедшие события по конкретным сокетам, надо использовать poll
а select вообще надо по-другому использовать. не для каждого сокета смотреть изменения, а для всех сокетов сразу



Офлайн

  • Начало
  • » Network
  • » socket: можно ли отловить ошибку соединения через select?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version