Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SRS_IPOVS_OS.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

13.2. Системные вызовы работы с сокетами в ос unix Структура адреса сокета

Существует два семейства адресов сокетов:

  • семейство адресов UNIX (домен UNIX), используется для межпроцессного взаимодействия на одном компьютере;

  • семейство адресов Internet (домен Internet) используется для межпроцессного взаимодействия в сети.

Структура адреса сокета домена Internet:

struct sockaddr in{

u_char sin_len; /* длина структуры */

u_char sin_family; /* константа AF_INET */

u_short sin_port; /* номер порта */

struct in_addr sin_addr; /* IP-адрес */

char sin_zero[8]; /* резерв */

}

Получить дескриптор сокета (создать сокет)

Сокет создается при помощи системного вызова socket.

#include <sys/types.h>

#include <sys/socket.h>

int socket(int domain,int type,int protocol);

Здесь domain – (IF_INET для домена Интернет, AF_UNIX Для домена UNIX), type – тип обслуживания (SOCK_STREAM для TCP, SOCK_DGRAM для UDP), protocol – номер применяемого протокола или 0. Нулевое значение параметра указывает, что должен применяться протокол, предусмотренный по умолчанию для данного семейства адресов и типа обслуживания. Функция socket в случае успешного выполнения возвращает дескриптор сокета, в случае ошибки возвращает -1.

Пример: sd = socket(AF_INET,SOCK_STREAM,0);

Указать адрес локальной оконечной точки

Функция bind привязывает локальный сокет к адресу, или указывает адрес локальной оконечной точки.

#include <sys/types.h>

#include <sys/socket.h>

int bind(int sockfd, struct sockaddr *lockaddr, int addrlen);

Здесь sockfd – дескриптор сокета, созданный в результате вызова функции socket; lockaddr – указатель на структуру адреса сокета, в которой указаны IP-адрес и номер порта; addrlen – размер структуры адреса сокета. Функция bind возвращает 0 в случае успешного выполнения и -1 при ошибке.

Функция "привязывает" сокет к локальному IP-адресу и локальному порту.

Перевод сокета в пассивный режим

Перевод сокета в пассивный режим выполняет функция listen. Она вызывается процессом-сервером. Переводит сокет в прослушивающий режим и устанавливает очередь для запросов на установление соединения.

#include <sys/socket.h>

int listen(int sd,int backlog);

Здесь sd – дескриптор сокета; backlog – максимальная длина очереди для запросов на установление соединения. Функция listen возвращает 0 в случае успешного выполнения и -1 при ошибке.

Принять соединение с сокетом

Функция accept используется процессом-сервером.

#include <sys/types.h>

#include <sys/socket.h>

int accept(int sd, struct sockaddr *addr,int *addrlen);

Здесь sd – дескриптор сокета; addr – указатель на структуру, в которую функция accept записывает IP-адрес и номер порта протокола удаленного компьютера; addrlen – указатель на целое число, в которое перед вызовом функции записывается размер структуры *addr, а после возврата из функции содержится число байтов, записанных фуекцией в эту структуру. Функция accept возвращает неотрицательный дескриптор сокета в случае успешного выполнения и -1 при ошибке.

Функция accept 1) извлекает из очереди сокета с дескрипторм sd следующий запрос на установление соединения; 2) создает новый сокет для нового запроса и возвращает дескриптор этого сокета. Этот сокет используется только для нового соединения. Старый сокет служит для приема новых запросов на соединения. Старый сокет sd называют прослушивающим, новый сокет – присоединенным.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]