Книга: Основы программирования в Linux
Создание сокета
Создание сокета
Системный вызов socket создает сокет и возвращает дескриптор, который может применяться для доступа к сокету:
#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
Созданный сокет — это одна конечная точка линии передачи. Параметр domain
задает семейство адресов, параметр type
определяет тип используемого с этим сокетом обмена данными, a protocol
— применяемый протокол.
В табл. 15.1 приведены имена доменов.
Таблица 15.1
Домен | Описание |
---|---|
AF_UNIX |
Внутренние для UNIX (сокеты файловой системы) |
AF_INET |
Интернет-протоколы ARPA (Advanced Research Projects Agency, управление перспективных исследований и разработок) (сокеты сети UNIX) |
AF_ISO |
Протоколы стандарта ISO (International Standards Organization, Международная организация по стандартизации) |
AF_NS |
Протоколы сетевых систем Xerox |
AF_IPX |
Novell-протокол IPX |
AF_APPLETALK |
Appletalk DDS (Appletalk Digital Data Service) |
К наиболее популярным доменам сокетов относятся AF_UNIX
, применяемый для локальных сокетов, реализуемых средствами файловых систем UNIX и Linux, и AF_INET
, используемый для сетевых сокетов UNIX. Сокеты домена AF_INET
могут применяться программами, взаимодействующими в сетях на базе протоколов TCP/IP, включая Интернет. Интерфейс ОС Windows Winsock также предоставляет доступ к этому домену сокетов.
Параметр сокета type задает характеристики обмена данными, применяемые для нового сокета. Возможными значениями могут быть SOCK_STREAM
и SOCK_DGRAM
.
? SOCK_STREAM
— это упорядоченный, надежный, основанный на соединении, двунаправленный поток байтов. В случае домена сокетов AF_INET
этот тип обмена данными по умолчанию обеспечивается TCP-соединением, которое устанавливается между двумя конечными точками потоковых сокетов при подключении. Данные могут передаваться в двух направлениях по линии связи сокетов. Протоколы TCP включают в себя средства фрагментации и последующей повторной сборки сообщений больших объемов и повторной передачи любых их частей, которые могли быть потеряны в сети.
? SOCK_DGRAM
— дейтаграммный сервис. Вы можете использовать такой сокет для отправки сообщений с фиксированным (обычно небольшим) максимальным объемом, но при этом нет гарантии, что сообщение будет доставлено или что сообщения не будут переупорядочены в сети. В случае сокетов домена AF_INET
этот тип передачи данных обеспечивается дейтаграммами UDP (User Datagram Protocol, пользовательский протокол дейтаграмм).
Протокол, применяемый для обмена данными, обычно определяется типом сокета и доменом. Как правило, выбора нет. Параметр protocol
применяется в тех случаях, когда выбор все же предоставляется. Задание 0 позволяет выбрать стандартный протокол, используемый во всех примерах данной главы.
Системный вызов socket
возвращает дескриптор, во многом похожий на низкоуровневый файловый дескриптор. Когда сокет подключен к концевой точке другого сокета, для отправки и получения данных с помощью сокетов можно применять системные вызовы read
и write
с дескриптором сокета. Системный вызов close
используется для удаления сокетного соединения.