TIME_WAIT
Mac OS X'te sürüm yok
Normalde, bir TCP bağlantısı kapatıldığında, close()
ilk olarak adlandırılan taraftaki soket durumunda kalır TIME_WAIT
.
Eşlerden biri bir Mac OS X (Lion) makinesi olduğunda , Mac tarafında ilk olarak çağrılırsa Mac'te hayır TIME_WAIT
listelenir . Ancak, soket gibi görünüyor olduğunu aslında aramaya çalışıyorum, çünkü devlet (soket seçeneğini kullanmadan tekrar ) neden başarısız.netstat -an
close()
TIME_WAIT
listen()
SO_REUSEADDR
listen()
2 * MSL (Mac OS X Lion'da bildirildiği gibi 15 saniye olan Maksimum Segment Ömrü sysctl net.inet.tcp.msl
) beklemesi TIME_WAIT
durumu temizler ve listen()
hatasız olarak tekrar çağrılabilir.
Soketi neden göremiyorum TIME_WAIT
?
Test yapmak
İşte Python'da iki basit test programı.
Sunucu
#!/usr/bin/env python
import socket
HOST = ''
PORT = 50007
l = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
l.bind((HOST, PORT))
l.listen(1)
print("Listening on %d" % PORT)
(s, _) = l.accept()
print("Connected")
raw_input("Press <enter> to close...")
l.close()
s.close()
print("Closed")
müşteri
#!/usr/bin/env python
import socket
import sys
HOST = sys.argv[1]
PORT = 50007
print("Opening connection to server")
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
raw_input("Press <enter> to close...")
s.close()
print("Closed")
Hem sunucuyu hem de istemciyi iki farklı Linux makinesinde çalıştırırken, <enter>
aramak için basan eş close()
ilk TIME_WAIT
olarak beklendiği gibi olur :
$ ./server-timewait.py
Listening on 50007
Connected
Press <enter> to close...
Closed
$ netstat -an | grep 50007
tcp 0 0 172.16.185.219:50007 172.16.185.42:49818 TIME_WAIT
$
Eşlerden biri Mac (OS X Lion çalıştıran) TIME_WAIT
olduğunda netstat -an | grep 50007
, Mac'te ilk kapattıktan sonra hiç bir zaman göremiyorum .
sudo lsof -i -P
zaten çıkmış olan işlemler için de TIME_WAIT durumunu göstermez.