Condividi tramite


CAsyncSocket::SetSockOpt

Chiamare la funzione membro per impostare un'opzione di socket.

BOOL SetSockOpt(
   int nOptionName,
   const void* lpOptionValue,
   int nOptionLen,
   int nLevel = SOL_SOCKET 
);

Parametri

  • nOptionName
    L'opzione di socket per il quale il valore deve essere impostata su.

  • lpOptionValue
    Un puntatore a un buffer in cui il valore per l'opzione richiesta viene fornito.

  • nOptionLen
    La dimensione del buffer lpOptionValue in byte.

  • nLevel
    Il livello in cui viene definita l'opzione, gli unici livelli sono supportati SOL_SOCKET e IPPROTO_TCP.

Valore restituito

Diverso da zero se la funzione ha esito positivo; in caso contrario 0 e un codice di errore specifico possono essere recuperati chiamando GetLastError.Gli errori seguenti si applicano a questa funzione membro:

  • WSANOTINITIALISED Al AfxSocketInit deve verificarsi prima di utilizzare questa API.

  • WSAENETDOWN che l'implementazione di Windows Sockets ha rilevato che il sottosistema di rete non è riuscita.

  • WSAEFAULT   lpOptionValue non è in una parte valida dello spazio degli indirizzi del processo.

  • WSAEINPROGRESS che blocca l'operazione di Windows Sockets è in corso.

  • WSAEINVAL   nLevel non è valido, o le informazioni in lpOptionValue non sono valide.

  • La connessione diWSAENETRESET il timeout quando SO_KEEPALIVE è impostato su.

  • WSAENOPROTOOPT l'opzione è sconosciuto o non supportato.In particolare, SO_BROADCAST non è supportato su socket di tipo SOCK_STREAM, mentre SO_DONTLINGER, SO_KEEPALIVE, SO_LINGERe SO_OOBINLINE non sono supportati sui socket di tipo SOCK_DGRAM.

  • La connessione diWSAENOTCONN è stata reimpostata quando SO_KEEPALIVE è impostato su.

  • WSAENOTSOCK il descrittore non è un socket.

Note

SetSockOpt imposta il valore corrente di un'opzione di socket associata a un socket di qualsiasi tipo, nello stato.Sebbene le opzioni possono esistere a più livelli di protocollo, questa specifica definisce solo le opzioni presenti su "l" livello superiore.Operazioni di socket effetti di opzioni, come se i dati accelerate vengono ricevuti nel flusso di dati normale, se i messaggi trasmessi possono essere inviati su socket, e così via.

Esistono due tipi di opzioni di socket: Booleane opzioni che abilitano o disabilitano una funzionalità o un comportamento e opzioni che richiedono un valore Integer o struttura.Per attivare un'opzione booleani, punti lpOptionValue a un intero diverso da zero.Per disabilitare i punti lpOptionValue di opzione in un Integer uguale a zero.nOptionLen deve essere uguale a sizeof(BOOL) per le opzioni booleane.Per altre opzioni, i punti lpOptionValue all'intero o alla struttura che contiene il valore desiderato per l'opzione e nOptionLen è la lunghezza dell'intero o struttura.

SO_LINGER controlla le azioni eseguite quando i dati non vengono inviati in coda in un socket e la funzione Chiudi viene chiamata per chiudere il socket.

Per impostazione predefinita, un socket non può essere associato (vedere) Associaa un indirizzo locale è già utilizzato.Talvolta, tuttavia, può essere opportuno riutilizzare "" un indirizzo in questo modo.Poiché ogni connessione in modo univoco è identificata dalla combinazione degli indirizzi locali e remoti, non esiste un problema con avere due socket associati allo stesso indirizzo locale finché gli indirizzi remoti sono diversi.

Per notificare all'implementazione Windows Sockets che una chiamata Associa su un socket non deve essere impedita poiché l'indirizzo desiderato è già utilizzato da un altro socket, l'applicazione deve impostare l'opzione di socket SO_REUSEADDR per il socket pubblicare la chiamata Associa.Si noti che l'opzione vengono interpretate solo al momento della chiamata Associa : è pertanto necessario (innocuo ma) impostare l'opzione su un socket che non deve essere associato a un indirizzo esistente e impostare o reimpostare l'opzione dopo la chiamata Associa non ha effetto questa o su qualsiasi altro socket.

