/*++ Copyright (c) 1998, Microsoft Corporation Module Name: socket.h Abstract: This module contains declarations for socket-management. The routines declared here operate asynchronously on sockets associated with an I/O completion port. They are also integrated with the component-reference object, which may optionally be used by callers to control the number of outstanding entries into a component's address-space. (See 'COMPREF.H'.) Author: Abolade Gbadegesin (aboladeg) 2-Mar-1998 Revision History: Abolade Gbadegesin (aboladeg) 23-May-1999 Added support for stream sockets. Jonathan Burstein (jonburs) 12-April-2001 Added support for raw datagram sockets. --*/ #ifndef _NATHLP_SOCKET_H_ #define _NATHLP_SOCKET_H_ #define INET_NTOA(x) inet_ntoa(*(struct in_addr*)&(x)) ULONG NhAcceptStreamSocket( PCOMPONENT_REFERENCE Component, SOCKET ListeningSocket, SOCKET AcceptedSocket OPTIONAL, PNH_BUFFER Bufferp OPTIONAL, PNH_COMPLETION_ROUTINE AcceptCompletionRoutine, PVOID Context, PVOID Context2 ); ULONG NhConnectStreamSocket( PCOMPONENT_REFERENCE Component, SOCKET ConnectingSocket, ULONG Address, USHORT Port, PNH_BUFFER Bufferp OPTIONAL, PNH_COMPLETION_ROUTINE ConnectCompletionRoutine, PNH_COMPLETION_ROUTINE CloseNotificationRoutine OPTIONAL, PVOID Context, PVOID Context2 ); ULONG NhCreateDatagramSocket( ULONG Address, USHORT Port, OUT SOCKET* Socketp ); ULONG NhCreateRawDatagramSocket( OUT SOCKET* Socketp ); ULONG NhCreateStreamSocket( ULONG Address OPTIONAL, // may be INADDR_NONE USHORT Port OPTIONAL, OUT SOCKET* Socketp ); #define NhDeleteDatagramSocket(s) NhDeleteSocket(s) #define NhDeleteStreamSocket(s) NhDeleteSocket(s) VOID NhDeleteSocket( SOCKET Socket ); // // BOOLEAN // NhIsFatalSocketError( // ULONG Error // ); // // Determines whether a request may be reissued on a socket, // given the error-code from the previous issuance of the request. // This macro is arranged to branch on the most common error-codes first. // #define \ NhIsFatalSocketError( \ _Error \ ) \ ((_Error) != ERROR_OPERATION_ABORTED && \ ((_Error) == WSAEDISCON || \ (_Error) == WSAECONNRESET || \ (_Error) == WSAETIMEDOUT || \ (_Error) == WSAENETDOWN || \ (_Error) == WSAENOTSOCK || \ (_Error) == WSAESHUTDOWN || \ (_Error) == WSAECONNABORTED)) ULONG NhNotifyOnCloseStreamSocket( PCOMPONENT_REFERENCE Component, SOCKET Socket, PNH_BUFFER Bufferp OPTIONAL, PNH_COMPLETION_ROUTINE CloseNotificationRoutine, PVOID Context, PVOID Context2 ); VOID NhQueryAcceptEndpoints( PUCHAR AcceptBuffer, PULONG LocalAddress OPTIONAL, PUSHORT LocalPort OPTIONAL, PULONG RemoteAddress OPTIONAL, PUSHORT RemotePort OPTIONAL ); ULONG NhQueryAddressSocket( SOCKET Socket ); ULONG NhQueryLocalEndpointSocket( SOCKET Socket, PULONG Address OPTIONAL, PUSHORT Port OPTIONAL ); USHORT NhQueryPortSocket( SOCKET Socket ); ULONG NhQueryRemoteEndpointSocket( SOCKET Socket, PULONG Address OPTIONAL, PUSHORT Port OPTIONAL ); ULONG NhReadDatagramSocket( PCOMPONENT_REFERENCE Component, SOCKET Socket, PNH_BUFFER Bufferp OPTIONAL, PNH_COMPLETION_ROUTINE CompletionRoutine, PVOID Context, PVOID Context2 ); ULONG NhReadStreamSocket( PCOMPONENT_REFERENCE Component, SOCKET Socket, PNH_BUFFER Bufferp OPTIONAL, ULONG Length, ULONG Offset, PNH_COMPLETION_ROUTINE CompletionRoutine, PVOID Context, PVOID Context2 ); ULONG NhWriteDatagramSocket( PCOMPONENT_REFERENCE Component, SOCKET Socket, ULONG Address, USHORT Port, PNH_BUFFER Bufferp, ULONG Length, PNH_COMPLETION_ROUTINE CompletionRoutine, PVOID Context, PVOID Context2 ); ULONG NhWriteStreamSocket( PCOMPONENT_REFERENCE Component, SOCKET Socket, PNH_BUFFER Bufferp, ULONG Length, ULONG Offset, PNH_COMPLETION_ROUTINE CompletionRoutine, PVOID Context, PVOID Context2 ); #endif // _NATHLP_SOCKET_H_