CAsyncSocket::SetSockOpt

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

Valore restituito

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

Parametri

nOptionName

L'opzione di socket per i quali è necessario impostare il valore.

lpOptionValue

Un puntatore al buffer in cui viene fornito il valore per l'opzione richiesto.

nOptionLen

La dimensione del buffer in byte lpOptionValue.

nLevel

Il livello in cui è definito l'opzione; i livelli supportati soli sono SOL_SOCKET e IPPROTO_TCP.

Osservazioni

Chiamare questa funzione membro per impostare un'opzione di socket. SetSockOpt imposta il valore corrente per un'opzione socket connesso con una presa di qualsiasi tipo, in qualsiasi stato. Anche se le opzioni possono esistere a più livelli di protocollo, questa specifica definisce solo opzioni che esistono a livello superiore "presa". Opzioni influiscono sulle operazioni di presa, ad esempio se dati accelerati sono ricevuti il normale flusso di dati, se la trasmissioni dei messaggi possono essere inviati sul socket e così via.

Ci sono due tipi di opzioni del socket: le opzioni booleane che abilitare o disabilitare una caratteristica o un comportamento e che richiedono un valore integer o struttura. Per attivare un'opzione Boolean, lpOptionValue punta a un valore integer diverso da zero. Per disattivare i punti lpOptionValue opzione a un numero intero pari a zero. nOptionLen deve essere uguale al sizeof(BOOL) per opzioni booleane. Per altre opzioni, lpOptionValue punti al numero intero o struttura che contiene il valore desiderato per l'opzione e nOptionLen è la lunghezza del valore integer o struttura.

SO_LINGER controlla l'azione eseguita quando i dati non inviati viene accodati su un socket e viene chiamata la funzione Chiudi per chiudere la presa. Per ulteriori informazioni, vedere Windows Sockets programmazione considerazioni nella documentazione SDK Win32.

Non per impostazione predefinita, una presa di corrente possono essere associata (vedi Bind) a un indirizzo locale che è già in uso. In alcune occasioni, tuttavia, può essere opportuno "riutilizzo" un indirizzo in questo modo. Poiché ogni connessione è identificato in modo univoco dalla combinazione di indirizzi locali e remoti, non c'è nessun problema con avendo due prese legate allo stesso indirizzo locale, purché gli indirizzi remoti sono diversi.

Per informare l'implementazione di Windows Sockets che una chiamata Bind su un socket non essere rifiutata perché l'indirizzo desiderato è già in uso da un'altra presa, l'applicazione deve impostare l'opzione di socket SO_REUSEADDR per la presa prima di emettere la chiamata Bind . Si noti che l'opzione venga interpretata solo al momento della chiamata Bind : è quindi inutile (ma innocue) per impostare l'opzione su un socket che non deve essere associato a un indirizzo esistente e impostare o reimpostare l'opzione dopo il Bind chiamata ha alcun effetto su questo o qualsiasi presa di corrente.

Un'applicazione può richiedere che l'implementazione di Windows Sockets abilitare l'utilizzo di pacchetti "keep-alive" sulle connessioni Transmission Control Protocol (TCP) attivando l'opzione socket SO_KEEPALIVE . (Per informazioni sui pacchetti "keep-alive", vedere Windows Sockets programmazione considerazioni nella documentazione SDK Win32.) Un'implementazione di Windows Sockets bisogno non supportano l'uso di keep-alive: se lo fa, la semantica precisa sono specifici dell'implementazione, ma dovrebbero essere conformi alla sezione 4.2.3.6 del RFC 1122: "requisiti per gli host Internet — comunicazione strati." Se una connessione è interrotta a causa di "keep-alive" il codice di errore WSAENETRESET viene restituito a tutte le chiamate in corso sul socket e tutte le chiamate successive avranno esito negativo con WSAENOTCONN.

L'opzione TCP_NODELAY disabilita l'algoritmo di Nagle. L'algoritmo di Nagle è utilizzato per ridurre il numero di piccoli pacchetti inviati da una schiera di buffer non riconosciuti invio di dati fino a quando non è possibile inviare un pacchetto full-size. Tuttavia, per alcune applicazioni questo algoritmo può ostacolare le prestazioni, e TCP_NODELAY può essere utilizzato per spegnerlo. Scrittori di applicazione non impostare TCP_NODELAY a meno che l'impatto di fare così è ben conosciuto e desiderato, dato che l'impostazione di TCP_NODELAY può avere un significativo impatto negativo sulle prestazioni di rete. TCP_NODELAY è l'unica supportata opzione socket che utilizza il livello IPPROTO_TCP; tutte le altre opzioni utilizzano livello SOL_SOCKET.

Alcune implementazioni di approvvigionamento di Windows Sockets informazioni di debug in uscita se l'opzione SO_DEBUG è impostata da un'applicazione.

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

Valore Tipo Significato
SO_BROADCAST BOOL Consentire la trasmissione dei messaggi broadcast sul socket.
SO_DEBUG BOOL Record di informazioni di debug.
SO_DONTLINGER BOOL Non bloccare stretta in attesa per i dati non inviati da inviare. Impostando questa opzione equivale all'impostazione SO_LINGER con l_onoff impostato su zero.
SO_DONTROUTE BOOL Non indirizzare: inviare direttamente all'interfaccia.
SO_KEEPALIVE BOOL Inviare keep-alive.
SO_LINGER struct LINGER Soffermarsi sul vicino , se i dati non inviati sono presenti.
SO_OOBINLINE BOOL Ricevere i dati di out-of-band nel flusso di dati normale.
SO_RCVBUF int Specificare la dimensione del buffer per riceve.
SO_REUSEADDR BOOL Consentire il socket vincolato a un indirizzo che è già in uso. (Vedi legare).
SO_SNDBUF int Specificare la dimensione del buffer per Invia.
TCP_NODELAY BOOL Disattiva l'algoritmo Nagle per inviare coalescenza.

Berkeley Software Distribution (BSD) opzioni non supportate per SetSockOpt sono:

Valore Tipo Significato
SO_ACCEPTCONN BOOL Presa è in ascolto
SO_ERROR int Ottenere lo stato di errore e chiaro.
SO_RCVLOWAT int Ricevere il marchio acqua bassa.
SO_RCVTIMEO int Ricevere timeout
SO_SNDLOWAT int Invia low water mark.
SO_SNDTIMEO int Invia timeout.
SO_TYPE int Tipo di socket.
IP_OPTIONS Campo opzioni set nell'intestazione IP.

CAsyncSocket panoramica |nbsp; Membri della classe | Gerarchia Chart

Vedere a&nchenbsp;CAsyncSocket::AsyncSelect, CAsyncSocket::Bind, CAsyncSocket::Create, CAsyncSocket::GetSockOpt, CAsyncSocket::IOCtl

Index