После того как вы подготовили структуру 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;
}
37 удаление и параметры сокета
Сокет - устройство двунаправленной связи, которое может использоваться для взаимодействия с другим процессом на одной и той же машине или с процессом, запущенным на других машинах. Программы Интернета такие как Telnet, rlogin, FTP, talk , и World Wide Web используют сокеты.
Например, можно получить WWW-страницу от сервера Web, используя программу Telnet , так как они обе используют сокеты для сетевого взаимодействия. Для открытия подключения с сервером WWW на www.codesourcery.com, необходимо использовать telnet www.codesourcery.com 80. Константа 80 определяет подключение к Web серверу. Если после того, как подключение будет установлено, передать команду get /, то Web серверу через сокеты будет отправлено сообщение, на которое он ответит, передав исходный текст домашней HTML страницы и затем закроет подключение.
Пример:
% telnet www.codesourcery.com 80 Trying 206.168.99.1... Connected to merlin.codesourcery.com (206.168.99.1). Escape character is '^]'. GET / <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> ...