WSHOpenSocket

INT
WSHOpenSocket(
IN OUT PINT AddressFamily,
IN OUT PINT SocketType,
IN OUT PINT Protocol,
OUT PUNICODE_STRING TransportDeviceName,
OUT PVOID HelperDllSocketContext,
OUT PDWORD NotificationEvents
);

WSHOpenSocket is called by the Windows Sockets DLL when opening a socket.

Parameter

AddressFamily

On input, propagates the address family specified in the call to socket. WSHOpenSocket resets this to the canonicalized value for the address family.

For example, if this is AF_UNSPEC on input, socket type is SOCK_STREAM, and protocol is IPPROTO_TCP, WSHOpenSocket resets this parameter to AF_INET.

SocketType

On input, propagates the socket type specified in the call to socket. WSHOpenSocket resets this to the canonicalized value for the socket type.

For example, if this is zero on input, address family is AF_INET, and protocol is IPPROTO_TCP, WSHOpenSocket resets this parameter to SOCK_STREAM.

Protocol

On input, this is set to the value specified in the call to socket. WSHOpenSocket resets this to the canonicalized value for the protocol.

For example, if this is zero on input, address family is AF_INET, and socket type is SOCK_STREAM, WSHOpenSocket resets this parameter to IPPROTO_TCP.

TransportDeviceName

Points to a Unicode counted string, specifying the name of the TDI transport that will handle the socket.

HelperDllSocketContext

Points to a variable that the helper DLL sets to a pointer to a context area that the helper DLL allocates. The Windows Sockets DLL treats this as a handle, passing it uninterpreted to the helper DLL in all subsequent calls to WSHXxx functions involving the socket currently being opened. The helper DLL uses its context area to maintain state for tracking operations on the open socket.

NotificationEvents

Points to a bitmask variable that the helper DLL sets to specify the state-change events for which the Windows Sockets DLL should call the helper DLL's WSHNotify function. A helper DLL can request notifications by setting this variable to a combination (ORed) of the following, as defined in wsahelp.h:

WSH_NOTIFY_BIND

Call WSHNotify on a successful call to bind.

WSH_NOTIFY_LISTEN

Call WSHNotify on a successful call to listen.

WSH_NOTIFY_ACCEPT

Call WSHNotify when a socket handle is being returned from the accept function.

WSH_NOTIFY_CONNECT

Call WSHNotify on a successful call to connect.

WSH_NOTIFY_SHUTDOWN_RECEIVE

Call WSHNotify on a successful call to shutdown for the receive side of the socket.

WSH_NOTIFY_SHUTDOWN_SEND

Call WSHNotify on a successful call to shutdown for the send side of the socket.

WSH_NOTIFY_SHUTDOWN_ALL

Call WSHNotify on a successful call to shutdown for both sides of the socket.

WSH_NOTIFY_CLOSE

Call WSHNotify when the socket is being closed.

WSH_NOTIFY_CONNECT_ERROR

Call WSHNotify when on a failed called to connect occurred.

Return Value

WSHOpenSocket returns zero if the given parameters are valid. Otherwise, it returns a Windows Sockets error code. If its return value is nonzero, the socket or accept call fails and the error is set to the value returned by WSHOpenSocket.

Comments

The Windows Sockets DLL calls WSHOpenSocket whenever it is creating a new socket, either when an application calls socket or when a newly connected socket is being created by the accept function. If the helper DLL exports WSHOpenSocket2, it supersedes WSHOpenSocket.

WSHOpenSocket verifies and canonicalizes the address family, socket type, and protocol parameters so that the Windows Sockets DLL can depend on a unique triple for each type of socket.

WSHOpenSocket also allocates any necessary context structure to track subsequent operations on the open socket, and, through the NotificationEvents parameter, indicates to the Windows Sockets DLL the state-transition events at which the helper DLL does additional processing.

A WSH DLL must set NotificationEvents with WSH_NOTIFY_CLOSE if it allocates memory for per-socket context and returns a pointer at HelperDllSocketContext. Otherwise, a memory leak can occur.

See Also

WSHNotify, WSHOpenSocket2