Un'applicazione può richiedere che l'implementazione di Windows Sockets attivare l'utilizzo dei package "keep-alive" sulle connessioni (TCP) di protocollo TCP attivando l'opzione di socket SO_KEEPALIVE.Implementazione Windows Sockets non deve supportare l'utilizzo di consente a alives: in caso affermativo, la semantica precisa varia specifica ma deve essere conforme alla sezione 4.2.3.6 dello standard RFC 1122: "Requisiti per gli host Internet — livelli di comunicazione." Se la connessione viene rilasciata come risultato di mantenere "-" alives il codice di errore WSAENETRESET viene restituito a tutte le chiamate corrente su socket e le successive chiamate avranno esito negativo con WSAENOTCONN.

l'opzione TCP_NODELAY disabilita l'algoritmo Nagle.L'algoritmo Nagle viene utilizzato per ridurre il numero di pacchettini inviati da un host la memorizzazione nel buffer sconosciuto invia i dati a un pacchetto 100% non possa essere inviati.Tuttavia, per alcune applicazioni che questo algoritmo è possibile che le prestazioni e TCP_NODELAY può essere utilizzato per disattivarla.Gli autori di applicazioni non devono impostare TCP_NODELAY a meno che l'impatto di questa operazione è ben recepito e desiderato, poiché l'impostazione TCP_NODELAY può avere un notevole impatto negativo sulle prestazioni di rete.TCP_NODELAY è l'unica opzione di socket supportata che utilizza IPPROTO_TCPlivello, le altre opzioni utilizzano SOL_SOCKETlivello.

Alcune implementazioni di informazioni di debug di output per assistere Windows Sockets se l'opzione SO_DEBUG viene impostata da un'applicazione.

Le opzioni seguenti sono supportate per SetSockOpt.Il tipo identifica il tipo di dati indirizzati da lpOptionValue.

Valore

Type

Significato

SO_BROADCAST

BOOL

Consentire la trasmissione dei messaggi trasmessi su socket.

SO_DEBUG

BOOL

Registra informazioni di debug.

SO_DONTLINGER

BOOL

Non blocchi Chiudi in attesa dei dati non inviati da inviare.Impostare questa opzione equivale a impostare SO_LINGER con l_onoff impostato su zero.

SO_DONTROUTE

BOOL

Non si indirizzi: inviare direttamente all'interfaccia.

SO_KEEPALIVE

BOOL

Send consente a alives.

SO_LINGER

la struttura INDUGIA

Infine Chiudi se i dati non vengono inviati.

SO_OOBINLINE

BOOL

Ricevere i dati fuori banda nel flusso di dati normale.

SO_RCVBUF

int

Specificare le dimensioni del buffer per riceve.

SO_REUSEADDR

BOOL

Abilitare il socket da associare a un indirizzo già utilizzato.(Vedere) Associa.

SO_SNDBUF

int

Specificano le dimensioni del buffer per inviare.

TCP_NODELAY

BOOL

Disabilita l'algoritmo Nagle di unione dei pacchetti in invio.

Le opzioni (BSD) di Berkeley Software Distribution di supporto per SetSockOpt sono:

Valore

Type

Significato

SO_ACCEPTCONN

BOOL

Il socket ascoltano

SO_ERROR

int

Ottenere lo stato di errore e deselezionare.

SO_RCVLOWAT

int

Ricevere il limite minimo.

SO_RCVTIMEO

int

Ricevendone l'intervallo

SO_SNDLOWAT

int

Inviare il limite minimo.

SO_SNDTIMEO

int

Inviare l'intervallo.

SO_TYPE

int

Tipo di socket.

IP_OPTIONS

 

Impostare il campo di opzioni di intestazione IP.

Requisiti

Header: afxsock.h

Vedere anche

Riferimenti

Classe di CAsyncSocket

Grafico della gerarchia

CAsyncSocket::AsyncSelect

CAsyncSocket::Bind

CAsyncSocket::Create

CAsyncSocket::GetSockOpt

CAsyncSocket::IOCtl