CAsyncSocket::SetSockOpt
Llame a esta función miembro para establecer una opción de socket.
BOOL SetSockOpt(
int nOptionName,
const void* lpOptionValue,
int nOptionLen,
int nLevel = SOL_SOCKET
);
Parámetros
nOptionName
La opción de socket cuyo valor establecido.lpOptionValue
Un puntero al búfer en el que el valor para la opción solicitada se proporciona.nOptionLen
El tamaño del búfer de lpOptionValue en bytes.nLevel
El nivel en el que se define la opción; los únicos niveles admitidos son SOL_SOCKET y IPPROTO_TCP.
Valor devuelto
Distinto de cero si la función es correcta; si no 0, y un código de error específico puede recuperar llamando a GetLastError. Los errores siguientes se aplican a esta función miembro:
WSANOTINITIALISED A AfxSocketInit correcto debe aparecer antes de utilizar esta API.
La implementación de Windows Sockets deWSAENETDOWN The detectó que produjo el subsistema de la red.
WSAEFAULT lpOptionValue no está en una parte válida del espacio de direcciones de proceso.
La operación de Windows Sockets de bloqueo deWSAEINPROGRESS A está en curso.
WSAEINVAL nLevel no es válido, o la información en lpOptionValue no es válida.
WSAENETRESET Conexión excede el tiempo de espera en que se establece SO_KEEPALIVE .
La opción deWSAENOPROTOOPT The es desconocido o no compatible. En particular, SO_BROADCAST no se admite en los sockets de SOCK_STREAMtipo, mientras que SO_DONTLINGER, SO_KEEPALIVE, SO_LINGER, y SO_OOBINLINE no se admiten en los sockets de SOCK_DGRAMescrito.
Se ha restablecidoWSAENOTCONN Conexión cuando se establece SO_KEEPALIVE .
WSAENOTSOCK El descriptor no es un socket.
Comentarios
SetSockOpt establece el valor actual una opción de socket asociada a un socket de cualquier tipo, en cualquier estado. Aunque las opciones pueden existir en distintos niveles de protocolo, esta especificación define sólo las opciones que existen en el nivel más supremo de “en”. Operaciones de socket de la influencia de opciones, como si los datos apresurado se recibió en la secuencia de datos normal, si los mensajes de difusión se pueden enviar en el socket, etc.
Hay dos tipos de opciones de socket: Opciones booleanas que habilitan o deshabilitan una característica o un comportamiento, y opciones que requieren un valor entero o lo estructurados. Para habilitar una opción boolean, puntos de lpOptionValue en un entero distinto de cero. Para deshabilitar los puntos de lpOptionValue de la opción en un entero igual a cero. nOptionLen debe ser igual a sizeof(BOOL) para las opciones boolean. Para otras opciones, los puntos de lpOptionValue a integer o estructura que contienen el valor deseado para la opción, y nOptionLen es la longitud de entero o estructura.
SO_LINGER controla la acción realizada cuando los datos no enviar se pone en cola en un socket y la función de Cerrar se denomina para cerrar el socket.
De forma predeterminada, un socket no se puede enlazar (vea Enlazar) una dirección local que ya esté en uso. En ocasiones, sin embargo, puede ser deseable “reutilizar” una dirección de esta manera. Puesto que cada conexión se identifica de forma única mediante la combinación de local y de direcciones remotas, no hay ningún problema de tener dos sockets enlazados a la misma dirección local mientras las direcciones remotas son distintos.
Para informar a la implementación de Windows Sockets que una llamada de Enlazar en un socket no debe ser deniega porque la dirección deseada ya está en uso por otro socket, la aplicación debe establecer la opción de socket de SO_REUSEADDR para el socket antes de emitir la llamada de Enlazar . Observe que la opción se interpreta sólo en el momento de la llamada de Enlazar : por consiguiente innecesario (pero perjudicial) establecer la opción en un socket que no debe estar enlazado a una dirección existente, y establecer o restablecer la opción después de la llamada de Enlazar no tiene ningún efecto en esto o cualquier otro socket.
Una aplicación puede solicitar que la implementación de Windows Sockets permite el uso de paquetes “conservar- activos” en las conexiones de (TCP) de Protocolo de control de transmisión activando la opción de socket de SO_KEEPALIVE . El Windows Sockets que la implementación no necesita admitir el uso de conserva-alives: si lo hace, la semántica precisa es implementación- concreta pero debe cumplir para seccionar 4.2.3.6 de RFC 1122: “Requisitos para los hosts de Internet — niveles de comunicación”. Si una conexión se quita como resultado de “mantenga - alives” el código de error WSAENETRESET se vuelve a cualquier llamada actual en el socket, y las llamadas subsiguientes se producirá WSAENOTCONN.
La opción de TCP_NODELAY deshabilita el algoritmo de Nagle. El algoritmo de Nagle se utiliza para reducir el número de pequeños paquetes enviados por un host almacenando en búfer no reconocido envía datos hasta que un paquete del mismo tamaño puede ser enviados. Sin embargo, para algunas aplicaciones este algoritmo pueden impedir el rendimiento, y TCP_NODELAY se puede utilizar para desactivarlo. Los programadores de aplicaciones no deben establecer TCP_NODELAY a menos que el impacto de hacerlo bien- se comprender y se desea, ya que establecer TCP_NODELAY puede tener un impacto negativo significativo en el rendimiento de red. TCP_NODELAY es la única opción compatible del socket que utiliza IPPROTO_TCPnivel; el resto del nivel SOL_SOCKETde uso de las opciones.
Algunas implementaciones de información de depuración de salida de la fuente de Windows Sockets si la opción de SO_DEBUG establecida por una aplicación.
Las opciones siguientes se admiten para SetSockOpt. El tipo identifica el tipo de datos dirigidos por lpOptionValue.
Valor |
Tipo |
Significado |
---|---|---|
SO_BROADCAST |
BOOL |
Permite la transmisión de mensajes de difusión en el socket. |
SO_DEBUG |
BOOL |
Registra información de depuración. |
SO_DONTLINGER |
BOOL |
No bloquee Cerrar que espera los datos no enviars que se envían. Establecer esta opción equivale a establecer SO_LINGER con l_onoff establecido en cero. |
SO_DONTROUTE |
BOOL |
No distribuya: enviar directamente a la interfaz. |
SO_KEEPALIVE |
BOOL |
Send conserva-alives. |
SO_LINGER |
struct LINGER |
Retrásese en Cerrar si los datos no enviar está presente. |
SO_OOBINLINE |
BOOL |
Reciba los datos fuera de banda en la secuencia de datos normal. |
SO_RCVBUF |
int |
Especifica el tamaño de búfer de recibe. |
SO_REUSEADDR |
BOOL |
Permite que el socket se enlazará a una dirección que ya esté en uso. (Vea Enlazar.) |
SO_SNDBUF |
int |
Especifica el tamaño de búfer para envían. |
TCP_NODELAY |
BOOL |
Deshabilita el algoritmo de Nagle para la fusión de envíos. |
Las opciones de Berkeley Software Distribution (BSD) no compatibles para SetSockOpt son:
Valor |
Tipo |
Significado |
---|---|---|
SO_ACCEPTCONN |
BOOL |
El socket está escuchando |
SO_ERROR |
int |
Obtiene el estado de error y borrelo. |
SO_RCVLOWAT |
int |
Reciba la marca de agua baja. |
SO_RCVTIMEO |
int |
Reciba el tiempo de espera |
SO_SNDLOWAT |
int |
Envía la marca de agua baja. |
SO_SNDTIMEO |
int |
Envíe el tiempo de espera. |
SO_TYPE |
int |
Tipo de socket. |
IP_OPTIONS |
|
Establezca el campo de opciones de encabezado IP. |
Requisitos
encabezado: afxsock.h