Compartir a través de


Función de devolución de llamada LPWSPGETSOCKOPT (ws2spi.h)

La función LPWSPGetSockOpt recupera una opción de socket.

Sintaxis

LPWSPGETSOCKOPT Lpwspgetsockopt;

int Lpwspgetsockopt(
  SOCKET s,
  int level,
  int optname,
  char *optval,
  LPINT optlen,
  LPINT lpErrno
)
{...}

Parámetros

s

Descriptor que identifica un socket.

level

Nivel en el que se define la opción; los niveles admitidos incluyen SOL_SOCKET. (Véase el anexo para obtener más niveles específicos del protocolo).

optname

Opción de socket para la que se va a recuperar el valor.

optval

Puntero al búfer en el que se va a devolver el valor de la opción solicitada.

optlen

Puntero al tamaño, en bytes, del búfer optval .

lpErrno

Puntero al código de error.

Valor devuelto

Si no se produce ningún error, LPWSPGetSockOpt devuelve cero. De lo contrario, se devuelve un valor de SOCKET_ERROR y hay disponible un código de error específico en lpErrno.

Código de error Significado
WSAENETDOWN
Error en el subsistema de red.
WSAEFAULT
Uno de los parámetros optval o optlen no es una parte válida del espacio de direcciones del usuario o el parámetro optlen es demasiado pequeño.
WSAEINVAL
El nivel es desconocido o no es válido.
WSAEINPROGRESS
La función se invoca cuando hay una devolución de llamada en curso.
WSAENOPROTOOPT
La opción es desconocida o no es compatible con la familia de protocolos indicada.
WSAENOTSOCK
El descriptor no es un socket.

Comentarios

La función LPWSPGetSockOpt recupera el valor actual de una opción de socket asociada a un socket de cualquier tipo, en cualquier estado y almacena el resultado en optval. Las opciones pueden existir en varios niveles de protocolo, pero siempre están presentes en el nivel de socket superior. Las opciones afectan a las operaciones de socket, como el enrutamiento de paquetes y la transferencia de datos OOB.

El valor asociado a la opción seleccionada se devuelve en la opción optval del búfer. El entero al que apunta optlen debe contener originalmente el tamaño de este búfer; en la devolución, se establecerá en el tamaño del valor devuelto. Por SO_LINGER, será el tamaño de una estructura persistente; para la mayoría de las demás opciones, será el tamaño de un entero.

El cliente SPI de Windows Sockets es responsable de asignar cualquier espacio de memoria al que apunte directa o indirectamente cualquiera de los parámetros que especifique.

Si la opción nunca se estableció con LPWSPSetSockOpt, LPWSPGetSockOpt devuelve el valor predeterminado de la opción.

Para obtener más información sobre las opciones de socket, consulte Opciones de socket.

level = SOL_SOCKET

Valor Tipo Significado Valor predeterminado
SO_ACCEPTCONN BOOL El socket está escuchando a través de LPWSPListen. FALSE a menos que se haya realizado un LPWSPListen .
SO_BROADCAST BOOL El socket está configurado para la transmisión y recepción de mensajes de difusión. FALSE
SO_DEBUG BOOL La depuración está habilitada. FALSE
SO_DONTLINGER BOOL Si es true, la opción SO_LINGER está deshabilitada. TRUE
SO_DONTROUTE BOOL El enrutamiento está deshabilitado. Establecer esta opción de socket se realiza correctamente, pero se omite en AF_INET sockets; produce un error en AF_INET6 sockets con WSAENOPROTOOPT . Esta opción no se admite en sockets ATM (da como resultado un error). FALSE
SO_ERROR integer Recupera el estado del error y borra. 0
SO_GROUP_ID GROUP Reservado. Null
SO_GROUP_PRIORITY integer Reservado. 0
SO_KEEPALIVE BOOL Se envían los keepalives. No se admite en sockets ATM (se produce un error). FALSE
SO_LINGER Estructura DE LA LENCE Devuelve las opciones de persistencia actuales. 1 está activado (valor predeterminado), 0 está desactivado
SO_MAX_MSG_SIZE entero sin signo Tamaño máximo de un mensaje para los tipos de socket orientados a mensajes (por ejemplo, SOCK_DGRAM). No tiene ningún significado para los sockets orientados a flujos. Dependiente de la implementación
SO_OOBINLINE BOOL Los datos de OOB se reciben en el flujo de datos normal. FALSE
SO_PROTOCOL_INFO estructura de WSAPROTOCOL_INFO Descripción de la información del protocolo para el protocolo enlazado a este socket. Dependiente del protocolo
SO_RCVBUF integer 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. Dependiente de la implementación
SO_REUSEADDR BOOL El socket se puede enlazar a una dirección que ya está en uso. Esta opción no es aplicable en sockets ATM. FALSE.
SO_SNDBUF integer 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. Dependiente de la implementación
SO_TYPE integer Tipo de socket (por ejemplo, SOCK_STREAM). Como se creó con LPWSPSocket">LPWSPSocket
PVD_CONFIG Dependiente del proveedor de servicios Objeto de estructura de datos opaco del proveedor de servicios asociado a sockets. Este objeto almacena la información de configuración actual del proveedor de servicios. El formato exacto de esta estructura de datos es específico del proveedor de servicios. Dependiente de la implementación

 

