Как подключиться к порту сразу, избегая socket_bind (): невозможно привязать адрес?
При запуске кода, который предполагается читать с порта TCP / IP, я часто получаю следующее сообщение (в зависимости от того, какой язык использовался):
socket_bind(): unable to bind address
Я знаю, что это происходит, когда какой-то другой процесс прослушивает этот порт / привязан к этому порту (я не знаю точной фразы для описания), поэтому мой код не может прослушивать этот порт. Тем не менее, это мой код, который я просто остановил (CTRL-C), который блокирует этот порт! Кажется, что есть некоторый тайм-аут, и после ожидания некоторого времени (около 30 секунд) я могу запустить свой код, чтобы прослушивать этот конкретный порт без проблем.
- Использование tcpdump для извлечения содержимого NFS RPC
- Перенаправить stdin и stdout в порты
- Что такое inode для сокета?
- Linux: отслеживайте мое использование интернет-страниц за страницей
- Почему я не вижу капель с потоками TCP в linux
Я бы хотел знать:
- Почему порт все еще заблокирован, хотя я остановил код?
- Как заставить систему выпустить этот порт, чтобы я мог перезапустить свой код и начать прослушивание этого порта?
- Мониторинг портов на маршрутизаторе NAT на основе GNU / Linux
- Есть ли способ настроить TCP на потерю пакетов и повторную передачу?
- Как изменились эти настройки по умолчанию для Linux TCP?
- nc: bind failed: адрес уже используется
- TCP: один ПК может подключаться к другому порту прослушивания, но не наоборот
- tcp6 в выходном netstat
- Какова семантика получения EADDRINUSE, когда не подключен прослушивающий сокет, но соединения открыты
- Производительность сокетов unix vs TCP
One Solution collect form web for “Как подключиться к порту сразу, избегая socket_bind (): невозможно привязать адрес?”
Предполагая, что вы говорите на C / C ++, используйте setsockopt()
и SO_REUSEADDR
. Это позволяет повторно использовать до тех пор, пока нет активного процесса прослушивания этого порта.
Изменить: причина, по которой он все еще используется, заключается в том, что вы не закрыли сокет соответствующим образом. Вы Control-C убили его. Вы можете использовать netstat
чтобы увидеть порты, которые открыты или еще не закрыты.
http://www.beej.us/guide/bgnet/output/html/multipage/setsockoptman.html
https://stackoverflow.com/questions/10071107/rebinding-a-port-to-datagram-socket-on-a-difftent-ip