Книга: Основы программирования в Linux
Запросы соединений
Запросы соединений
Клиентские программы подключаются к серверам, устанавливая соединение между неименованным сокетом и сокетом сервера, ждущим подключений. Делают они это с помощью вызова connect
:
#include <sys/socket.h>
int connect(int socket, const struct sockaddr *address, size_t address_len);
Сокет, заданный в параметре socket
, соединяется с сокетом сервера, заданным в параметре address
, длина которого равна address_len
. Сокет должен задаваться корректным файловым дескриптором, полученным из системного вызова socket
.
Если функция connect
завершается успешно, она возвращает 0, в случае ошибки вернется -1. Возможные ошибки на этот раз включают значения, перечисленные в табл. 15.3.
Таблица 15.3
Значение errno |
Описание |
---|---|
EBADF |
В параметре socket задан неверный файловый дескриптор |
EALREADY |
Для этого сокета соединение уже обрабатывается |
ETIMEDOUT |
Допустимое время ожидания соединения превышено |
ECONNREFUSED |
Запрос на соединение отвергнут сервером |
Если соединение не может быть установлено немедленно, вызов connect
будет заблокирован на неопределенный период ожидания. Когда допустимое время ожидания будет превышено, соединение разорвется и вызов connect
завершится аварийно. Однако, если вызов прерван сигналом, который обрабатывается, connect завершится аварийно (со значением errno, равным EINTR
), но попытка соединения не будет прервана — соединение будет установлено асинхронно и программа должна будет позже проверить, успешно ли оно установлено.
Как и в случае вызова accept
, возможность блокировки в вызове connect
можно исключить установкой в файловом дескрипторе флага O_NONBLOCK
. В этом случае, если соединение не может быть установлено немедленно, вызов connect
завершится аварийно с переменной errno
, равной EINPROGRESS
, и соединение будет выполнено асинхронно.
Хотя асинхронные соединения трудно обрабатывать, вы можете применить вызов select
к файловому дескриптору сокета, чтобы убедиться в том, что сокет готов к записи. Мы обсудим вызов select
чуть позже в этой главе.
- Улучшенный протокол локальных соединений (XNET)
- Запросы на обновление
- Запросы, подсчитывающие строки
- Урок 7.5. Запросы
- Использование PPP-соединений
- 6.3. Изображение резьбовых соединений с крепежными деталями
- Туннелирование X-соединений через SSH
- Короткие поисковые запросы
- 7.6.1 Эхо-запросы и эхо-ответы
- Запросы
- Запросы, поступающие от начальства
- Коррелированные подзапросы