Opciones de socket de SOL_SOCKET

En las tablas siguientes se describen SOL_SOCKET opciones de socket. Consulte las páginas de referencia de la función getsockopt y setsockopt para obtener más información sobre cómo obtener y establecer opciones de socket.

Para enumerar protocolos y detectar las propiedades admitidas para cada protocolo instalado, use la función WSAEnumProtocols, WSCEnumProtocols o WSCEnumProtocols32 .

Algunas opciones de socket requieren más explicación de lo que estas tablas pueden transmitir; estas opciones contienen vínculos a páginas adicionales.

Nota

Todas las opciones de socket de SOL_SOCKET se aplican igualmente a IPv4 e IPv6 (excepto SO_BROADCAST, ya que la difusión no se implementa en IPv6).

 

Opciones de socket de SOL_SOCKET

Opción Obtener Set Tipo optval Descripción
PVD_CONFIG char [] Objeto de estructura de datos opaco que contiene información de configuración para el proveedor de servicios. Esta opción depende de la implementación.
SO_ACCEPTCONN DWORD (booleano) Devuelve si un socket está en modo de escucha. Esta opción solo es Válida para protocolos orientados a la conexión.
SO_BROADCAST DWORD (booleano) Configure un socket para enviar datos de difusión. Esta opción solo es Válida para los protocolos que admiten la difusión (IPX y UDP, por ejemplo).
SO_BSP_STATE CSADDR_INFO Devuelve la dirección local, el puerto local, la dirección remota, el puerto remoto, el tipo de socket y el protocolo usados por un socket. Consulte la referencia de SO_BSP_STATE para obtener más información.
SO_CONDITIONAL_ACCEPT DWORD (booleano) Indica si la aplicación aceptará o rechazará las conexiones entrantes, no por la pila de protocolos. Consulte la referencia de SO_CONDITIONAL_ACCEPT para obtener más información.
SO_CONNDATA char [] Datos adicionales, no en el flujo de datos de red normal, que se envía con solicitudes de red para establecer una conexión. Esta opción se usa en protocolos heredados como DECNet, OSI TP4 y otros. Esta opción no es compatible con el protocolo TCP/IP en Windows.
SO_CONNDATALEN DWORD Longitud, en bytes, de datos adicionales, no en el flujo de datos de red normal, que se envía con solicitudes de red para establecer una conexión. Esta opción se usa en protocolos heredados como DECNet, OSI TP4 y otros. Esta opción no es compatible con el protocolo TCP/IP en Windows.
SO_CONNECT_TIME DWORD Devuelve el número de segundos que se ha conectado un socket. Esta opción solo es válida para los protocolos orientados a la conexión.
SO_CONNOPT char [] Datos de opción de conexión adicionales, no en el flujo de datos de red normal, que se envía con solicitudes de red para establecer una conexión. Esta opción se usa en protocolos heredados como DECNet, OSI TP4 y otros. Esta opción no es compatible con el protocolo TCP/IP en Windows.
SO_CONNOPTLEN DWORD Longitud, en bytes, de datos de opción de conexión, no en el flujo de datos de red normal, que se envía con solicitudes de red para establecer una conexión. Esta opción se usa en protocolos heredados como DECNet, OSI TP4 y otros. Esta opción no es compatible con el protocolo TCP/IP en Windows.
SO_DISCDATA char [] Datos adicionales, no en el flujo de datos de red normal, que se envía con solicitudes de red para desconectar una conexión. Esta opción se usa en protocolos heredados como DECNet, OSI TP4 y otros. Esta opción no es compatible con el protocolo TCP/IP en Windows.
SO_DISCDATALEN DWORD Longitud, en bytes, de datos adicionales, no en el flujo de datos de red normal, que se envía con solicitudes de red para desconectar una conexión. Esta opción se usa en protocolos heredados como DECNet, OSI TP4 y otros. Esta opción no es compatible con el protocolo TCP/IP en Windows.
SO_DISCOPT char [] Datos adicionales de la opción de desconexión, no en el flujo de datos de red normal, que se envía con solicitudes de red para desconectar una conexión. Esta opción se usa en protocolos heredados como DECNet, OSI TP4 y otros. Esta opción no es compatible con el protocolo TCP/IP en Windows.
SO_DISCOPTLEN DWORD Longitud, en bytes, de datos de opción de desconexión adicionales, no en el flujo de datos de red normal, que se envía con solicitudes de red para desconectar una conexión. Esta opción se usa en protocolos heredados como DECNet, OSI TP4 y otros. Esta opción no es compatible con el protocolo TCP/IP en Windows.
SO_DEBUG DWORD (booleano) Habilite la salida de depuración. Actualmente, los proveedores de Microsoft no generan ninguna información de depuración.
SO_DONTLINGER DWORD (booleano) Indica el estado del miembro l_onoff de la estructura persistente asociada a un socket. Si este miembro es distinto de cero, un socket permanece abierto durante un período de tiempo especificado después de una llamada de función closesocket para permitir que se envíen los datos en cola. Esta opción solo es válida para protocolos confiables orientados a la conexión.
SO_DONTROUTE DWORD (booleano) Indica que los datos salientes deben enviarse en cualquier interfaz a la que esté enlazado el socket y no a un enrutado en alguna otra interfaz. Esta opción solo es Válida para protocolos orientados a mensajes. Los proveedores de Microsoft omiten esta opción de forma silenciosa y siempre consultan la tabla de enrutamiento para encontrar la interfaz saliente adecuada.
SO_ERROR DWORD Devuelve el último código de error en este socket. Este código de error por socket no siempre se establece inmediatamente.
SO_EXCLUSIVEADDRUSE DWORD (booleano) Impide que cualquier otro socket se enlace a la misma dirección y puerto. Esta opción debe establecerse antes de llamar a la función bind . Consulte la referencia de SO_EXCLUSIVEADDRUSE para obtener más información.
SO_GROUP_ID unsigned int Esta opción de socket está reservada y no se debe usar.
SO_GROUP_PRIORITY int Esta opción de socket está reservada y no se debe usar.
SO_KEEPALIVE DWORD (booleano) Habilita keep-alive para una conexión de socket. Válido solo para los protocolos que admiten la noción de protocolos keep-alive (protocolos orientados a la conexión). Para TCP, el tiempo de espera de mantenimiento predeterminado es de 2 horas y el intervalo de mantenimiento es de 1 segundo. El número predeterminado de sondeos de mantenimiento activo varía en función de la versión de Windows. Consulte la referencia de SO_KEEPALIVE para obtener más información.
SO_LINGER estructura persistente Indica el estado de la estructura persistente asociada a un socket. Si el miembro l_onoff de la estructura persistente es distinto de cero, un socket permanece abierto durante un período de tiempo especificado después de una llamada de función closesocket para permitir que se envíen los datos en cola. La cantidad de tiempo, en segundos, para permanecer abierta se especifica en el miembro l_linger de la estructura persistente . Esta opción solo es válida para protocolos confiables orientados a la conexión.
SO_MAX_MSG_SIZE DWORD Devuelve el tamaño máximo del mensaje saliente para los sockets orientados a mensajes admitidos por el protocolo. No tiene ningún significado para los sockets orientados a flujos.
SO_MAXDG DWORD Devuelve el tamaño máximo, en bytes, de los datagramas salientes admitidos por el protocolo. Esta opción de socket no tiene ningún significado para los sockets orientados a flujos.
SO_MAXPATHDG DWORD Devuelve el tamaño máximo, en bytes, de los datagramas de salida admitidos por el protocolo a una dirección de destino determinada. Esta opción de socket no tiene ningún significado para los sockets orientados a flujos. Los proveedores de Microsoft pueden tratar esto de forma silenciosa como SO_MAXDG.
SO_OOBINLINE DWORD (booleano) Indica que los datos no enlazados deben devolverse en línea con datos normales. Esta opción solo es válida para los protocolos orientados a la conexión que admiten datos fuera de banda.
SO_OPENTYPE DWORD Una vez establecido, afecta a si los sockets posteriores que se crean no se superponen. Los valores posibles de esta opción son SO_SYNCHRONOUS_ALERT y SO_SYNCHRONOUS_NONALERT. Esta opción no se debe usar. En su lugar, use la función WSASocket y deje desactivado el bit de WSA_FLAG_OVERLAPPED en el parámetro dwFlags .
SO_PAUSE_ACCEPT DWORD(boolean) Use esta opción para los sockets de escucha. Cuando se establece la opción, el socket responde a todas las conexiones entrantes con un RST en lugar de aceptarlas.
SO_PORT_SCALABILITY DWORD (booleano) Permite la escalabilidad del puerto local para un socket, ya que permite maximizar la asignación de puertos mediante la asignación de puertos comodín varias veces para diferentes pares de puertos de dirección local en un equipo local. En plataformas en las que ambas opciones están disponibles, prefiera SO_REUSE_UNICASTPORT en lugar de esta opción. Consulte la referencia de SO_PORT_SCALABILITY para obtener más información.
SO_PROTOCOL_INFO WSAPROTOCOL_INFO Esta opción se define en la opción de socket SO_PROTOCOL_INFOW si se define la macro UNICODE. Si no se define la macro UNICODE, esta opción se define en la opción de socket SO_PROTOCOL_INFOA.
SO_PROTOCOL_INFOA WSAPROTOCOL_INFOA Devuelve la estructura de WSAPROTOCOL_INFOA para el socket especificado.
SO_PROTOCOL_INFOW WSAPROTOCOL_INFOW Devuelve la estructura WSAPROTOCOL_INFOW del socket especificado.
SO_RANDOMIZE_PORT DWORD(boolean) Esta opción debe establecerse en un socket independiente. Cuando se establece SO_RANDOMIZE_PORT y se selecciona un puerto efímero en el socket, se enlaza un número de puerto aleatorio. Los puertos de reutilización automática (puertos seleccionados mediante SO_REUSE_UNICASTPORT) también aleatoricen el puerto devuelto, por lo que si una aplicación establece SO_REUSE_UNICASTPORT e intenta establecer SO_RANDOMIZE_PORT, se produce un error en la segunda llamada setockopt .
SO_RCVBUF DWORD Espacio total de búfer por socket reservado para las recepción. Esto no está relacionado con SO_MAX_MSG_SIZE y no se corresponde necesariamente con el tamaño de la ventana de recepción TCP.
SO_RCVLOWAT DWORD Se incluye una opción de socket de BSD UNIX para la compatibilidad con versiones anteriores. Esta opción establece el número mínimo de bytes que se van a procesar para las operaciones de entrada de socket. El proveedor TCP/IP de Windows no admite esta opción. Si esta opción se usa en Windows Vista y versiones posteriores, las funciones getsockopt y setsockopt producen un error con WSAEINVAL. En versiones anteriores de Windows, estas funciones producen un error con WSAENOPROTOOPT.
SO_RCVTIMEO DWORD Tiempo de espera, en milisegundos, para bloquear las llamadas de recepción. El valor predeterminado de esta opción es cero, lo que indica que una operación de recepción no agotará el tiempo de espera. Si se agota el tiempo de espera de una llamada de recepción de bloqueo, la conexión está en un estado indeterminado y debe cerrarse.
Si el socket se crea mediante la función WSASocket , el parámetro dwFlags debe tener establecido el atributo WSA_FLAG_OVERLAPPED para que el tiempo de espera funcione correctamente. De lo contrario, el tiempo de espera nunca surte efecto.
SO_REUSEADDR DWORD (booleano) Permite que un socket se enlace a una dirección y un puerto ya en uso. La opción SO_EXCLUSIVEADDRUSE puede impedirlo.
SO_REUSE_UNICASTPORT DWORD (booleano) Cuando se establece, permita la reutilización de puertos efímeros para las funciones de conexión de la API winsock que requieren un enlace explícito, como ConnectEx. Tenga en cuenta que las funciones de conexión con un enlace implícito (como conectarse sin un enlace explícito) tienen esta opción establecida de forma predeterminada. Use esta opción en lugar de SO_PORT_SCALABILITY en plataformas en las que ambos estén disponibles.
SO_REUSE_MULTICASTPORT DWORD Cuando se establece en un socket, esta opción indica que el socket nunca se usará para recibir paquetes de unidifusión y, por consiguiente, que su puerto se puede compartir con otras aplicaciones de solo multidifusión. Establecer el valor en 1 permite compartir siempre el tráfico de multidifusión en el puerto. Establecer el valor en 0 (valor predeterminado) deshabilita este comportamiento.
SO_SNDBUF DWORD Espacio total de búferes por socket reservado para envíos. Esto no está relacionado con SO_MAX_MSG_SIZE y no se corresponde necesariamente con el tamaño de una ventana de envío TCP.
SO_SNDLOWAT DWORD Se incluye una opción de socket de BSD UNIX para la compatibilidad con versiones anteriores. Esta opción establece el número mínimo de bytes que se procesarán para las operaciones de salida del socket. El proveedor TCP/IP de Windows no admite esta opción. Si esta opción se usa en Windows Vista y versiones posteriores, las funciones getsockopt y setsockopt producen un error con WSAEINVAL. En versiones anteriores de Windows, estas funciones producen un error con WSAENOPROTOOPT.
SO_SNDTIMEO DWORD Tiempo de espera, en milisegundos, para bloquear las llamadas de envío. El valor predeterminado de esta opción es cero, lo que indica que una operación de envío no agotará el tiempo de espera. Si se agota el tiempo de espera de una llamada de envío de bloqueo, la conexión está en un estado indeterminado y debe cerrarse.
Si el socket se crea mediante la función WSASocket , el parámetro dwFlags debe tener establecido el atributo WSA_FLAG_OVERLAPPED para que el tiempo de espera funcione correctamente. De lo contrario, el tiempo de espera nunca surte efecto.
SO_TYPE DWORD Devuelve el tipo de socket para el socket especificado (SOCK_STREAM o SOCK_DGRAM, por ejemplo).
SO_UPDATE_ACCEPT_CONTEXT DWORD (booleano) Esta opción se usa con la función AcceptEx . Esta opción actualiza las propiedades del socket que se heredan del socket de escucha. Esta opción debe establecerse si las funciones getpeername, getsockname, getsockopt o setsockopt se usarán en el socket aceptado.
SO_UPDATE_CONNECT_CONTEXT DWORD (booleano) Esta opción se usa con las funciones ConnectEx, WSAConnectByList y WSAConnectByName . Esta opción actualiza las propiedades del socket una vez establecida la conexión. Esta opción debe establecerse si las funciones getpeername, getsockname, getsockopt, setsockopt o shutdown deben usarse en el socket conectado.
SO_USELOOPBACK DWORD (booleano) Use la dirección de bucle invertido local al enviar datos desde este socket. Esta opción solo se debe usar cuando todos los datos enviados también se reciban localmente. El proveedor TCP/IP de Windows no admite esta opción. Si esta opción se usa en Windows Vista y versiones posteriores, las funciones getsockopt y setsockopt producen un error con WSAEINVAL. En versiones anteriores de Windows, estas funciones producen un error con WSAENOPROTOOPT.

