Я попытался связать свой сокет (сокет сервера) с номером порта 8000
. Он работал и выполнял эту работу для меня. В конце кода я также закрываю сокет. В следующий же миг я снова запустил свой код, и он показывает мне, что адрес уже используется. Я напечатал значение значений ошибок strerror(errno);
, чтобы проверить, правильно ли работает мой код в каждой точке. Чтобы проверить, свободен ли порт, я проверил его с помощью netstat
, но он показывает, что номер порта 8000
свободен. Это случалось со мной много раз. Каждый раз я жду еще несколько секунд, а затем снова начинает работать. Я использую язык c. Итак, какова причина этого поведения моей ОС.
После нескольких секунд я запускаю код, а затем он работает.
[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$