Дальше: 5 Передача данных через Вверх: socket Назад: 3 Установка параметров сокета

4 Установление TCP соединения

При использовании протокола TCP в обмене данными участвуют две стороны. Одна сторона является пассивной, а другая активной. Пассивная сторона открывает некоторый TCP порт и ждет установления соединения. Схема действий пассивного процесса выглядит следующим образом: socket() // Создание сокета bind() // Привязка сокета к номеру порта listen() // Создание очереди соединений while(){ accept() // Прием запроса на установление соединения ... // Обмен данными close() // Закрытие соединения }

Вызов listen включает прием соединений и ограничивает очередь входящих соединений. int listen(int socket, int backlog) Параметр socket содержит идентификатор сокета, который будет принимать соединения. Параметр backlog содержит длину очереди входящих запросов на установление соединения.

После приема запроса на установление соединения сервер создает новый сокет для работы с соединением. Для создания этого сокета используется вызов accept: int accept(int socket, struct sockaddr *address, socklen_t *address_len); Функция accept извлекает первый запрос из очереди ожидающих соединений, создает новый сокет, с тем же протоколом и семейством адресов что и исходный, и возвращает дескриптор файла для этого сокета. Аргумент socket определяет дескриптор сокета который принимает запросы на установление соединений. Аргумент address либо NULL, либо указатель на структуру, в которую будет помещен адрес удаленного сокета после возврата из функции. address_len - указатель на переменную, в которой хранится длина структуры address.

Функция возвращает дескриптор файла сокета для установленного соединения или -1 в случае ошибки. Полученный в результате вызова функции accept дескриптор файла сокета используется, в дальнейшем, для работы с установленым соединением, он не может использоваться для установления других соединений.

Схема действий активной стороны выглядит следующим образом: socket() // Создание сокета connect() // Установление соединения ... // Обмен данными close() // Закрытие соединения

После создания сокета пассивная сторона сразу устанавливает соединение. Для установки соединения используется функция connect: int connect(int socket, const struct sockaddr *address, socklen_t *address_len);

Аргумент socket определяет сокет, который будет использоваться для установки соединения. address указывает на структуру содержащую адрес сервера. address_len содержит длину структуры address.Если сокет еще не был привязан к локальному номеру порта, то функция connect сделат это сама. Возвращаемое значение равно нулю в случае успеха и -1 в противном случае.



Zwon
2002-03-24