Al llamar a LPWSPGetSockOpt con una opción no admitida, se devolverá un código de error de WSAENOPROTOOPT en lpErrno.

SO_DEBUG

Se recomienda a los proveedores de servicios de Windows Sockets (pero no necesarios) proporcionar información de depuración de salida si un cliente SPI de Windows Sockets establece la opción SO_DEBUG. El mecanismo para generar la información de depuración y el formulario que toma están fuera del ámbito de esta especificación.

SO_ERROR

La opción SO_ERROR devuelve y restablece el código de error basado en sockets (que no es necesariamente el mismo que el código de error por subproceso que mantiene el WS2_32.DLL). Una llamada correcta a Windows Sockets en el socket no restablece el código de error basado en socket devuelto por la opción SO_ERROR.

SO_GROUP_ID

Reservado. Este valor debe ser NULL.

SO_GROUP_PRIORITY

Reservado.

SO_KEEPALIVE

Un cliente SPI de Windows Sockets puede solicitar que un proveedor de servicios TCP/IP habilite el uso de paquetes de mantenimiento activo en conexiones TCP activando la opción de socket SO_KEEPALIVE . Un proveedor de Windows Sockets no necesita admitir el uso de keep-alives: si lo hace, la semántica precisa es específica de la implementación, pero debe cumplir la sección 4.2.3.6 de RFC 1122: Requisitos para hosts de Internet: capas de comunicación. (Este recurso solo puede estar disponible en inglés). Si se quita una conexión como resultado de keep-alives, el código de error WSAENETRESET se devuelve a cualquier llamada en curso en el socket y se producirá un error en las llamadas posteriores con WSAENOTCONN .

SO_LINGER

SO_LINGER controla la acción realizada cuando los datos sin enviar se ponen en cola en un socket y se realiza un LPWSPCloseSocket . Consulte LPWSPCloseSocket para obtener una descripción de la forma en que la configuración de SO_LINGER afecta a la semántica de LPWSPCloseSocket. El cliente SPI de Windows Sockets obtiene el comportamiento deseado mediante la creación de una estructura LINGER (a la que apunta el parámetro optval ) con los siguientes elementos:

}

SO_MAX_MSG_SIZE

Se trata de una opción de socket get-only, que indica el tamaño máximo de un mensaje de envío saliente para los tipos de socket orientados a mensajes (por ejemplo, SOCK_DGRAM) implementados por el proveedor de servicios. No tiene ningún significado para los sockets orientados a flujos de bytes. No hay ningún aprovisionamiento para determinar el tamaño máximo del mensaje entrante.

SO_PROTOCOL_INFOW

Se trata de una opción de solo obtención que proporciona la estructura de WSAPROTOCOL_INFO asociada a este socket. Vea WSCEnumProtocols para obtener más información sobre esta estructura.

SO_SNDBUF

Cuando un proveedor de servicios de Windows Sockets admite las opciones de SO_RCVBUF y SO_SNDBUF, un cliente SPI de Windows Sockets puede usar LPWSPSetSockOpt para solicitar diferentes tamaños de búfer (mayores o más pequeños). La llamada puede realizarse correctamente aunque el proveedor de servicios no haya hecho disponible toda la cantidad solicitada. Un cliente SPI de Windows Sockets debe llamar a esta función con la misma opción para comprobar el tamaño del búfer proporcionado realmente.

SO_REUSEADDR

De forma predeterminada, un socket no se puede enlazar (consulte LPWSPBind) a una dirección local que ya está en uso. Sin embargo, en ocasiones, puede ser conveniente reutilizar una dirección de esta manera. Puesto que cada conexión se identifica de forma única mediante la combinación de direcciones locales y remotas, no hay ningún problema si se tienen dos sockets enlazados a la misma dirección local, siempre que las direcciones remotas sean diferentes. Para informar al proveedor de Windows Sockets de que se debe permitir que un LPWSPBind en un socket se enlace a una dirección local que ya está en uso por otro socket, el cliente SPI de Windows Sockets debe establecer la opción de socket SO_REUSEADDR para el socket antes de emitir lpWSPBind. Tenga en cuenta que la opción solo se interpreta en el momento de LPWSPBind. Por lo tanto, es innecesario (pero inofensivo) establecer la opción en un socket que no se va a enlazar a una dirección existente, y establecer o restablecer la opción después de que LPWSPBind no tenga ningún efecto en este o en cualquier otro socket.

PVD_CONFIG

Esta opción recupera un objeto de estructura de datos opaco del proveedor de servicios asociado a sockets. Este objeto almacena la información de configuración actual del proveedor de servicios. El formato exacto de esta estructura de datos es específico del proveedor de servicios.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Encabezado ws2spi.h

Consulte también

LPWSPSetSockOpt

LPWSPSocket