Привязка адреса к сокету

После того как вы подготовили структуру SOCKADDR, записав в нее параметры сокета (в частности, адрес), следует выполнить привязку адреса к сокету при помощи функции bind:

int bind (

SOCKET sock, const struct sockaddr FAR * addr, int namelen);

Параметр sock должен содержать дескриптор сокета, созданного функцией socket.

В поле addr следует записать указатель на подготовленную структуру SOCKADDR, а в поле namelen - размер этой структуры.

В случае ошибки функция bind возвращает значение SOCKET_ERROR. Дальнейший анализ причин ошибки следует выполнять при помощи функции WSAGetLastError. Возможные коды ошибок перечислены ниже:

Код ошибки Описание
WSANOTINITIALISED Перед использованием функции необходимо вызвать функцию WSAStartup
WSAENETDOWN Сбой в сети
WSAEADDRINUSE Указанный адрес уже используется
WSAEFAULT Значение параметра namelen меньше размера структуры sockaddr
WSAEINPROGRESS Выполняется блокирующая функция интерфейса Windows Sockets
WSAEAFNOSUPPORT Этот протокол не может работать с указанным семейством адресов
WSAEINVAL Сокет уже привязан к адресу
WSAENOBUFS Установлено слишком много соединений
WSAENOTSOCK Указанный в параметре дескриптор не является сокетом

Пример вызова функции bind показан ниже:

if(bind (srv_socket, (LPSOCKADDR)&srv_address,

sizeof(srv_address)) == SOCKET_ERROR)

{

closesocket (srv_socket);

MessageBox(NULL, "bind Error", "Error", MB_OK);

return;

}

Создание канала связи

Если вы собираетесь передавать датаграммные сообщения при помощи протокола негарантированной доставки UDP, канал связи не нужен. Сразу после создания сокетов и их инициализации можно приступать к передаче данных. Но для передачи данных с использованием протокола TCP необходимо создать канал связи.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: