Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Сетевые сокеты

.pdf
Скачиваний:
19
Добавлен:
22.03.2016
Размер:
121.77 Кб
Скачать

Ожидание приема соединений

#include <sys/socket.h>

int listen(int sockfd, int backlog);

Возвращает 0 в случае успеха, –1 в случае ошибки

backlog - максимальное количество ожидающих обработки запросов

Прием соединений

#include <sys/socket.h>

int accept(int sockfd, struct sockaddr *restrict addr, socklen_t *restrict len);

Возвращает дескриптор нового сокета в случае успеха, –1 в случае ошибки

Вызов является блокирующим

int accept()

Новый сокет - сокет соединенный с клиентом

Сокет sockfd остается свободным и готовым к приему новых соединений

addr, len - буфер и его размер куда будет положен адрес клиента

Параметры сокетов

#include <sys/socket.h>

int setsockopt(int sockfd, int level, int option, const void *val, socklen_t len);

Возвращает 0 в случае успеха, –1 в случае ошибки

int level

1.Универсальные параметры, которые присущи всем типам сокетов.

2.Параметры, которые поддерживаются на уровне сокета, но зависят от используемого протокола.

3.Параметры, уникальные для каждого отдельно взятого протокола.

Например:

SOL_SOCKET, IPPROTO_TCP, IPPROTO_IP

SOL_SOCKET

Пример:

int reuse = 1;

setsockopt( fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(int) )

Разрешить повторное использование порта

Пример

Создание простого сервера simple_server.c

В качестве клиента воспользуемся программой telnet или netcat

Пример

Сервер слушающий все сетевые интерфейсы

simple_server_all.c

Передача данных

Функции read и write возможно использовать в случае если было установлено соединение

Достигается совместимость с программами для работы с файлами

Дополнительные функции

#include <sys/socket.h>

ssize_t send(int sockfd, const void *buf, size_t nbytes, int flags);

Возвращает количество отправленных байтов в случае успеха, –1 в случае ошибки