Проверте, чему у Вас равна переменная iPort. Возможно, она равна нулю или такой порт уже открыт. Более подробную информацию ою ошибке можно узнать с помощью WSAGetLastError.
Здравствуйте, Burd, Вы писали:
B>Здравствуйте, t, Вы писали:
t>>Пишу что-то вроде эхо-сервера (Windows, VS6.0, Console). Проблема: функция bind() возвращает -1:
t>>... t>> memset(&m_sockaddr_in, 0, sizeof(m_sockaddr_in));
t>> m_sockaddr_in.sin_family = AF_INET; t>> m_sockaddr_in.sin_port = htons(iPort); t>> m_sockaddr_in.sin_addr.s_addr = INADDR_ANY; t>> m_hSocket = socket(AF_INET, SOCK_STREAM, 0);//IPPROTO_TCP); t>> int iRes; t>> iRes = bind(m_hSocket, (struct sockaddr*)&m_sockaddr_in, sizeof(m_sockaddr_in)); t>>...
B>Укажи нормальный адрес, на котором этот порт будешь занимать. Адрес локального компа
Спасибо за совет. Но это уже пробовала — не помогает (пыталась указать в т.ч. и адрес локального хоста).
Здравствуйте, TarasCo, Вы писали:
TC>Здравствуйте, t, Вы писали:
t>>Пишу что-то вроде эхо-сервера (Windows, VS6.0, Console). Проблема: функция bind() возвращает -1:
t>>... t>> memset(&m_sockaddr_in, 0, sizeof(m_sockaddr_in));
t>> m_sockaddr_in.sin_family = AF_INET; t>> m_sockaddr_in.sin_port = htons(iPort); t>> m_sockaddr_in.sin_addr.s_addr = INADDR_ANY; t>> m_hSocket = socket(AF_INET, SOCK_STREAM, 0);//IPPROTO_TCP); t>> int iRes; t>> iRes = bind(m_hSocket, (struct sockaddr*)&m_sockaddr_in, sizeof(m_sockaddr_in)); t>>...
TC>Проверте, чему у Вас равна переменная iPort. Возможно, она равна нулю или такой порт уже открыт. Более подробную информацию ою ошибке можно узнать с помощью WSAGetLastError.
Здравствуйте, спасибо большое за совет. Но все-таки что-то у меня не работает: переменная iPort задана верная, а в результате WSAGetLastError получаю 10093. Что с этим делать?
Что я и говорил — не проинициализированная библиотека сокетов:
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
return;
}
/* Confirm that the WinSock DLL supports 2.2.*/
/* Note that if the DLL supports versions greater */
/* than 2.2 in addition to 2.2, it will still return */
/* 2.2 in wVersion since that is the version we */
/* requested. */
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return;
}
/* The WinSock DLL is acceptable. Proceed. */
Любая задача имеет решение, даже когда решения не существует
Здравствуйте, Burd, Вы писали:
B>Что я и говорил — не проинициализированная библиотека сокетов:
B>
B>WORD wVersionRequested;
B>WSADATA wsaData;
B>int err;
B>wVersionRequested = MAKEWORD( 2, 2 );
B>err = WSAStartup( wVersionRequested, &wsaData );
B>if ( err != 0 ) {
B> /* Tell the user that we could not find a usable */
B> /* WinSock DLL. */
B> return;
B>}
B>/* Confirm that the WinSock DLL supports 2.2.*/
B>/* Note that if the DLL supports versions greater */
B>/* than 2.2 in addition to 2.2, it will still return */
B>/* 2.2 in wVersion since that is the version we */
B>/* requested. */
B>if ( LOBYTE( wsaData.wVersion ) != 2 ||
B> HIBYTE( wsaData.wVersion ) != 2 ) {
B> /* Tell the user that we could not find a usable */
B> /* WinSock DLL. */
B> WSACleanup( );
B> return;
B>}
B>/* The WinSock DLL is acceptable. Proceed. */
B>
Спасибо!!! Все работает. Но можно ли узнать, что же такое волшебное делает строка
wVersionRequested = MAKEWORD( 2, 2 ); ? (Чтение MSDN не помогло). Не понятно, почему при наличии Вашего кода pr. работает...
Здравствуйте, t, Вы писали:
t>Спасибо!!! Все работает. Но можно ли узнать, что же такое волшебное делает строка t>wVersionRequested = MAKEWORD( 2, 2 ); ? (Чтение MSDN не помогло). Не понятно, почему при наличии Вашего кода pr. работает...
В Windows (в отличии от UNIX) надо инициализировать библиотеку WinSock перед ее использованием. Так что всё "волшебство" — в вызове WSAStartup. А MAKEWORD(2,2) всего лишь формирует номер версии WinSock, которую хочет использовать программа. В данном случае это версия 2.2 (хотя для вызовов socket и bind достаточно и 1.1).