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