Создание сокета
Сокет создается с помощью функции socket , имеющей следующий прототип:
SOCKET socket (int af, int type, int protocol);
Параметр af определяет формат адреса. Для этого параметра вы должны указывать значение AF_INET , что соответствует формату адреса, принятому в Internet.
Параметры type и protocol определяют, сооветственно, тип сокета и протокол, который будет использован для данного сокета.
Можно указывать сокеты следующих двух типов:
Тип сокета | Описание |
SOCK_STREAM | Сокет будет использован для передачи данных через канал связи с использованием протокола TCP |
SOCK_DGRAM | Передача данных будет выполняться без создания каналов связи через датаграммный протокол UDP |
Что же касается параметра protocol, то вы можете указать для него нулевое значение.
В случае успеха функция socket возвращает дескриптор, который нужно использовать для выполнения всех операций над данным сокетом. Если же произошла ошибка, эта функция возвращает значение INVALID_SOCKET . Для анализа причины ошибки вы должны вызвать функцию WSAGetLastError , которая в данном случае может вернуть один из следующих кодов ошибки:
Код ошибки | Описание |
WSANOTINITIALISED | Интерфейс Windows Sockets не был проинициализирован функцией WSAStartup |
WSAENETDOWN | Сбой сетевого программного обеспечения |
WSAEAFNOSUPPORT | Указан неправильный тип адреса |
WSAEINPROGRESS | Выполняется блокирующая функция интерфейса Windows Sockets |
WSAEMFILE | Израсходован весь запас свободных дескрипторов |
WSAENOBUFS | Нет памяти для создания буфера |
WSAEPROTONOSUPPORT | Указан неправильный протокол |
WSAEPROTOTYPE | Указанный протокол несовместим с данным типом сокета |
WSAESOCKTNOSUPPORT | Указанный тип сокета несовместим с данным типом адреса |
Ниже мы привели фрагмент кода, в котором создается сокет для передачи данных с использованием протокола TCP:
srv_socket = socket(AF_INET , SOCK_STREAM, 0); if(srv_socket == INVALID_SOCKET) { MessageBox(NULL, "socket Error", "Error", MB_OK); return; }