Я использую кучу sockets
в моем скрипте Python, возможно, 20/s. Эфемерные, сделанные за три секунды. Я пытался сделать хорошую работу по отправке socket.close()
ко всему, но почему-то CLOSE_WAIT
статусы на sockets
все еще продолжают накапливаться.Как принудительно закрыть CLOSE_WAIT-сокет в Python?
Как я могу принудительно закрыть эти CLOSE_WAIT
sockets
? Или я могу установить на них нижний timeout
? Они в конечном итоге накапливаются до места крушения.
Это мой сокет код:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.settimeout(2) # 2 seconds timeout
l_onoff = 1
l_linger = 0
s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack('ii', l_onoff, l_linger))
self.s = s
streamloop.add_callback(self.connect, s)
Это мой близкий:
def full_close(self):
try:
self.stream.close()
self.s.close()
except Exception:
print 'full_close err: ', sys.exc_info()[1:3]
pass
Есть ли способ перебрать все сокеты 'open' или' close_wait', а затем убить их? Как ручной сбор мусора? – knutole
Этот код не выполняет ничего, кроме подтверждения настройки по умолчанию. Не делайте этого, это просто приглашение кому-то позже поиграть с ним. – EJP