Предыдущая | Оглавление | Следующая |
Создать дескриптор сокета
#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"); } |
Предыдущая | Оглавление | Следующая |