CAsyncSocket::SetSockOpt
Volání funkce tohoto člena k nastavení možností soketu.
BOOL SetSockOpt(
int nOptionName,
const void* lpOptionValue,
int nOptionLen,
int nLevel = SOL_SOCKET
);
Parametry
nOptionName
Možnost soketu, pro které má být nastavena hodnota.lpOptionValue
Ukazatel do vyrovnávací paměti, ve kterém je zadána hodnota pro požadovanou možnost.nOptionLen
Velikost lpOptionValue vyrovnávací paměti v bajtech.nLevel
Úroveň, při které je definována možnost; pouze podporované úrovně jsou SOL_SOCKET a IPPROTO_TCP.
Vrácená hodnota
Nenulová hodnota, pokud je tato funkce úspěšná. jinak 0 a kód chyby může být načten voláním GetLastError.Tato funkce člena vztahuje následující chyby:
WSANOTINITIALISED úspěšné AfxSocketInit musí dojít před použitím tohoto rozhraní API.
WSAENETDOWN implementace rozhraní Windows Sockets zjistil, že selhání síťového podsystému.
WSAEFAULT lpOptionValuenení platný část adresního prostoru procesu.
WSAEINPROGRESS právě probíhá blokující operace rozhraní Windows Sockets.
WSAEINVAL nLevelnení platný, nebo v lpOptionValue není platný.
WSAENETRESET připojení vypršel při SO_KEEPALIVE je nastavena.
WSAENOPROTOOPT možnost je neznámý nebo nepodporovaný.Zejména SO_BROADCAST není podporována na soketech typu SOCK_STREAM, zatímco SO_DONTLINGER, SO_KEEPALIVE, SO_LINGER, a SO_OOBINLINE nejsou podporovány na soketech typu SOCK_DGRAM.
WSAENOTCONN bylo připojení obnovit při SO_KEEPALIVE je nastavena.
WSAENOTSOCK popisovač není soket.
Poznámky
SetSockOptNastaví aktuální hodnotu možnosti přidružený k soketu libovolného typu v kterémkoli státě soketu.Ačkoli možnosti mohou existovat na více úrovních protokol, tato specifikace definuje pouze možnosti, které existují na úrovni nejvyšší "soketu".Možnosti ovlivňují operace soketu, například zda je přijata spěšná data přijata v normální datového proudu, zda vysílané zprávy mohou být odeslány na soketu atd.
Existují dva typy možností soketu: Boolean možnosti povolit nebo zakázat funkci nebo chování a možnosti, které vyžadují celočíselnou hodnotu nebo struktury aplikace.Povolit logická možnost lpOptionValue odkazuje na nenulovou celočíselnou.Chcete-li zakázat možnost lpOptionValue odkazuje na celé číslo rovno nule.nOptionLenby měla být rovna sizeof(BOOL) pro logické možnosti.Další možnosti lpOptionValue odkazuje na celé číslo nebo struktura, která obsahuje požadovanou hodnotu pro volbu, a nOptionLen je délka celé číslo nebo struktury.
SO_LINGER opatřeních při neodeslané dat je ve frontě na soketu ovládací prvky a Zavřít je funkce volána zavřít soket.
Ve výchozím nastavení nemůže být vázán k soketu (viz Bind) na místní adresu, která je již používán.V některých případech však může být žádoucí "znovu" adresu tímto způsobem.Od každého připojení je jednoznačně určen kombinací místní a vzdálené adresy, není žádný problém se s dvěma sockets vázány na stejnou adresu místní vzdálené adresy jsou různé.
Informovat implementace rozhraní Windows Sockets, Bind volání na soketu nesmí být povolen, protože požadovaná adresa již používá jiný soket, aplikace by měly hodnotu SO_REUSEADDR soketu možnost soketu před vydáním Bind volání.Všimněte si, že možnost je interpretováno pouze v době vázat volání: je proto zbytečné (ale neškodné) nastavení možnosti soketu, který není vázán na stávající adresu a nastavení, nebo možnost po obnovení vázat volání má vliv na tento nebo jiný soket.
Aplikace si může vyžádat, aby implementace rozhraní Windows Sockets povolit použití "keep-alive pakety protokolu TCP (Transmission Control) připojení zapnutím SO_KEEPALIVE možnost soketu.Implementace rozhraní Windows Sockets nemusí podporovat používání udržování: Pokud ano, jsou specifické pro implementaci Přesná sémantika, ale by měly odpovídat části 4.2.3.6 RFC 1122: "Requirements for Internet Hosts – vrstvy komunikace." Ztracené připojení jako výsledek "udržování" kód chyby WSAENETRESET je vrácena v průběhu volání na soketu, a následné volání se nezdaří s WSAENOTCONN.
TCP_NODELAY možnost zakáže algoritmus Nagle.Algoritmus Nagle lze snížit počet malých paketů odeslaný ve vyrovnávací paměti odesílání nepotvrzených dat až do plné velikosti paketu lze odeslat.Pro některé aplikace však tento algoritmus může bránit výkonu, a TCP_NODELAY lze vypnout.Neměla nastavena aplikací TCP_NODELAY není dopad tím well-understood a potřeby nastavení od TCP_NODELAY mohou mít významný negativní dopad na výkon sítě.TCP_NODELAY je jediná podporovaná možnost soketu, který používá úroveň IPPROTO_TCP; Další možnosti použít úroveň SOL_SOCKET.
Některé implementace rozhraní Windows Sockets zásobování výstup ladicích informací, pokud SO_DEBUG je možnost nastavena aplikací.
Jsou podporovány následující možnosti pro SetSockOpt .Typ určuje typ dat, které jsou adresovány lpOptionValue .
Value |
Type |
Význam |
---|---|---|
SO_BROADCAST |
BOOL |
Povolte přenos zpráv všesměrového vysílání na soketu. |
SO_DEBUG |
BOOL |
Záznam ladicí informace. |
SO_DONTLINGER |
BOOL |
Nechcete blokovat Zavřít čeká na odeslání neodeslaných dat.Nastavení této možnosti je ekvivalentní nastavení SO_LINGER s l_onoff nastaven na nulu. |
SO_DONTROUTE |
BOOL |
Není směrovat: odeslat přímo na rozhraní. |
SO_KEEPALIVE |
BOOL |
Udržování odešlete. |
SO_LINGER |
Struktura LINGER |
Prohlížet Zavřít Pokud neodeslané zprávy je k dispozici data. |
SO_OOBINLINE |
BOOL |
Přijímat out-of-band data v normální datový proud. |
ASYNCHRONNÍ |
int |
Určete velikost vyrovnávací paměti pro obdrží. |
SO_REUSEADDR |
BOOL |
Povolte soketu vázat na adresu, která je již používán.(See Bind.) |
SO_SNDBUF |
int |
Určete velikost vyrovnávací paměti pro odesílání. |
TCP_NODELAY |
BOOL |
Zakáže Nagle algoritmus pro odesílání coalescing. |
Možnosti Berkeley Software Distribution (BSD) není podporováno pro SetSockOpt jsou:
Value |
Type |
Význam |
---|---|---|
SO_ACCEPTCONN |
BOOL |
Je naslouchání soketu |
SO_ERROR |
int |
Získat stav chyby a zrušte. |
SO_RCVLOWAT |
int |
Zobrazit značku málo vody. |
SO_RCVTIMEO |
int |
Časový limit pro příjem |
SO_SNDLOWAT |
int |
Odešlete značka málo vody. |
SO_SNDTIMEO |
int |
Časový limit odeslání. |
SO_TYPE |
int |
Typ soketu. |
IP_OPTIONS |
|
Nastavte možnosti pole v hlavičce protokolu IP. |
Požadavky
Záhlaví: afxsock.h