Udostępnij za pośrednictwem


CAsyncSocket::SetSockOpt

Wywołanie tej funkcji Członkowskich ustawić opcję gniazda.

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

Parametry

  • nOptionName
    Opcja gniazda, dla której wartość należy ustawić.

  • lpOptionValue
    Wskaźnik do bufora, w których podano wartość żądanej opcji.

  • nOptionLen
    Rozmiar lpOptionValue buforu w bajtach.

  • nLevel
    Poziom, na którym jest zdefiniowana opcja; tylko poziomy obsługiwane są SOL_SOCKET i IPPROTO_TCP.

Wartość zwracana

Niezerowa, jeśli funkcja jest pomyślne; w przeciwnym razie 0 i kod błędu mogą być pobierane przez wywołanie GetLastError.Do tej funkcji Członkowskich stosuje się następujące błędy:

  • WSANOTINITIALISED pomyślnie AfxSocketInit musi wystąpić przed użyciem tego interfejsu API.

  • WSAENETDOWN implementacja Windows Sockets wykrył, że podsystem sieci nie powiodło się.

  • WSAEFAULT   lpOptionValuenie jest prawidłową część przestrzeni adresowej procesu.

  • WSAEINPROGRESS jest wykonywana operacja blokująca Windows Sockets.

  • WSAEINVAL   nLeveljest nieprawidłowy, lub informacje w lpOptionValue jest nieprawidłowa.

  • WSAENETRESET połączenia został przekroczony podczas SO_KEEPALIVE jest ustawiona.

  • WSAENOPROTOOPT opcji jest nieznany lub nieobsługiwany.W szczególności SO_BROADCAST nie jest obsługiwana na gniazd typu SOCK_STREAM, podczas gdy SO_DONTLINGER, SO_KEEPALIVE, SO_LINGER, i SO_OOBINLINE nie są obsługiwane w gniazdach typu SOCK_DGRAM.

  • WSAENOTCONN połączenie zostało podczas resetowania SO_KEEPALIVE jest ustawiona.

  • WSAENOTSOCK deskryptora nie jest gniazdem.

Uwagi

SetSockOptOkreśla bieżącą wartość opcji gniazda skojarzonych z gniazdem dowolnego typu, w każdym Państwie.Chociaż opcje mogą istnieć na wielu poziomach protokołu, to specyfikacja definiuje tylko opcje, które istnieją na poziomie najwyższym "gniazd".Opcje wpływają na operacje gniazdo, na przykład czy otrzymane przyspieszone dane w strumieniu danych normalnej czy emitowane wiadomości mogą być wysyłane w gnieździe itd.

Istnieją dwa typy opcji gniazda: Boolean opcje włączyć lub wyłączyć funkcję lub zachowanie i opcje, które wymagają struktury lub wartość całkowitą.Aby włączyć opcję Boolean, lpOptionValue wskazuje na niezerową liczbą całkowitą.Aby wyłączyć opcję lpOptionValue wskazuje całkowitą równą zero.nOptionLenpowinna być równa sizeof(BOOL) dla opcji Boolean.Inne opcje lpOptionValue wskazuje całkowitą lub struktury zawierający żądaną wartość dla opcji, a nOptionLen jest długością całkowitą lub struktury.

SO_LINGER kontroli podjętych podczas niewysłany danych znajduje się w kolejce na gnieździe i zamknąć wywoływana jest funkcja zamknąć gniazdo.

Domyślnie nie można powiązać gniazda (zobacz powiązania) do lokalnego adresu, który jest już używany.Czasem jednak może być pożądane "ponowne użycie" adres w ten sposób.Ponieważ każde połączenie jest unikatowo identyfikowana przez połączenie lokalne i zdalne adresy, nie ma problemu z o dwóch gniazdach powiązane z tym samym adresem lokalnym jak zdalne adresy są różne.

Poinformować implementacja Windows Sockets, powiązania wywołania na gnieździe nie powinny niedozwolone, ponieważ żądany adres jest już używany przez innego gniazda, należy ustawić aplikacji SO_REUSEADDR socket opcji dla gniazda przed wydaniem powiązania wywołania.Należy zauważyć, że opcja jest interpretowane tylko w czasie powiązania wywołania: jest konieczne (ale nieszkodliwe) ustawić opcję na gnieździe, który nie jest powiązany z istniejącego adresu i ustawienie lub Resetowanie opcji po powiązania wywołanie ma wpływu na to lub inne gniazdo.

