Создать дескриптор сокета
- Прототип
-
#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()
|