CAsyncSocket::SetSockOpt

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

Index