Compartir a través de


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

Vea también

Referencia

CAsyncSocket Class

Gráfico de jerarquías

CAsyncSocket::AsyncSelect

CAsyncSocket::Bind

CAsyncSocket::Create

CAsyncSocket::GetSockOpt

CAsyncSocket::IOCtl