Сетевые технологии. Учебное пособие. Баканов В.М. - 52 стр.

UptoLike

Составители: 

52
Вместо того, чтобы ожидать соединения, вызывая в цикле функцию
accept
,
приложение может единожды вызвать функцию
WSAAsyncSelect
, указав ей,
что при получении запроса на установку соединения оконная функция при-
ложения должна получить сообщение
#define WSA_ACCEPT (WM_USER+1)
// При попытке установки соединения главное окно
// приложения получит сообщение WSA_ACCEPT
rc = WSAAsyncSelect(srv_socket, hWnd,
WSA_ACCEPT, FD_ACCEPT);
if (rc > 0)
{
closesocket(srv_socket);
MessageBox(NULL, "Ошибка функции WSAAsyncSelect",
"Error", MB_OK);
return;
}
В данном случае ожидание выполняется для сокета
srv_socket
. Последний
параметр функции имеет параметр
FD_ACCEPT
, это означает, что при попыт-
ке создания канала связи функция окна с дескриптором
hWnd
получит сооб-
щение
WSA_ACCEPT
, определенное в приложении.
Обработчик этого сообщения может выглядеть, например, следующим об-
разом
void
WndProc_OnWSAAccept(HWND hWnd,
UINT msg,
WPARAM wParam,
LPARAM lParam);
{
int rc;
// при ошибке отменяется поступление извещений
// в главное окно приложения
if (WSAGETSELECTERROR(lParam) != 0)
{
MessageBox(NULL, "Ошибка функции Accept", "Error", MB_OK);
WSAAsyncSelect(srv_socket, hWnd, 0, 0);
return;
  Вместо того, чтобы ожидать соединения, вызывая в цикле функцию accept,
приложение может единожды вызвать функцию WSAAsyncSelect, указав ей,
что при получении запроса на установку соединения оконная функция при-
ложения должна получить сообщение

#define WSA_ACCEPT (WM_USER+1)

// При попытке установки соединения главное окно
// приложения получит сообщение WSA_ACCEPT

  rc = WSAAsyncSelect(srv_socket, hWnd,
                   WSA_ACCEPT, FD_ACCEPT);

if (rc > 0)
{
    closesocket(srv_socket);
    MessageBox(NULL, "Ошибка функции WSAAsyncSelect",
                       "Error", MB_OK);
    return;
}

  В данном случае ожидание выполняется для сокета srv_socket. Последний
параметр функции имеет параметр FD_ACCEPT, это означает, что при попыт-
ке создания канала связи функция окна с дескриптором hWnd получит сооб-
щение WSA_ACCEPT, определенное в приложении.
  Обработчик этого сообщения может выглядеть, например, следующим об-
разом

void
WndProc_OnWSAAccept(HWND hWnd,
                    UINT msg,
                    WPARAM wParam,
                    LPARAM lParam);
{
  int rc;

  // при ошибке отменяется поступление извещений
  // в главное окно приложения
  if (WSAGETSELECTERROR(lParam) != 0)
  {
      MessageBox(NULL, "Ошибка функции Accept", "Error", MB_OK);
      WSAAsyncSelect(srv_socket, hWnd, 0, 0);
      return;

                                 52