Сокет создается с помощью функции 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;
}
Для освобождения ресурсов приложение должно закрывать сокеты, которые ему больше не нужны, вызывая функцию closesocket :
int closesocket (SOCKET sock);
Ниже мы перечислили коды ошибок для этой функции :
Код ошибки
Описание
WSANOTINITIALISED
Перед использованием функции closesocket необходимо вызвать функцию WSAStartup
WSAENETDOWN
Сбой в сети
WSAENOTSOCK
Указанный в параметре дескриптор не является сокетом
WSAEINPROGRESS
Выполняется блокирующая функция интерфейсаWindows Sockets
WSAEINTR
Работа функции была отменена при помощи функции WSACancelBlockingCall