Aplikacja może zażądać, że implementacja Windows Sockets umożliwiają stosowanie "keep-alive" pakietów przez połączenia protokołu TCP (Transmission Control), włączając SO_KEEPALIVE socket opcji.Implementacja Windows Sockets muszą obsługuje użycie keep-alives: Jeśli tak, dokładne semantykę są specyficzne dla implementacji, ale powinny być zgodne z RFC 1122 sekcji 4.2.3.6: "Requirements for Internet Hosts — warstwy komunikacji." Jeśli połączenie zostało porzucone w wyniku "keep-alives" kod błędu WSAENETRESET jest zwracana do wywołania w toku dla gniazda, oraz wszelkie kolejne wywołania nie powiedzie się z WSAENOTCONN.

TCP_NODELAY opcja wyłącza algorytm Nagle'a.Algorytm Nagle'a jest używana do zmniejszenia liczby małe pakiety wysyłane przez hosta przez buforowanie niepotwierdzonych wysyłać dane do pełnowymiarowego pakietów, które mogą być wysyłane.Jednakże dla niektórych aplikacji algorytm ten może utrudniać wydajność, i TCP_NODELAY można go wyłączyć.Nie należy ustawiać autorzy aplikacji TCP_NODELAY chyba, że wpływ tej czynności jest przejrzyste i pożądane, ponieważ ustawienie TCP_NODELAY mogą mieć znaczący negatywny wpływ na wydajność sieci.TCP_NODELAY to jedyna obsługiwana opcja socket, która wykorzystuje poziom IPPROTO_TCP; inne opcje używany poziom SOL_SOCKET.

Niektóre implementacje dostaw Windows Sockets wyjściowe informacje debugowania, jeśli SO_DEBUG opcja jest ustawiona przez aplikację.

Następujące opcje są obsługiwane dla SetSockOpt.Typ identyfikuje typ danych przez lpOptionValue.

Wartość

Typ

Znaczenie

SO_BROADCAST

BOOL

Zezwalaj na przekazywanie wiadomości emisji w gnieździe.

SO_DEBUG

BOOL

Rekord informacji debugowania.

SO_DONTLINGER

BOOL

Nie należy blokować Zamknij oczekiwania na niewysłane dane przesyłane.Ustawienie tej opcji jest równoważne ustawieniu SO_LINGER z l_onoff na zero.

SO_DONTROUTE

BOOL

Nie route: Wyślij bezpośrednio do interfejsu.

SO_KEEPALIVE

BOOL

Wyślij keep-alives.

SO_LINGER

struct LINGER

Utrzymywać się Zamknij Jeśli niewysłany danych jest obecny.

SO_OOBINLINE

BOOL

Odbierać danych-band w strumieniu danych normalnego.

SO_RCVBUF

int

Określ rozmiar buforu dla odbiera.

SO_REUSEADDR

BOOL

Zezwalaj na gniazdo powiązać adresu, który jest już używany.(See Bind.)

SO_SNDBUF

int

Określ rozmiar buforu dla wysyła.

TCP_NODELAY

BOOL

Wyłącza wysyłanie odbiorczego algorytm Nagle'a.

Opcje / Hosts systemu nie jest obsługiwane dla SetSockOpt są:

Wartość

Typ

Znaczenie

SO_ACCEPTCONN

BOOL

Gniazdo prowadzi nasłuch.

SO_ERROR

int

Pobierz stan błędu i wyczyść.

SO_RCVLOWAT

int

Otrzymywać znaku niskiej wody.

SO_RCVTIMEO

int

Limit czasu odbierania

SO_SNDLOWAT

int

Wyślij znaku niskiej wody.

SO_SNDTIMEO

int

Limit czasu wysyłania.

SO_TYPE

int

Typ gniazda.

IP_OPTIONS

 

Ustaw opcje pola w nagłówku IP.

Wymagania

Nagłówek: afxsock.h

Zobacz też

Informacje

Klasa CAsyncSocket

Wykres hierarchii

CAsyncSocket::AsyncSelect

CAsyncSocket::Bind

CAsyncSocket::Create

CAsyncSocket::GetSockOpt

CAsyncSocket::IOCtl