This document provides a comprehensive reference to the socket options available for Windows Sockets (Winsock). Socket options allow applications to control various aspects of socket behavior, including performance tuning, network protocol behavior, and security settings.
Socket options are set and retrieved using the setsockopt and getsockopt functions, respectively. These functions take a socket descriptor, a level indicating the protocol or subsystem, and an option name as parameters. The optval parameter points to a buffer containing the option value or where the option value is returned.
The SOL_SOCKET level provides general socket options applicable to any socket type. Other levels, such as IPPROTO_TCP and IPPROTO_UDP, are protocol-specific.
SOL_SOCKET Level OptionsThese options are fundamental and apply to most socket types.
| Option Name | Description | Type |
|---|---|---|
SO_BROADCAST |
Enables or disables the permission to send broadcast data on a socket. | BOOL |
SO_DEBUG |
Enables or disables socket debugging. | BOOL |
SO_DONTLINGER |
Disables the SO_LINGER option. |
None |
SO_ERROR |
Retrieves error information for a socket. | int |
SO_KEEPALIVE |
Enables or disables keep-alive diagnostic packets for a socket. | BOOL |
SO_LINGER |
Specifies the time interval to linger on a closed socket. | struct linger |
SO_RCVBUF |
Sets or retrieves the size of the receive buffer for the socket. | int |
SO_RCVTIMEO |
Sets or retrieves the timeout value for socket receive operations. | struct timeval |
SO_SNDBUF |
Sets or retrieves the size of the send buffer for the socket. | int |
SO_SNDTIMEO |
Sets or retrieves the timeout value for socket send operations. | struct timeval |
SO_REUSEADDR |
Enables or disables the ability to reuse a local address and port. | BOOL |
SO_TYPE |
Retrieves the type of the socket. | int |
IPPROTO_TCP Level OptionsThese options are specific to TCP sockets and control aspects of TCP behavior.
| Option Name | Description | Type |
|---|---|---|
TCP_NODELAY |
Disables the Nagle algorithm for sending data. | BOOL |
TCP_MAXSEG |
Retrieves or sets the maximum segment size for TCP. | int |
TCP_KEEPIDLE |
Sets the time (in seconds) the connection must be idle before sending the first keep-alive probe. | unsigned int |
TCP_KEEPINTVL |
Sets the time (in seconds) between successive keep-alive probes after the first one. | unsigned int |
TCP_KEEPCNT |
Sets the number of unacknowledged probes that can be sent before the connection is considered dead. | unsigned int |
IPPROTO_UDP Level OptionsThese options are specific to UDP sockets.
| Option Name | Description | Type |
|---|---|---|
UDP_CORK |
A Linux-specific option, generally not applicable on Windows. | N/A |
getsockopt and setsockoptThe prototypes for these functions are:
int getsockopt(
SOCKET s,
int level,
int optname,
char FAR * optval,
int FAR * optlen
);
int setsockopt(
SOCKET s,
int level,
int optname,
const char FAR * optval,
int optlen
);
s: A descriptor identifying a socket.
level: Specifies the protocol level at which the option is supported. To retrieve or set options for the socket itself, specify SOL_SOCKET.
optname: Specifies the socket option to retrieve or set.
optval: Pointer to a buffer in which the value for the requested option is returned, or that contains the value for the option to be set.
optlen: Pointer to a variable that specifies the size, in bytes, of the buffer pointed to by the optval parameter.
The following code snippet demonstrates how to set the SO_REUSEADDR option on a socket:
#include <winsock2.h>
#pragma comment(lib, "Ws2_32.lib")
// ...
SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == INVALID_SOCKET) {
// Handle error
return 1;
}
BOOL enableReuse = TRUE;
int ret = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char*)&enableReuse, sizeof(enableReuse));
if (ret == SOCKET_ERROR) {
// Handle error
closesocket(sock);
return 1;
}
// Proceed with socket operations...