2016-11-30 3 views
1

Я пытаюсь написать базовую программу сокетов сервера. Я использую следующий код для привязки серверного сокета.Как повторно использовать порт в приложении сервера сокетов?

/* Bind the server socket */ 
if (bind(serversock, (struct sockaddr *) &server, sizeof(server)) < 0) 
{ 
    perror("Failed to bind the server socket"); 
    exit(1); 
} 

При запуске программы в первый раз, она работает нормально, но когда я запускаю его во второй раз, я получаю эту ошибку:

error

Я думаю, когда я запускаю программу второй раз он дает эту ошибку, потому что порт уже связан с программой, которую я запускаю в первый раз. Может ли кто-нибудь сказать мне, как закрыть порт, который в настоящее время используется? Или предложите мне что-то еще, что может решить эту ошибку.

+0

как о 'близко()' https://linux.die.net/man/7/socket –

+0

подождите 5-10 минут и снова запустите программу. –

+0

@KamiKaze У меня уже есть 'close()' в моей программе, но когда я заканчиваю программу с помощью ctrl^c, 'close()' не помогает. – Razin

ответ

1

убить процесс, который связывает порт:

fuser -TERM 80/tcp #kills processes on tcp port 80 using signal SIGTERM 

и начать снова.

Сокеты TCP обычно не могут использоваться многократно (несколько минут), если только они не установили опцию SO_REUSEADDRsetsockopt), прежде чем они были связаны.

(Этот вариант несколько снижает надежность, но должно быть достаточно безопасным для использования в среде тестирования.)

+0

Я попытался убить процесс, который связывает порт, но он не работает. Я все еще должен ждать несколько минут, чтобы повторно использовать порт. – Razin

 Смежные вопросы

  • Нет связанных вопросов^_^