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 |
---|---|
Error en el subsistema de red. | |
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. | |
El nivel es desconocido o no es válido. | |
La función se invoca cuando hay una devolución de llamada en curso. | |
La opción es desconocida o no es compatible con la familia de protocolos indicada. | |
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.
-
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