Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

60 lines
1.3 KiB

#ifndef __iptel_gkutil_gkwsock_h
#define __iptel_gkutil_gkwsock_h
#define ASYNC_ACCEPT_BUFFER_SIZE 0x100
struct ASYNC_ACCEPT;
typedef void (*ASYNC_ACCEPT_FUNC)
(PVOID Context,
SOCKET ClientSocket,
SOCKADDR_IN * LocalAddress,
SOCKADDR_IN * RemoteAddress);
// if ClientSocket != INVALID_SOCKET, then there is an accept pending
// otherwise, no accept is pending.
struct ASYNC_ACCEPT :
public SIMPLE_CRITICAL_SECTION_BASE
{
private:
LONG ReferenceCount;
SOCKET AcceptSocket;
SOCKET ClientSocket;
BYTE ClientInfoBuffer [ASYNC_ACCEPT_BUFFER_SIZE];
DWORD ClientInfoBufferLength;
OVERLAPPED Overlapped;
ASYNC_ACCEPT_FUNC AcceptFunc;
PVOID AcceptFuncContext;
HANDLE StopNotifyEvent;
private:
HRESULT StartIoLocked (
IN SOCKADDR_IN * SocketAddress);
void IoComplete (DWORD, DWORD);
HRESULT IssueAccept (void);
static void IoCompletionCallback (DWORD, DWORD, LPOVERLAPPED);
public:
ASYNC_ACCEPT (void);
~ASYNC_ACCEPT (void);
HRESULT StartIo (
IN SOCKADDR_IN * SocketAddress,
IN ASYNC_ACCEPT_FUNC AcceptFunc,
IN PVOID Context);
HRESULT GetListenSocketAddress (
OUT SOCKADDR_IN * ReturnSocketAddress);
void StopWait (void);
void AddRef (void);
void Release (void);
};
#endif // __iptel_gkutil_gkwsock_h