Форум сайта python.su
Простой клиент/сервер, если я пересылаю сообщения размером менее 1150 байт, то эта связка рушится (после 40к-60к коннектов):
Клиент не коннектится и выдает " Cannot assign requested address“
Сервер молча висит, но если его пытаться перезапустить то ”socket.error: Address already in use", хотя netstat -nlp кажет что порт свободен.
Спустя минуту порт освобождается и можно запускать заново.
Но если я отправляю сообщения 1150 байт и более, то все работает стабильно.
ubuntu 11.10 64bit, py2.7
подозрение на linux, никто не сталкивался с таким?
server
import socket import time s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(('', 11000)) s.listen(10) def work(): try: conn, addr = s.accept() data = conn.recv(16384) conn.sendall(data) finally: conn.close() try: t = time.time() col = 0 while 1: col += 1 if not col%10000: t0 = time.time() d = t0 - t print '%d: %.2fs, b: %.2f' % (col, d, 10000/d) t = t0 work() finally: print 'close socket' s.close()
import socket import time def work(): try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('localhost', 11000)) #s.sendall('0123456789'*115) # <--- no errors s.sendall('0123456789'*10) # errors data = s.recv(16384) except Exception as e: print e time.sleep(1) finally: s.close() col = 0 while 1: col += 1 if not col%10000: print col work()
Отредактировано o7412369815963 (Апрель 20, 2013 16:26:40)
Офлайн
o7412369815963От этого спасет
Клиент не коннектится и выдает “ Cannot assign requested address“Сервер молча висит, но если его пытаться перезапустить то ”socket.error: Address already in use”, хотя netstat -nlp кажет что порт свободен.
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
finally: conn.shutdown(socket.SHUT_RDWR) conn.close()
Отредактировано reclosedev (Апрель 20, 2013 17:04:11)
Офлайн
Если клиента подольше подержать - он “очухивается”
[Errno 99] Cannot assign requested address [Errno 99] Cannot assign requested address [Errno 99] Cannot assign requested address 70000 80000 [Errno 99] Cannot assign requested address .... [Errno 99] Cannot assign requested address 90000 100000 110000 [Errno 99] Cannot assign requested address
Офлайн
Посмотрите upd в предыдущем посте. Помогло?
Я так понимаю, что дело в превышении лимитов одновременно открытых сокетов, из-за того, что на время пока close() отдает закрытие на откуп системе, сервер уже готов принимать новые соединения, а клиенты пытаются насоздовать новые сокеты.
o7412369815963Наверное, там лимиты побольше.
Ещё проверил на сервере, там стабильно работает,
Офлайн
reclosedevДа, похоже на правду.
Посмотрите upd в предыдущем посте. Помогло?Я так понимаю, что дело в превышении лимитов одновременно открытых сокетов, из-за того, что на время пока close() отдает закрытие на откуп системе, сервер уже готов принимать новые соединения, а клиенты пытаются насоздовать новые сокеты.
Офлайн
Запустил 4 форка от сервера и 10 клиентов, на core i7 920, обрабатывает 25к коннектов в сек. работает стабильно.
Офлайн