Tôi đã cố gắng kết nối ổ cắm (ổ cắm máy chủ) tại số cổng 8000
. Nó hoạt động và đã làm việc cho tôi. Ở cuối mã, tôi cũng đóng ổ cắm. Ngay sau đó, tôi chạy mã của tôi một lần nữa và nó cho tôi thấy rằng địa chỉ đã được sử dụng. Tôi đã in ý nghĩa của các giá trị lỗi strerror(errno);
để xem mã của tôi có hoạt động đúng tại mỗi điểm hay không. Để kiểm tra xem cổng có miễn phí không, tôi đã kiểm tra nó bằng cách sử dụng netstat
nhưng nó cho thấy rằng số cổng 8000
là miễn phí. Nó đã xảy ra với tôi rất nhiều lần. Mỗi lần tôi đợi thêm vài giây nữa và sau đó nó bắt đầu hoạt động trở lại. Tôi đang sử dụng ngôn ngữ c. Vì vậy, lý do gì cho hành vi này bởi hệ điều hành của tôi.Lỗi: Địa chỉ đã được sử dụng trong khi cổng kết nối có địa chỉ nhưng số cổng được hiển thị miễn phí bởi `netstat`
Sau một vài giây nữa, tôi chạy mã và sau đó nó hoạt động.
[email protected]:~/Desktop/testing$ sudo ./a.out
Socket Creation: Success
File open: Success
Socket Bind: Address already in use
Socket Listen: Address already in use
^C
[email protected]:~/Desktop/testing$ sudo netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1348/lighttpd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 984/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1131/cupsd
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1211/mysqld
tcp6 0 0 :::22 :::* LISTEN 984/sshd
tcp6 0 0 ::1:631 :::* LISTEN 1131/cupsd
[email protected]:~/Desktop/testing$ sudo ./a.out
Socket Creation: Success
File open: Success
Socket Bind: Address already in use
Socket Listen: Address already in use
^C
[email protected]:~/Desktop/testing$
cảm ơn câu trả lời có liên kết để đáp ứng truy vấn của tôi. – Durin
có một giải pháp khả thi trên trang bạn đã liên kết. Bạn có thể sử dụng tùy chọn SO_REUSEADDR cho socket. xem setsockopt ở đây: http://linux.die.net/man/3/setsockopt – Vereb
"không có cách nào thực sự xung quanh nó và nó không phải là một lỗi", thích nó: P –