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