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