Суть ошибки
Сообщение «Обычно разрешается только одно использование адреса сокета (протокол/сетевой адрес/порт)» соответствует коду 10048, WSAEADDRINUSE. Оно появляется не при подключении к чужому серверу, а при запуске собственной программы, которая хочет занять порт, уже занятый чем-то другим.
Типичные носители такой ошибки — веб-серверы разработчиков, игровые серверы, базы данных, приложения для передачи файлов. Программа запускается, пытается открыть порт для приёма соединений и получает отказ.
Часто пользователь видит ошибку после того, как программу закрыли и тут же запустили снова: старый процесс мог ещё не завершиться.
Кто занимает порт
Самая частая причина — вторая копия той же программы, о которой вы забыли, либо процесс, который не завершился корректно и продолжает работать в фоне. Второе — другая программа, которая по умолчанию использует тот же порт: например, несколько веб-серверов или средств разработки.
Третья — порт зарезервирован системой. В Windows виртуализация и подсистемы вроде Hyper-V, WSL или Docker могут резервировать диапазоны портов, и программа не сможет их занять, хотя ни один процесс их не показывает.
Четвёртая причина — краткая задержка после закрытия соединения: порт находится в промежуточном состоянии ожидания и освобождается через некоторое время.
Как найти виновника
В командной строке выполните netstat с параметрами вывода адресов и идентификаторов процессов, затем отфильтруйте по номеру нужного порта. В строке будет указан идентификатор процесса, по которому его можно найти в диспетчере задач на вкладке сведений.
Если в списке порта нет, но программа всё равно не запускается, проверьте зарезервированные диапазоны командой netsh int ipv4 show excludedportrange protocol=tcp. Если ваш порт попадает в диапазон, его занимает система.
Убедитесь, что программа не запущена дважды, в том числе из службы и вручную. Проверьте автозагрузку и запланированные задания.
Способы устранить
Завершите лишний процесс через диспетчер задач или остановите службу, которая его использует. Если обе программы нужны, поменяйте порт одной из них в её настройках.
При попадании в зарезервированный диапазон самый простой путь — выбрать другой порт вне диапазона. Диапазоны можно менять административными командами, но это затрагивает виртуализацию, поэтому выполняйте изменение осознанно и с перезагрузкой.
Если причина в состоянии ожидания после закрытия, подождите минуту либо включите в своей программе опцию повторного использования адреса, если вы разрабатываете её сами.
Профилактика повторов
Если ошибка возвращается при каждом перезапуске вашей программы, проверьте, корректно ли она освобождает порт при завершении. Некоторые программы оставляют фоновый процесс, и следующий запуск упирается в него. Добавьте в скрипты запуска проверку и остановку предыдущего экземпляра.
Для служб, которым нужно быстро перезапускаться, в коде обычно включают параметр повторного использования адреса. Для обычного пользователя проще назначить программам разные фиксированные порты и записать их в заметках, чтобы избежать конфликтов между несколькими серверами на одном компьютере.
Если вы запускаете несколько экземпляров одной и той же программы намеренно, каждому нужен собственный порт. Многие серверные программы принимают порт параметром запуска или в файле настроек. Проверьте, что во всех экземплярах он различается, и запишите распределение портов, чтобы не путаться при добавлении новых служб.
Если порт занят «невидимо»
Иногда порт не показывается в netstat, но занят. Это возможно при резервировании, при использовании другим пользователем или сеансом либо при перехвате драйвером. Проверьте, нет ли в системе программ, встраивающихся в сетевой стек.
Перезагрузка компьютера освобождает порты, занятые зависшими процессами, и является рабочим способом, если найти виновника не получается.
На удалённых или общих серверах порт мог занять другой пользователь. Спросите администратора, какие порты закреплены за вашим сервисом.
Если порт нужен только на время, например для проверки, выберите значение из верхнего диапазона динамических портов и не используйте номера, известные как стандартные для других служб. Это снижает вероятность повторного конфликта.