Привязка адреса к сокету
После того как вы подготовили структуру 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; }