TIME_WAIT
ম্যাক ওএস এক্সে কোনও এস
সাধারণত, যখন কোনও টিসিপি সংযোগ বন্ধ থাকে, তখন সকেটটি যেখানে close()
প্রথমে বলা হয় সেই TIME_WAIT
রাজ্যে রেখে দেওয়া হয় ।
যখন সমবয়সীদের মধ্যে একটি হ'ল ম্যাক ওএস এক্স (লায়ন) মেশিন থাকে তখন ম্যাকের TIME_WAIT
দ্বারা প্রথমে ম্যাক দিকে বলা netstat -an
হয় তবে ম্যাকের দ্বারা তালিকাভুক্ত নয় close()
। যাইহোক, এটা মনে হচ্ছে যে সকেট হয় আসলে TIME_WAIT
রাষ্ট্র, কারণ কল করতে চাইছেন listen()
আবার (সকেট বিকল্প ব্যবহার না করেই SO_REUSEADDR
) ঘটায় listen()
ব্যর্থ।
2 * এমএসএলের জন্য অপেক্ষা করা (ম্যাক ওএস এক্স লায়ন অনুসারে সর্বোচ্চ সেগমেন্ট লাইফটাইম যা 15 সেকেন্ড হয় sysctl net.inet.tcp.msl
) TIME_WAIT
রাষ্ট্র সাফ করে , এবং listen()
ত্রুটি ছাড়াই আবার কল করা যেতে পারে।
আমি কেন সকেটটি দেখতে পাচ্ছি না TIME_WAIT
?
পরীক্ষামূলক
পাইথনে এখানে দুটি সাধারণ পরীক্ষা প্রোগ্রাম রয়েছে।
সার্ভার
#!/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")
মক্কেল
#!/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")
দুটি ভিন্ন লিনাক্স মেশিনে সার্ভার এবং ক্লায়েন্ট উভয়ই চলাকালীন, প্রথমে <enter>
কল করার জন্য যে পিয়ারটি টিপতে হবে তা প্রত্যাশার মতো হয়ে যায়:close()
TIME_WAIT
$ ./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
$
যখন সমবয়সীদের মধ্যে একজন ম্যাক (চলমান ওএস এক্স সিংহ) TIME_WAIT
তখন কখনই দেখি netstat -an | grep 50007
না ম্যাকের উপরে প্রথমে বন্ধ হওয়ার পরে দৌড়ানো ।
sudo lsof -i -P
প্রক্রিয়া ইতিমধ্যে পারেন থেকে বেরিয়ে গিয়েছেন জন্য TIME_WAIT অবস্থা দেখায় না।