Call this member function to retrieve a socket option.
BOOL GetSockOpt( int nOptionName, void* lpOptionValue, int* lpOptionLen, int nLevel = SOL_SOCKET );
- The socket option for which the value is to be retrieved.
- A pointer to the buffer in which the value for the requested option is to be returned. The value associated with the selected option is returned in the buffer lpOptionValue. The integer pointed to by lpOptionLen should originally contain the size of this buffer in bytes; and on return, it will be set to the size of the value returned. For SO_LINGER, this will be the size of a LINGER structure; for all other options it will be the size of a BOOL or an int, depending on the option. See the list of options and their sizes in the Remarks section.
- A pointer to the size of the lpOptionValue buffer in bytes.
- The level at which the option is defined; the only supported levels are SOL_SOCKET and IPPROTO_TCP.
Nonzero if the function is successful; otherwise 0, and a specific error code can be retrieved by calling GetLastError. If an option was never set with SetSockOpt, then GetSockOpt returns the default value for the option. The following errors apply to this member function:
- WSANOTINITIALISED A successful AfxSocketInit must occur before using this API.
- WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.
- WSAEFAULT The lpOptionLen argument was invalid.
- WSAEINPROGRESS A blocking Windows Sockets operation is in progress.
- WSAENOPROTOOPT The option is unknown or unsupported. In particular, SO_BROADCAST is not supported on sockets of type SOCK_STREAM, while SO_ACCEPTCONN, SO_DONTLINGER, SO_KEEPALIVE, SO_LINGER, and SO_OOBINLINE are not supported on sockets of type SOCK_DGRAM.
- WSAENOTSOCK The descriptor is not a socket.
GetSockOpt retrieves the current value for a socket option associated with a socket of any type, in any state, and stores the result in lpOptionValue. Options affect socket operations, such as the routing of packets, out-of-band data transfer, and so on.
The following options are supported for GetSockOpt. The Type identifies the type of data addressed by lpOptionValue. The TCP_NODELAY option uses level IPPROTO_TCP; all other options use level SOL_SOCKET.
|SO_ACCEPTCONN||BOOL||Socket is listening.|
|SO_BROADCAST||BOOL||Socket is configured for the transmission of broadcast messages.|
|SO_DEBUG||BOOL||Debugging is enabled.|
|SO_DONTLINGER||BOOL||If true, the SO_LINGER option is disabled.|
|SO_DONTROUTE||BOOL||Routing is disabled.|
|SO_ERROR||int||Retrieve error status and clear.|
|SO_KEEPALIVE||BOOL||Keep-alives are being sent.|
|SO_LINGER||struct LINGER||Returns the current linger options.|
|SO_OOBINLINE||BOOL||Out-of-band data is being received in the normal data stream.|
|SO_RCVBUF||int||Buffer size for receives.|
|SO_REUSEADDR||BOOL||The socket can be bound to an address which is already in use.|
|SO_SNDBUF||int||Buffer size for sends.|
|SO_TYPE||int||The type of the socket (for example, SOCK_STREAM).|
|TCP_NODELAY||BOOL||Disables the Nagle algorithm for send coalescing.|
Berkeley Software Distribution (BSD) options not supported for GetSockOpt are:
|SO_RCVLOWAT||int||Receive low water mark.|
|SO_SNDLOWAT||int||Send low water mark.|
|IP_OPTIONS||Get options in IP header.|
|TCP_MAXSEG||int||Get TCP maximum segment size.|
Calling GetSockOpt with an unsupported option will result in an error code of WSAENOPROTOOPT being returned from GetLastError.