Sdílet prostřednictvím


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

Viz také

Referenční dokumentace

Třída CAsyncSocket

Graf hierarchie

CAsyncSocket::AsyncSelect

CAsyncSocket::Bind

CAsyncSocket::Create

CAsyncSocket::GetSockOpt

CAsyncSocket::IOCtl