сбой привязки, адрес используется: Unable to use a TCP port for both source and destination?

Вы пытались смонтировать том с опцией recovery?

Из man mount:

recovery : Включить попытки автовосстановления, если во время монтирования обнаружен плохой корень дерева. В настоящее время это сканирует список из нескольких предыдущих корней дерева и пытается использовать первый читаемый.

mount -o recovery /dev/sdb /media/raid

3
14.12.2015, 19:21
1 ответ

Однако привязка на 0.0.0.0, похоже, не работает:

root@host:~# nc -l 50020
nc: Адрес уже используется

Это намеренно? Привязка к 0.0.0.0.0 запрещена, если порт уже используется как порт источника? На сокете ничего не прослушивается - я не знаю, почему это не должно работать.

Это совершенно нормально. Специальный IP-адрес 0.0.0.0 означает "любой" адрес интернет-протокола, на который отвечает эта машина, что означает, что она связывается с каждым IP-адресом в системе. Каждое TCP-соединение - это двустороннее соединение с состоянием, и источник/назначение действительно имеет значение только после первоначального рукопожатия. Все, что действительно имеет значение для вас, это номер порта на вашей стороне соединения.

Рассмотрим то, о чем вы спрашиваете, с точки зрения стека IP. Он имеет существующее TCP-соединение на xx.xx.132.72:50020, а вы пытаетесь привязать слушающий сокет к 0.0.0.0:50020. Этот специальный адрес расширяется, чтобы включить xx.xx.132.72:50020 и терпит неудачу как используемый. Если бы он не был неудачным, как бы IP-пакет, входящий на этот адрес, определил, будет ли он доставлен на ваш сокет прослушивания или на уже существующее соединение? Конечно, можно придумать схему, позволяющую нескольким сокетам совместно использовать порт, но тогда вы перепроектируете именно ту проблему, которую порты решают в первую очередь.

Ваш слушающий сокет, вероятно, имеет больше прав на номер порта, поскольку он должен быть доступен в надежном месте, поэтому вам нужно изменить порт другого приложения. Если это не настраивается, просто остановите другое приложение, запустите свой сервер, а затем перезапустите приложение, которое будет использовать другой, доступный, исходный порт для своего исходящего соединения и больше не будет конфликтовать с вашим сервером.

1
27.01.2020, 21:08

Теги

Похожие вопросы