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

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

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

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

Сокеты

Цель - организация как внутримашинного так и межмашинного способа взаимодействия между процессами

Сокеты поддерживают большое количество сетевых протоколов

Наиболее популярным протоколом является протокол TCP/IP

Дескрипторы сокетов

Дескриптор сокета - аналог файлового дескриптора

Возможность использования некоторых функций работы с файлами (read, write, ...)

Создание дескриптора

#include <sys/socket.h>

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

Возвращает дескриптор файла (сокета) в случае успеха, –1 в случае ошибки

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

AF_INET

Домен Интернета IPv4

 

 

AF_INET6

Домен Интернета IPv6

 

 

AF_UNIX

Домен UNIX

 

 

AF_UNSPEC

Неопределенный домен

 

 

AF_ (от address family – семейство адресов)

 

AF_UNSPEC обозначает неопределенный домен, который может представлять любой домен

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

SOCK_DGRAM Не ориентированы на создание логического соединения, сообщения фиксированной длины, доставка сообщений не гарантируется

SOCK_RAW

Интерфейс дейтаграмм к протоколу IP

SOCK_STREAM Ориентированы на создание логического соединения, упорядоченность передачи данных, гарантируется доставка сообщений, двунаправленный поток байтов

SOCK_SEQPACKET Ориентированы на создание логического соединения, упорядоченность передачи данных, сообщения фиксированной длины, гарантируется доставка сообщений

Протоколы без установки логического соединения

SOCK_DGRAM

Дейтаграмма - самостоятельное сообщение

Каждое сообщение имеет указанного адресата

Доставка не гарантируется

Протоколы с установкой логического соединения

SOCK_STREAM, SOCK_SEQPACKET

Необходима установка соединения Сообщения не содержат адресата

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

Выбор типа протокола. По умолчанию устанавливается в 0 (система сама выбирает протокол на основе типа сокета)

AF_INET + SOCK_STREAM = TCP AF_INET + SOCK_DGRAM = UDP

Сравнение с ФД

socket() похож на open()

Поддерживаются: read, write, close

Не поддерживаются: lseek, fsync, fdatasinc