| Предыдущий | Следующий |
| EBADRQC | EDEADLOCK |
EISCONN
Связь с удалённым узлом уже существует
EISCONN означает, что сокет уже подключён. Второй вызов connect() не создаёт ещё одно соединение, а операция отправки с указанием адреса назначения также может быть недопустима или игнорироваться, если сокет уже связан с удалённым узлом.
Это не результат проверки доступности. Значимым фактом является состояние локального сокета. Проверка DNS, маршрутов или удалённой службы не объяснит, почему вызывающий код попытался связать с новым узлом объект, у которого связь уже есть.
Проверки состояния, предотвращающие ошибку
- Отслеживайте владельца и состояние подключения сокета в одном месте; не позволяйте двум асинхронным путям завершения независимо запускать установление соединения.
- Для дейтаграммных сокетов выберите один режим: постоянный подключённый узел или адрес назначения в каждом сообщении, и используйте его последовательно.
- Запишите предыдущий успешный или незавершённый connect, текущий адрес узла и API, создавший повторный запрос.
Отличие от незавершённого и отсутствующего состояния
EALREADY означает, что предыдущая операция ещё не завершена. ENOTCONN означает отсутствие требуемого узла. EISCONN сообщает, что соединение уже существует и вызывающий код должен использовать его либо намеренно заменить.
Ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.