Compatibilidad de Windows con opciones de SOL_SOCKET

Opción Windows 10 Windows 7 Windows Server 2008 Windows Vista Windows Server 2003 Windows XP Windows 2000 Windows NT4 Windows 9x/ME
PVD_CONFIG
SO_ACCEPTCONN x x x x x x x x x
SO_BROADCAST x x x x x x x x x
SO_BSP_STATE x x x x
SO_CONDITIONAL_ACCEPT x x x x x x x
SO_CONNDATA x x x x x x x x
SO_CONNDATALEN x x x x x x x x
SO_CONNECT_TIME x x x x x x x x x
SO_CONNOPT x x x x x x x x
SO_CONNOPTLEN x x x x x x x x
SO_DISCDATA x x x x x x x x
SO_DISCDATALEN x x x x x x x x
SO_DISCOPT x x x x x x x x
SO_DISCOPTLEN x x x x x x x x
SO_DEBUG x x x x x x x x x
SO_DONTLINGER x x x x x x x x x
SO_DONTROUTE x x x x x x x x x
SO_ERROR x x x x x x x x x
SO_EXCLUSIVEADDRUSE x x x x x x x x SP4+
SO_GROUP_ID x x x x
SO_GROUP_PRIORITY x x x x
SO_KEEPALIVE x x x x x x x x x
SO_LINGER x x x x x x x x x
SO_MAX_MSG_SIZE x x x x x x x x x
SO_MAXDG x x x x x x x
SO_MAXPATHDG x x x x x x x
SO_OOBINLINE x x x x x x x x x
SO_OPENTYPE x x x x x x x x x
SO_PORT_SCALABILITY x x x
SO_PROTECT x
SO_PROTOCOL_INFO x x x x x x x x x
SO_PROTOCOL_INFOA x x x x x x x x x
SO_PROTOCOL_INFOW x x x x x x x x x
SO_RCVBUF x x x x x x x x x
SO_RCVLOWAT
SO_RCVTIMEO x x x x x x x x x
SO_RANDOMIZE_PORT x x x x
SO_REUSEADDR x x x x x x x x x
SO_REUSE_UNICASTPORT x
SO_REUSE_MULTICASTPORT x
SO_SNDBUF x x x x x x x x x
SO_SNDLOWAT
SO_SNDTIMEO x x x x x x x x x
SO_TYPE x x x x x x x x x
SO_UPDATE_ACCEPT_CONTEXT x x x x x x x x
SO_UPDATE_CONNECT_CONTEXT x x x x x x
SO_USELOOPBACK

