BOOL SetSockOpt ( int nOptionName, const void * lpOptionValue, int nOptionLen, int nLevel = SOL_SOCKET );
Valor devuelto
Distinto de cero si la función es correcta; en caso contrario 0 y un código de error específico se pueden recuperar llamando GetLastError. Los errores siguientes se aplican a esta función miembro:
Parámetros
nOptionName
Para que el valor se va a establecer la opción de socket.
lpOptionValue
Un puntero a la memoria intermedia en la que se suministra el valor de la opción solicitada.
nOptionLen
El tamaño del búfer de lpOptionValue en bytes.
nLevel
El nivel en que está definida la opción; los niveles admitidos sólo son SOL_SOCKET y IPPROTO_TCP.
Observaciones
Llame a esta función miembro para definir una opción de socket. SetSockOpt establece el valor actual de una opción de socket asociado con un zócalo de cualquier tipo, en cualquier Estado. Aunque pueden existir opciones en múltiples niveles de protocolo, esta especificación define sólo las opciones que existen en el nivel superior "zócalo". Opciones afectan a las operaciones de socket, como si se reciben datos acelerados en la secuencia de datos normal, si los mensajes de difusión pueden enviarse en el zócalo etc.
Existen dos tipos de opciones de socket: opciones booleanas que activar o desactivar una característica o comportamiento y opciones que requieren un valor entero o estructura. Para activar una opción de tipo Boolean, lpOptionValue apunta a un entero distinto de cero. Para desactivar los puntos de lpOptionValue de opción en un número entero igual a cero. nOptionLen debe ser igual al sizeof(BOOL) de opciones booleanas. Para otras opciones, puntos de lpOptionValue al entero o estructura que contiene el valor deseado para la opción y nOptionLen es la longitud de la estructura o entero.
SO_LINGER controla la acción realizada cuando no enviados datos en cola en un socket y se llama a la función de Cerrar para cerrar el socket. Para obtener más información, consulte Consideraciones de programación de Windows Sockets en la documentación del SDK de Win32.
De forma predeterminada, un socket no puede estar enlazado (véase el enlace) a una dirección local que ya está en uso. En ocasiones, sin embargo, puede ser deseable "reutilizar" una dirección de esta manera. Dado que cada conexión se identifica mediante la combinación de direcciones locales y remotas, no hay ningún problema con tener dos zócalos vinculados a la misma dirección local como las direcciones remotas son diferentes.
Informar a la aplicación de Windows Sockets que una llamada de enlace en un socket no ser prohibida porque la dirección deseada ya está en uso por otro socket, la aplicación debe establecer la opción de socket SO_REUSEADDR para el socket antes de emitir la convocatoria de enlazar . Tenga en cuenta que la opción es interpretada únicamente en el momento de la convocatoria de enlazar : por lo tanto, es innecesario (pero inofensivos) establecer la opción en un socket que no es estar enlazado a una dirección existente y establecer o restablecer la opción tras el enlace llamada no tiene ningún efecto sobre este o cualquier otro socket.
Una aplicación puede solicitar que la aplicación de Windows Sockets permiten el uso de paquetes "keep-alive" en las conexiones de protocolo de Control de transmisión (TCP) activando la opción de socket SO_KEEPALIVE . (Para obtener información sobre los paquetes "keep-alive", consulte Consideraciones de programación de Windows Sockets en la documentación del SDK de Win32.) Una aplicación de Windows Sockets no necesita apoyar el uso de keepalive: si lo hace, la semántica precisa son específicas de la aplicación, pero deben ajustarse a la sección 4.2.3.6 del RFC 1122: "requisitos para Hosts de Internet: capas de comunicación." Si una conexión se interrumpe como consecuencia de "abiertas" el código de error WSAENETRESET se devuelve a las llamadas en curso en el zócalo, y las llamadas posteriores se producirá un error con WSAENOTCONN.
La opción 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 de almacenamiento en búfer sin acuse de recibo de envío datos hasta que se puede enviar un paquete completo. Sin embargo, para algunas aplicaciones de este algoritmo puede obstaculizar el rendimiento, y TCP_NODELAY puede utilizarse para desactivarlo. Escritores de aplicación no deben establecer TCP_NODELAY a menos que el impacto de hacer es tan deseada y bien entendida desde configuración de TCP_NODELAY puede tener un impacto negativo importante sobre el rendimiento de la red. TCP_NODELAY es el único apoya la opción de socket que utiliza nivel IPPROTO_TCP; todas las demás opciones utilizan nivel SOL_SOCKET.
Algunas implementaciones de Windows Sockets suministro salida información de depuración si la opción SO_DEBUG está definida por una aplicación.
Se admiten las siguientes opciones para SetSockOpt. El tipo identifica el tipo de datos dirigidas por lpOptionValue.
| Valor | Tipo | Significado |
| SO_BROADCAST | BOOL | Permitir la transmisión de mensajes de difusión en el zócalo. |
| SO_DEBUG | BOOL | Registro de información de depuración. |
| SO_DONTLINGER | BOOL | No bloquear cerca esperando los datos no han sido enviados para ser enviado. Esta opción equivale a establecer SO_LINGER con l_onoff cero. |
| SO_DONTROUTE | BOOL | No enrutar: enviar directamente a la interfaz. |
| SO_KEEPALIVE | BOOL | Enviar keepalive. |
| SO_LINGER | struct LINGER | Persistir en estrecha si hay datos no enviados. |
| SO_OOBINLINE | BOOL | Recibir datos fuera de banda en la secuencia de datos normal. |
| SO_RCVBUF | int | Especificar el tamaño de búfer para recibe. |
| SO_REUSEADDR | BOOL | Permitir el zócalo en obligarse a una dirección que ya está en uso. (Véase el enlace). |
| SO_SNDBUF | int | Especificar el tamaño del búfer de envíos. |
| TCP_NODELAY | BOOL | Deshabilita el algoritmo de Nagle para enviar coalescencia. |
Opciones de distribución de Software de Berkeley (BSD) no admite SetSockOpt:
| Valor | Tipo | Significado |
| SO_ACCEPTCONN | BOOL | Está escuchando el socket |
| SO_ERROR | int | Obtener el estado de error y claro. |
| SO_RCVLOWAT | int | Recibir la marca de agua. |
| SO_RCVTIMEO | int | Recibir el tiempo de espera |
| SO_SNDLOWAT | int | Enviar la marca de agua de baja. |
| SO_SNDTIMEO | int | Tiempo de espera de envío. |
| SO_TYPE | int | Tipo de zócalo. |
| IP_OPTIONS | Campo de establecer las opciones de encabezado IP. |
Introducción a CAsyncSocket |nbsp; Miembros de clase | Diagrama de jerarquía
Vea tambié&nnbsp;CAsyncSocket::AsyncSelect, CAsyncSocket::Bind, CAsyncSocket::Create, CAsyncSocket::GetSockOpt, CAsyncSocket::IOCtl