Архив документации OpenNet.ru /
Раздел "Программирование, языки" /
Индекс
Next: Соединение сокетов.
Up: Сокеты.
Previous: Общие сведения о сокетах.
Contents
Для создания сокета определенного типа в определенном адресном пространстве
используется функция socket():
-
- #include <sys/ types. h>
#include <sys/ socket. h>
int socket(int domain, int type, int protocol);
Если протокол не определен, система сама определяет протокол по умолчанию,
который поддерживает указанный тип сокета. Функция возвращает дескриптор
сокета. Адресное пространство domain обычно принимает значения
AF_UNIX или AF_INET, а тип сокета - SOCK_STREAM
или SOCK_DGRAM. Если сокет не может быть создан, то функция
вернет -1.
Тем не менее, удаленный процесс не может идентифицировать определенный
сокет, пока ему не будет присвоен адрес. Процессы могут поддерживать
связь только через адреса. В пространстве адресов UNIX соединение
обычно определяется одним или двумя именами файлов. В пространстве
адресов Интернета соединение определяется локальным и удаленным адресами
и номерами портов.
Функция bind()
-
- #include <sys/ types. h>
#include <sys/ socket. h>
int bind(int s, const struct sockaddr *name, int namelen);
осуществляет привязку пути к файлу или адреса Интернета к сокету.
Первым аргументом является дескриптор соответствующего сокета, полученный
ранее с помощью socket(). Вторым аргументом является структура,
представляющая собой адрес. Она имеет вид:
-
- struct sockaddr {
ushort_ t sa_ family; /* семейство адресов */
char sa_ data[ 14]; /* 14 байт прямого адреса */
};
Различные варианты сокетов могут использовать различные структуры
для адреса. Например, UNIX-сокет можно описать с помощью структуры:
-
- struct sockaddr_un {
ushort_ t sun_ family; /* AF_ UNIX */
char sun_ path[ 104]; /* путь к файлу */
};
Для сокета в пространстве адресов Интернет используется структура:
-
- struct sockaddr_ in {
uchar_ t sin_ len;
sa_ family_ t sin_ family; /* AF_ INET */
in_ port_ t sin_ port; /* 16-битный порт */
struct in_ addr sin_ addr; /* Указатель на адрес */
uchar_ t sin_ zero[ 8]; /* зарезервировано */
};
2003-12-09
Архив документации на OpenNet.ru