Stanisław P. Software designer
Temat: Zamykanie socketa
HejMam problem z połączeniem, które zostaje aktywne nawet po teoretycznym zamknięciu:
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind(("0.0.0.0", 7227))
serversocket.listen(5)
try:
__while 1:
____(clientsocket, address) = serversocket.accept()
____try:
______print "got connection from %s" % repr(address)
______input = ""
______while len(input)==0 or (not input.endswith("\n\n")):
________input += clientsocket.recv(1024)
# ...............................................
# tu jeszcze jakiś kod
# ...............................................
____finally:
______clientsocket.shutdown(2)
______clientsocket.close()
finally:
__serversocket.shutdown(2)
__serversocket.close()
Kiedy program jest zatrzymany (ctrl+c, albo wyjątek) w czasie samego `serversocket.accept()` to wszystko jest ok, ale za każdym razem jak przerywa coś w wewnętrznym try'u, albo chwilę po rozłączeniu się klienta, to serversocket (0.0.0.0:7227) jest zamknięty, ale clientsocket ostatniego połączenia dalej jest w stanie TIME_WAIT - nawet po zakończeniu całego procesu python'a.
Netstat potwierdza, że na 7227 nikt nie słucha, ale listuje też normalne połączenie do ostatniego klienta, które znika dopiero po timeoucie.
Jakieś pomysły jak można zamknąć to połączenie naprawdę?
PS. jak tu można kod formatować? ....Stanisław Pitucha edytował(a) ten post dnia 29.04.08 o godzinie 14:44