참고링크 [Bottom] [Top]

AcceptEx 함수 사용하기 [Bottom] [Top]

   1 #include <winsock2.h>
   2 #include <mswsock.h>
   3 
   4 #pragma comment( lib, "Ws2_32" )

   1 LPFN_ACCEPTEX lpfnAcceptEx = NULL;
   2 
   3 GUID GuidAcceptEx = WSAID_ACCEPTEX;
   4 
   5 WSAIoctl(
   6         ListenSocket,
   7         SIO_GET_EXTENSION_FUNCTION_POINTER,
   8         &GuidAcceptEx,
   9         sizeof( GuidAcceptEx ),
  10         &lpfnAcceptEx,
  11         sizeof( lpfnAcceptEx ),
  12         &dwBytes,
  13         NULL,
  14         NULL );

   1 lpfnAcceptEx(
   2         ListenSocket,
   3         AcceptSocket,
   4         lpOutputBuf,
   5         outBufLen - ( ( sizeof( sockaddr_in ) + 16 ) * 2 ),
   6         sizeof( sockaddr_in ) + 16,
   7         sizeof( sockaddr_in ) + 16,
   8         &dwBytes,
   9         &olOverlap );

SO_UPDATE_ACCEPT_CONTEXT 옵션 [Bottom] [Top]

AcceptEx() 함수를 통하여 Overlapped I/O 로 연결된 소켓 (Accept Socket) 은 GetAcceptExSockaddrs() 함수만 사용하여 주소 정보를 얻을 수 있다. 하지만 setsockopt() 함수의 SO_UPDATE_ACCEPT_CONTEXT 옵션을 사용할 경우, getsockname() 와 getpeername() 함수를 사용하여 주소 정보를 얻을 수 있다.

   1 err = setsockopt(
   2         sAcceptSocket,
   3         SOL_SOCKET,
   4         SO_UPDATE_ACCEPT_CONTEXT,
   5         (char *)&sListenSocket,
   6         sizeof( sListenSocket ) );

Winsock2 확장 함수/AcceptEx 함수 (last edited 2007-06-02 11:10:41 by viper)