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

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

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

Флаги

MSG_DONTROUTE

Не отправлять пакет за пределы локальной

 

сети

 

 

MSG_DONTWAIT

Разрешить неблокирующий режим выполнения

 

операции (эквивалент флага O_NONBLOCK)

 

 

MSG_EOR

Обозначает конец записи, если

 

поддерживается протоколом

 

 

MSG_OOB

Обозначает передачу экстренных данных,

 

если поддерживается протоколом

 

 

sendto

#include <sys/socket.h>

ssize_t sendto(int sockfd, const void *buf, size_t nbytes, int flags, const struct sockaddr *destaddr, socklen_t destlen);

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

Получение данных

#include <sys/socket.h>

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

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

Флаги

MSG_OOB

Принять экстренные данные, если

 

поддерживается протоколом

 

 

MSG_PEEK

Вернуть содержимое пакета, но не удалять его

 

из приемной очереди

 

 

MSG_TRUNC

Запросить, чтобы был возвращен реальный

 

размер пакета, даже если он был обрезан

 

 

MSG_WAITALL

Ждать, пока не будут получены все данные

 

(только для SOCK_STREAM)

 

 

Получение данных (SOCK_DGRAM)

#include <sys/socket.h>

ssize_t recvfrom(int sockfd, void *restrict buf, size_t len, int flags, struct sockaddr *restrict addr, socklen_t *restrict addrlen);

Позволяет сохранить данные о сокете отправителе.

Пример

Простой клиент-серверный протокол общения на основе datagram

server_dg.c

Пример

Простой клиент-серверный протокол общения на основе stream sockets

server_stream.c

Сторона клиента

Для сокета клиент так же должен быть установлен адрес

Обычно назначение адреса клиента переносится под ответственность операционной системы

Установка соединения

#include <sys/socket.h>

int connect(int sockfd, const struct sockaddr *addr, socklen_t len);

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

Адрес

Адрес сервера, к которому необходимо подключиться

Ошибки:

Сервер недоступен

Очередь сервера переполнена