Comentarios

Las opciones de socket de SOL_SOCKET se definen en varios archivos de encabezado winsock:

  • Winsock2.h
  • Mswsock.h
  • Ws2def.h

En el Kit de desarrollo de software (SDK) de Microsoft Windows publicado para Windows Vista y versiones posteriores, la organización de los archivos de encabezado ha cambiado y SOL_SOCKET nivel se define en el archivo de encabezado Ws2def.h que se incluye automáticamente en el archivo de encabezado Winsock2.h . Algunas de las opciones de socket de SOL_SOCKET se definen en los archivos de encabezado Winsock2.h y Mswsock.h . Las opciones de socket de SOL_SOCKET restantes se definen en el archivo de encabezado Ws2def.h que el archivo de encabezado Winsock2.h incluye automáticamente. Ws2def.h nunca se debe usar directamente.

En el Kit de desarrollo de software de plataforma (SDK) publicado para Windows Server 2003 y Windows XP, el nivel de SOL_SOCKET se define en el archivo de encabezado Winsock2.h . Las opciones de socket SOL_SOCKET se definen en los archivos de encabezado Winsock2.h y Mswsock.h .

Requisitos

Requisito Value
Encabezado
Winsock2.h;
Mswsock.h;
Ws2def.h (incluya Winsock2.h)