Tôi đang làm việc với một chút Python trông như thế này:Python thư viện socket nghĩ socket là mở khi nó không phải
HOST = '127.0.0.1'
PORT = 43434
single = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
single.bind((HOST, PORT))
except socket.error as e:
# Print an error, exit.
Trong khi nó được hoạt động tốt trong quá khứ, bây giờ chúng tôi nhận được lỗi [Errno 98] Address already in use
. Trình xử lý SIGINT đóng kết nối ổ cắm, vì vậy tôi không chắc nó có trạng thái như thế nào, nhưng bây giờ tôi chỉ đang cố sửa nó.
Cả lsof
và netstat
nói không có gì sử dụng cổng đó là:
[$]> sudo netstat -an | grep 43434
[$]> sudo lsof -i :43434
TIME_WAIT
được thiết lập đến 60 giây, theo /proc/sys/net/ipv4/tcp_fin_timeout
, nhưng lỗi xảy ra thậm chí vài giờ sau khi chạy cuối cùng thành công.
Tôi đã cố gắng (tạm thời) thiết lập REUSEADDR
(qua single.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
), nhưng điều đó dường như không có hiệu lực.
Điều gì đang xảy ra? Liệu tôi có thể sử dụng lại cổng này mà không phải khởi động lại máy không?
Bạn có gọi 'setsockopt' trước khi bạn được gọi là' bind'? –
@WaleedKhan Yep; nó đã đi ngay trước 'try'. –