Это архив сайта coldflame.by.ru, он не обновлялся с 2007 года. Мой современный сайт тут: http://leonid.shevtsov.me.
Домой! Обо мне Специально для РИ-06-1 Разнообразное... барахло, короче :) Программы и прочее Статьи и переводы Блог SmartDaemon
Предыдущая ОглавлениеСледующая

socket()

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

Прототип

#include <sys/types.h>
#include <sys/socket.h>

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

Описание

Возвращает новые дескриптор сокета. Первый вызов в процессе работы с сокетом, после него можно вызывать listen(), bind(), accept(), и кучу других функций.

domain

domain описывает семейство сокета. Есть много семейств, но в этом руководстве и для интернет-сокетов, оно равно PF_INET И соответственно, при использовании struct sockaddr_in для указания адреса, член sin_family должен быть равен AF_INET.

(Другое интересное семейство - PF_INET6, семейство протоколов IPv6. Если ты не знаешь, что это такое, можешь не беспокоиться... пока что.)

type

Параметр type тоже может принимать разные значения, но наверняка ты будешь использовать SOCK_STREAM для надежных TCP-сокетов (send(), recv()) или SOCK_DGRAM для ненадежных и быстрых UDP-сокетов (sendto(), recvfrom().)

(Еще один интересный тип сокетов - SOCK_RAW, с помощью которого можно собирать пакеты вручную. Это довольно здорово.)

protocol

Параметр protocol указывает протокол, используемый для сокета. Например, SOCK_STREAM использует TCP. При использовании SOCK_STREAM и SOCK_DGRAM можно передать ноль вместо протокола, и система сама выберет нужный. Или можно использовать функцию getprotobyname() для определения нужного протокола.

Возвращаемое значение

Новосозданный дескриптор сокета, или -1 при ошибке, сохраняя ее номер в errno.

Пример

int s1, s2;

s1 = socket(PF_INET, SOCK_STREAM, 0);
s2 = socket(PF_INET, SOCK_DGRAM, 0);

if (s1 == -1) {
    perror("socket");
}

См. также

accept(), bind(), listen()


Предыдущая ОглавлениеСледующая