сокеты
Hello comp,
проблема с сокетами на WinAPI. Вот фрагмент программы - инициализация сервера
(вызывается в WM_CREATE):
bool StartSockets()
{
if(WSAStartup(0x0202, &g_wsaData))
return 0;
g_hListenSocket = socket(AF_INET,SOCK_STREAM,0);
if(INVALID_SOCKET == g_hListenSocket)
return 0;
sockaddr_in local_addr;
local_addr.sin_family=AF_INET;
local_addr.sin_port=htons(MY_PORT);
local_addr.sin_addr.s_addr=0;
if (SOCKET_ERROR == bind(g_hListenSocket, (sockaddr *) &local_addr, sizeof(local_addr)))
return 0;
if(SOCKET_ERROR == WSAAsyncSelect(g_hListenSocket, g_hWnd, WM_SERVER_ACCEPT,
FD_ACCEPT | FD_CLOSE))
return 0;
if (SOCKET_ERROR == listen(g_hListenSocket, 0x100))
return 0;
// успешно
return 1;
}
все проходит успешно. Сервер ведет себя так, как будто он работает,
т.е. клиенты могут к нему подконнеститься и т.д. Но почему-то
сообщение WM_SERVER_ACCEPT (WM_USER+3) в WindowProc не приходит! Т.е.
я не могу отловить момент, когда клиент хочет подключиться к серверу,
с тем чтобы подключить его функцией accept.
В чем может быть дело? Может быть, неправильное использование
WSAAsyncSelect? Соответствующий аналог для UDP, а также с использованием MFC
CSocket для TCP прекрасно работает, но мне нужно именно WinAPI.
А какое рельное значение возвращает у тебя функция после вызова?
здесь (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/wsaasyncselect_2.asp)
есть исчерпывающая во многом инфа по этой функции и коды возвращаемых значений
(правда на буржуйском:(()
Номер выпуска : 3974
Возраст листа : 495 (дней)
Количество подписчиков : 523
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/306524
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru