참고링크 [Bottom] [Top]
AcceptEx fucntion (MSDN Library) - http://msdn2.microsoft.com/en-us/library/ms737524.aspx
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 ) );
