TCP
Ten moduł zawiera funkcje sterujące komunikacją TCP.
Podsumowanie
Wyliczenia |
|
---|---|
anonymous enum
|
enum | typ wyliczeniowy Definiuje flagi przekazane do otTcpConnect(). |
anonymous enum
|
enum | typ wyliczeniowy Definiuje flagi przekazane do otTcpSendByReference . |
otTcpDisconnectedReason
|
enum | typ wyliczeniowy |
otTcpIncomingConnectionAction{
|
enum | typ wyliczeniowy Definiuje działania dotyczące połączeń przychodzących. |
Definicje typów |
|
---|---|
otLinkedBuffer
|
typedefstruct otLinkedBuffer
Połączona struktura bufora do użycia z TCP. |
otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer)
|
typedefvoid(*
To wywołanie zwrotne wskazuje, że połączenie TCP jest teraz gotowe do komunikacji dwukierunkowej. |
otTcpAcceptReady)(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto)
|
typedef To wywołanie zwrotne oznacza, że dotarło połączenie przychodzące zgodne z tym detektorem TCP. |
otTcpDisconnected)(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason)
|
typedefvoid(*
To wywołanie zwrotne wskazuje, że połączenie zostało przerwane i nie powinno być dalej używane lub że połączenie jest w stanie TIME-WAIT. |
otTcpDisconnectedReason
|
typedefenum otTcpDisconnectedReason
|
otTcpEndpoint
|
typedefstruct otTcpEndpoint
|
otTcpEndpointInitializeArgs
|
typedefstruct otTcpEndpointInitializeArgs
Zawiera argumenty funkcji otTcpEndpointInitialize(). |
otTcpEstablished)(otTcpEndpoint *aEndpoint)
|
typedefvoid(*
To wywołanie zwrotne informuje aplikację, że trójkanałowe uzgadnianie połączenia TCP zostało zakończone i że połączenie zostało nawiązane. |
otTcpForwardProgress)(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog)
|
typedefvoid(*
To wywołanie zwrotne informuje aplikację o postępach w przesyłaniu danych z bufora wysyłania do odbiorcy. |
otTcpIncomingConnectionAction
|
typedef Definiuje działania dotyczące połączeń przychodzących. |
otTcpListener
|
typedefstruct otTcpListener
|
otTcpListenerInitializeArgs
|
typedefstruct otTcpListenerInitializeArgs
Zawiera argumenty funkcji otTcpListenerInitialize(). |
otTcpReceiveAvailable)(otTcpEndpoint *aEndpoint, size_t aBytesAvailable, bool aEndOfStream, size_t aBytesRemaining)
|
typedefvoid(*
To wywołanie zwrotne wskazuje liczbę bajtów dostępnych do wykorzystania z bufora odbierania. |
otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData)
|
typedefvoid(*
To wywołanie zwrotne informuje aplikację, że dane w podanym elemencie aData zostały potwierdzone przez peer-to-peer połączenia, a aplikacja aData i zawarte w niej dane mogą zostać odzyskane przez aplikację. |
Funkcje |
|
---|---|
otTcpAbort(otTcpEndpoint *aEndpoint)
|
Wymuszone zakończenie połączenia TCP powiązanego z tym punktem końcowym TCP.
|
otTcpBind(otTcpEndpoint *aEndpoint, const otSockAddr *aSockName)
|
Wiąże punkt końcowy TCP z adresem IP i portem.
|
otTcpCommitReceive(otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags)
|
Informuje stos TCP, że aplikacja zakończyła przetwarzanie
aNumBytes bajtów danych na początku bufora odbierania i że stos TCP nie musi kontynuować utrzymywania tych bajtów w buforze odbierania. |
otTcpConnect(otTcpEndpoint *aEndpoint, const otSockAddr *aSockName, uint32_t aFlags)
|
Rejestruje hosta zdalnego i port dla tego połączenia.
|
otTcpEndpointDeinitialize(otTcpEndpoint *aEndpoint)
|
Deinicjuje ten punkt końcowy TCP.
|
otTcpEndpointGetContext(otTcpEndpoint *aEndpoint)
|
void *
Uzyskuje wskaźnik kontekstu, który był powiązany z elementem
aEndpoint podczas inicjowania. |
otTcpEndpointGetInstance(otTcpEndpoint *aEndpoint)
|
Podczas inicjowania pobiera instancję otInstance, która była powiązana z
aEndpoint . |
otTcpEndpointInitialize(otInstance *aInstance, otTcpEndpoint *aEndpoint, const otTcpEndpointInitializeArgs *aArgs)
|
Inicjuje punkt końcowy TCP.
|
otTcpGetLocalAddress(const otTcpEndpoint *aEndpoint)
|
const otSockAddr *
Uzyskuje wskaźnik do lokalnego hosta i portu punktu końcowego TCP.
|
otTcpGetPeerAddress(const otTcpEndpoint *aEndpoint)
|
const otSockAddr *
Uzyskuje wskaźnik do hosta i portu peera w punkcie końcowym TCP.
|
otTcpListen(otTcpListener *aListener, const otSockAddr *aSockName)
|
Powoduje, że przychodzące połączenia TCP pasujące do określonego adresu IP i portu aktywują wywołania zwrotne tego detektora TCP.
|
otTcpListenerDeinitialize(otTcpListener *aListener)
|
Deinicjuje ten detektor TCP.
|
otTcpListenerGetContext(otTcpListener *aListener)
|
void *
Uzyskuje wskaźnik kontekstu, który był powiązany z elementem
aListener podczas inicjowania. |
otTcpListenerGetInstance(otTcpListener *aListener)
|
Podczas inicjowania pobiera instancję otInstance, która była powiązana z
aListener . |
otTcpListenerInitialize(otInstance *aInstance, otTcpListener *aListener, const otTcpListenerInitializeArgs *aArgs)
|
Inicjuje detektor TCP.
|
otTcpReceiveByReference(otTcpEndpoint *aEndpoint, const otLinkedBuffer **aBuffer)
|
Udostępnia aplikację z połączonym łańcuchem bufora odwołującym się do danych, które obecnie znajdują się w buforze odbierania TCP.
|
otTcpReceiveContiguify(otTcpEndpoint *aEndpoint)
|
Zmienia organizację bufora odbierania tak, aby był całkowicie przyległy w pamięci.
|
otTcpSendByExtension(otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags)
|
Dodaje dane do bufora wysyłania, zwiększając długość ostatecznej wartości parametru otLinkedBuffer w buforze wysyłania o określoną ilość.
|
otTcpSendByReference(otTcpEndpoint *aEndpoint, otLinkedBuffer *aBuffer, uint32_t aFlags)
|
Dodaje do bufora wysyłania dane, do których odwołuje się połączony bufor wskazywany przez
aBuffer . |
otTcpSendEndOfStream(otTcpEndpoint *aEndpoint)
|
Informacja dla peera połączenia, że ten punkt końcowy TCP nie wyśle więcej danych.
|
otTcpStopListening(otTcpListener *aListener)
|
Powoduje, że ten detektor TCP przestaje nasłuchiwać połączeń przychodzących.
|
Konstrukcja |
|
---|---|
otLinkedBuffer |
Połączona struktura bufora do użycia z TCP. |
otTcpEndpoint |
Reprezentuje punkt końcowy TCP. |
otTcpEndpointInitializeArgs |
Zawiera argumenty funkcji otTcpEndpointInitialize(). |
otTcpListener |
Reprezentuje detektor TCP. |
otTcpListenerInitializeArgs |
Zawiera argumenty funkcji otTcpListenerInitialize(). |
Wyliczenia
anonimowe wyliczenie
anonymous enum
Definiuje flagi przekazane do otTcpSendByReference
.
otTcpDisconnectedReason
otTcpDisconnectedReason
otTcpIncomingConnectionAction
otTcpIncomingConnectionAction
Definiuje działania dotyczące połączeń przychodzących.
Jest to używane w wywołaniu zwrotnym otTcpAcceptReady().
Właściwości | |
---|---|
OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT
|
Zaakceptuj połączenie przychodzące. |
OT_TCP_INCOMING_CONNECTION_ACTION_DEFER
|
Odrocz (cicho ignoruj) połączenie przychodzące. |
OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE
|
Odrzuć połączenie przychodzące. |
Definicje typów
otLinkedBuffer
struct otLinkedBuffer otLinkedBuffer
Połączona struktura bufora do użycia z TCP.
Pojedyncza struktura otLinkedBuffer odwołuje się do tablicy bajtów w pamięci za pomocą elementów mData i mLength. Pole mNext służy do utworzenia łańcucha struktur otLinkedBuffer.
otTcpAcceptDone
void(* otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer)
To wywołanie zwrotne wskazuje, że połączenie TCP jest teraz gotowe do komunikacji dwukierunkowej.
W przypadku szybkiego uruchamiania TCP przy użyciu funkcji szybkiego uruchamiania może to nastąpić jeszcze zanim uzgadnianie połączenia TCP faktycznie się zakończyło. Aplikacja jest dostarczana ze wskaźnikami kontekstu zarówno dla detektora TCP, który zaakceptował połączenie, jak i punktu końcowego TCP, w którym zostało ono zaakceptowane. Podany kontekst jest powiązany z detektorem TCP.
Szczegóły | |||||||
---|---|---|---|---|---|---|---|
Parametry |
|
otTcpAcceptReady
otTcpIncomingConnectionAction(* otTcpAcceptReady)(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto)
To wywołanie zwrotne oznacza, że dotarło połączenie przychodzące zgodne z tym detektorem TCP.
Typowa odpowiedź to zaakceptowanie przez aplikację połączenia przychodzącego. Aby to zrobić, wypełnia aAcceptInto
wskaźnikiem punktu otTcpEndpoint, który ma zaakceptować połączenie przychodzące. Ten obiekt otTcpEndpoint musi być już zainicjowany przy użyciu funkcji otTcpEndpointInitialize(). Następnie aplikacja zwraca OT_TCP_INCOMING_CONNECTION_ACTION_APPLICATION.
Aplikacja może też odmówić przyjęcia połączenia przychodzącego. Aplikacja może to robić na 2 sposoby. Po pierwsze, jeśli aplikacja zwraca OT_TCP_INCOMING_CONNECTION_ACTION_DEFER, OpenThread dyskretnie ignoruje żądanie nawiązania połączenia. peer połączenia prawdopodobnie ponownie prześle żądanie, kiedy to wywołanie zwrotne zostanie wykonane jeszcze raz. Jest to przydatne, gdy zasoby nie są obecnie dostępne do akceptowania połączenia, ale mogą być dostępne, gdy peer ponownie prześle próbę nawiązania połączenia. Po drugie, jeśli aplikacja zwraca OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE, OpenThread wysyła komunikat o odmowie połączenia do hosta, który próbował nawiązać połączenie. Jeśli aplikacja odrzuci połączenie przychodzące, nie musisz wypełniać pola aAcceptInto
.
Szczegóły | |||||||
---|---|---|---|---|---|---|---|
Parametry |
|
||||||
Zwroty |
Opis sposobu obsługi połączenia przychodzącego.
|
otTcpDisconnected
void(* otTcpDisconnected)(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason)
To wywołanie zwrotne wskazuje, że połączenie zostało przerwane i nie powinno być dalej używane lub że połączenie jest w stanie TIME-WAIT.
Może się tak zdarzyć w sytuacji, gdy próba nawiązania połączenia (zainicjowana przez wywołanie metody otTcpConnect()) nie powiedzie się lub w dowolnym momencie po jej wystąpieniu (na przykład w przypadku przekroczenia limitu czasu połączenia lub odebrania segmentu RST z peera połączenia). Po uruchomieniu tego wywołania zwrotnego wszystkie zasoby udostępnione przez aplikację na potrzeby tego połączenia (tj. dowolne otLinkedBuffers
i pamięć, do których się odwołuje, ale nie sam punkt końcowy TCP ani miejsce na bufory odbierania) mogą zostać odzyskane. Jeśli połączenie jest w stanie TIME-WAIT, wywołanie zwrotne jest wywoływane dwukrotnie: raz po wejściu w stan TIME-WAIT (z OT_TCP_DISCONNECTED_REASON_TIME_WAIT i ponownie po wygaśnięciu stanu TIME-WAIT (z uwzględnieniem OT_TCP_DISCONNECTED_REASON_NORMAL).
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
otTcpDisconnectedReason
enum otTcpDisconnectedReason otTcpDisconnectedReason
otTcpEndpoint
struct otTcpEndpoint otTcpEndpoint
otTcpEndpointInitializeArgs
struct otTcpEndpointInitializeArgs otTcpEndpointInitializeArgs
Zawiera argumenty funkcji otTcpEndpointInitialize().
otTcpEstablished
void(* otTcpEstablished)(otTcpEndpoint *aEndpoint)
To wywołanie zwrotne informuje aplikację, że trójkanałowe uzgadnianie połączenia TCP zostało zakończone i że połączenie zostało nawiązane.
Szczegóły | |||
---|---|---|---|
Parametry |
|
otTcpForwardProgress
void(* otTcpForwardProgress)(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog)
To wywołanie zwrotne informuje aplikację o postępach w przesyłaniu danych z bufora wysyłania do odbiorcy.
To wywołanie zwrotne nie jest konieczne do prawidłowej operacji TCP. Większość aplikacji może po prostu polegać na wywołaniu zwrotnym otTcpSendDone() w celu odzyskania połączonych buforów, gdy stos TCP zakończy korzystanie z nich. Wywołanie zwrotne ma na celu obsługę zaawansowanych aplikacji, które korzystają ze szczegółowych informacji o postępie przesyłania danych przez połączenie do peera.
Operacja tego wywołania zwrotnego jest ściśle powiązana z buforem wysyłania TCP. Bufor wysyłania można zdefiniować jako mając 2 regiony. Pierwszy z nich znajduje się w nagłówku (z przodu) bufora wysyłania. Odnosi się do danych, które zostały wysłane do odbiorcy, ale nie zostały jeszcze potwierdzone. Po drugie, istnieje region „backlog”, który zawiera wszystkie dane z bufora wysyłania, których nie ma w regionie „w trakcie przesyłania”. Region „zaległości” odpowiada danym, które znajdują się w kolejce do wysłania, ale nie zostały jeszcze wysłane.
Wywołanie zwrotne jest wywoływane w odpowiedzi na 2 rodzaje zdarzeń. Po pierwsze, „podczas przesyłania” region bufora wysyłania może się zmniejszyć (na przykład gdy odbiorca potwierdzi, że otrzymaliśmy dane, które wysłaliśmy wcześniej). Po drugie, obszar „zaległości” bufora wysyłania może się zmniejszyć (np. że wysłano nowe dane). Te 2 warunki często występują jednocześnie w odpowiedzi na segment potwierdzenia z połączenia równorzędnego, dlatego są one łączone w 1 wywołanie zwrotne.
Stos TCP wykorzystuje tylko bajty aInSendBuffer
znajdujące się na końcu bufora wysyłania. Gdy aInSendBuffer
zmniejsza się o wartość x, oznacza to, że dodatkowe bajty (x), które wcześniej znajdowały się w nagłówku bufora wysyłania, nie są już częścią bufora wysyłania i mogą zostać odzyskane (czyli zastąpione) przez aplikację. Pamiętaj, że strukturę otLinkedBuffer można odzyskać dopiero wtedy, gdy wszystkie bajty, do których się ona odnosi, nie będą już częścią bufora wysyłania.
Wywołanie zwrotne zawiera metodę otTcpSendDone() w tym sensie: aplikacje mogą określić, kiedy połączone bufory mogą zostać odzyskane, porównując aInSendBuffer
z liczbą bajtów w każdym połączonym buforze. Spodziewamy się jednak, że funkcja otTcpSendDone(), która bezpośrednio informuje, które elementy otLinkedBuffers można odzyskać, będzie znacznie prostsza w użyciu. Jeśli oba wywołania zwrotne są zarejestrowane i wywoływane przez to samo zdarzenie (np. odebrano ten sam segment potwierdzenia), najpierw wywoływane jest wywołanie zwrotne otTcpSendDone(), a po nim to wywołanie zwrotne.
Dodatkowo to wywołanie zwrotne udostępnia wartość aBacklog
, która wskazuje, ile bajtów danych w buforze wysyłania nie zostało jeszcze przesłanych. W przypadku aplikacji, które chcą dodawać dane do bufora wysyłania tylko wtedy, gdy istnieje pewność, że zostaną one wkrótce wysłane, korzystne może być wysyłanie danych tylko wtedy, gdy parametr aBacklog
jest odpowiednio mały (0 lub bliski 0). Na przykład aplikacja może korzystać z funkcji aBacklog
, aby reagować na tworzenie kolejki przez usuwanie lub agregację danych w celu uniknięcia tworzenia zaległości danych.
Po wywołaniu funkcji otTcpSendByReference() lub otTcpSendByExtension() z dodatnią liczbą bajtów wywołanie zwrotne otTcpForwardProgress() jest gwarantowane, wskazując, kiedy bajty dodane do bufora wysyłania są wysyłane. Wywołanie funkcji otTcpForwardProgress() może zostać wykonane natychmiast po dodaniu bajtów do bufora wysyłania (jeśli niektóre z tych bajtów zostaną wysłane natychmiast, co zmniejsza zaległości) lub w przyszłości (gdy połączenie wyśle część lub wszystkie dane, co zmniejszy zaległości). „natychmiast” oznacza to, że wywołanie zwrotne jest od razu zaplanowane do wykonania w plecie zadań. Aby uniknąć złożoności związanej z powtórzeniem, wywołanie zwrotne otTcpForwardProgress() nigdy nie jest wywoływane bezpośrednio przez funkcje otTcpSendByReference() ani otTcpSendByExtension().
Szczegóły | |||||||
---|---|---|---|---|---|---|---|
Parametry |
|
otTcpIncomingConnectionAction
enum otTcpIncomingConnectionAction otTcpIncomingConnectionAction
Definiuje działania dotyczące połączeń przychodzących.
Jest to używane w wywołaniu zwrotnym otTcpAcceptReady().
otTcpListener
struct otTcpListener otTcpListener
otTcpListenerInitializeArgs
struct otTcpListenerInitializeArgs otTcpListenerInitializeArgs
Zawiera argumenty funkcji otTcpListenerInitialize().
otTcpReceiveAvailable
void(* otTcpReceiveAvailable)(otTcpEndpoint *aEndpoint, size_t aBytesAvailable, bool aEndOfStream, size_t aBytesRemaining)
To wywołanie zwrotne wskazuje liczbę bajtów dostępnych do wykorzystania z bufora odbierania.
Jest ona wywoływana za każdym razem, gdy bajty zostaną dodane do bufora odbierania oraz po osiągnięciu końca strumienia. Jeśli osiągnięto koniec strumienia (tzn. jeśli nie będzie można odczytać więcej danych, ponieważ peer połączenia zamknął swoje zakończenie połączenia na potrzeby zapisu), to pole aEndOfStream
ma wartość prawda. Na koniec aBytesRemaining
wskazuje, ile miejsca w buforze odbioru pozostało na przechowywanie dodatkowych danych.
Szczegóły | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parametry |
|
otTcpSendDone
void(* otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData)
To wywołanie zwrotne informuje aplikację, że dane w podanym elemencie aData
zostały potwierdzone przez peer-to-peer połączenia, a aplikacja aData
i zawarte w niej dane mogą zostać odzyskane przez aplikację.
Gwarantujemy, że aData
będą identyczne z tymi przekazywanymi do TCP przez otTcpSendByReference(), w tym ze wszystkimi rozszerzeniami wywoływanymi przez otTcpSendByExtension().
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
Funkcje
otTcpAbort
otError otTcpAbort( otTcpEndpoint *aEndpoint )
Wymuszone zakończenie połączenia TCP powiązanego z tym punktem końcowym TCP.
Powoduje to natychmiastowe uwolnienie punktu końcowego TCP do innego połączenia i opróżnia bufory wysyłania i odbierania danych, przenosząc własność wszystkich danych dostarczanych przez aplikację w metodach otTcpSendByReference() oraz otTcpSendByExtension() w wywołaniach z powrotem do aplikacji. Wywołania zwrotne punktu końcowego TCP i pamięć dla bufora odbierania pozostają powiązane z punktem końcowym TCP.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
otTcpBind
otError otTcpBind( otTcpEndpoint *aEndpoint, const otSockAddr *aSockName )
Wiąże punkt końcowy TCP z adresem IP i portem.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
otTcpCommitReceive
otError otTcpCommitReceive( otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags )
Informuje stos TCP, że aplikacja zakończyła przetwarzanie aNumBytes
bajtów danych na początku bufora odbierania i że stos TCP nie musi kontynuować utrzymywania tych bajtów w buforze odbierania.
Szczegóły | |||||||
---|---|---|---|---|---|---|---|
Parametry |
|
||||||
Zwracane wartości |
|
otTcpConnect
otError otTcpConnect( otTcpEndpoint *aEndpoint, const otSockAddr *aSockName, uint32_t aFlags )
Rejestruje hosta zdalnego i port dla tego połączenia.
Szybkie otwieranie TCP musi być włączone lub wyłączone za pomocą aFlags
. Jeśli jest wyłączona, uzgadnianie połączenia TCP jest natychmiast inicjowane. Jeśli jest włączona, ta funkcja rejestruje jedynie hosta zdalnego i port zdalny, a uzgadnianie połączenia TCP nawiązania połączenia odbywa się tylko podczas pierwszego wywołania otTcpSendByReference()
.
Jeśli szybkie otwieranie TCP jest wyłączone, wywołujący musi poczekać na wywołanie zwrotne otTcpEstablished
wskazujące, że uzgadnianie połączenia TCP zostało nawiązane, zanim będzie mógł zacząć wysyłać dane, na przykład wywołując otTcpSendByReference()
.
Szczegóły | |||||||
---|---|---|---|---|---|---|---|
Parametry |
|
||||||
Zwracane wartości |
|
otTcpEndpointDeinitialize
otError otTcpEndpointDeinitialize( otTcpEndpoint *aEndpoint )
Deinicjuje ten punkt końcowy TCP.
Oznacza to, że OpenThread nie śledzi już tego punktu końcowego TCP i cofa wszystkie zasoby przydzielone wewnętrznie dla tego punktu końcowego TCP. Aplikacja może ponownie wykorzystać pamięć, która bazuje na punkcie końcowym TCP, jeśli uzna to za stosowne.
Jeśli odpowiada to aktywnemu połączeniu TCP, połączenie jest bezceremonizowane (tak jak w przypadku otTcpAbort()). Wszystkie zasoby udostępnione przez aplikację dla tego punktu końcowego TCP (połączone bufory dla bufora wysyłania, pamięć dla bufora odbierania, sama struktura aEndpoint
itp.) są natychmiast zwracane do aplikacji.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
otTcpEndpointGetContext
void * otTcpEndpointGetContext( otTcpEndpoint *aEndpoint )
Uzyskuje wskaźnik kontekstu, który był powiązany z elementem aEndpoint
podczas inicjowania.
Szczegóły | |||
---|---|---|---|
Parametry |
|
||
Zwroty |
Wskaźnik kontekstu powiązany z elementem
aEndpoint . |
otTcpEndpointGetInstance
otInstance * otTcpEndpointGetInstance( otTcpEndpoint *aEndpoint )
Podczas inicjowania pobiera instancję otInstance, która była powiązana z aEndpoint
.
Szczegóły | |||
---|---|---|---|
Parametry |
|
||
Zwroty |
Wskaźnik otInstance powiązany z
aEndpoint . |
otTcpEndpointInitialize
otError otTcpEndpointInitialize( otInstance *aInstance, otTcpEndpoint *aEndpoint, const otTcpEndpointInitializeArgs *aArgs )
Inicjuje punkt końcowy TCP.
Wywołanie tej funkcji powoduje, że OpenThread śledzi punkt końcowy TCP oraz przechowuje i pobiera dane TCP w elemencie aEndpoint
. Aplikacja nie powinna uzyskiwać bezpośredniego dostępu do pól w aEndpoint
ani modyfikować tych pól. Jeśli aplikacja musi odzyskać bazę danych aEndpoint
, powinna wywołać funkcję otTcpEndpointDeinitialize().
Szczegóły | |||||||
---|---|---|---|---|---|---|---|
Parametry |
|
||||||
Zwracane wartości |
|
otTcpGetLocalAddress
const otSockAddr * otTcpGetLocalAddress( const otTcpEndpoint *aEndpoint )
Uzyskuje wskaźnik do lokalnego hosta i portu punktu końcowego TCP.
Zawartość hosta i portu może być nieaktualna, jeśli to gniazdo nie jest w stanie połączenia i nie było powiązane po ostatnim odłączeniu.
Szczegóły | |||
---|---|---|---|
Parametry |
|
||
Zwroty |
Lokalny host i port
aEndpoint . |
otTcpGetPeerAddress
const otSockAddr * otTcpGetPeerAddress( const otTcpEndpoint *aEndpoint )
Uzyskuje wskaźnik do hosta i portu peera w punkcie końcowym TCP.
Zawartość hosta i portu może być nieaktualna, jeśli to gniazdo nie jest połączone.
Szczegóły | |||
---|---|---|---|
Parametry |
|
||
Zwroty |
Host i port peera połączenia
aEndpoint . |
otTcpListen
otError otTcpListen( otTcpListener *aListener, const otSockAddr *aSockName )
Powoduje, że przychodzące połączenia TCP pasujące do określonego adresu IP i portu aktywują wywołania zwrotne tego detektora TCP.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
otTcpListenerDeinitialize
otError otTcpListenerDeinitialize( otTcpListener *aListener )
Deinicjuje ten detektor TCP.
Oznacza to, że OpenThread nie śledzi już tego detektora TCP i anuluje przydzielanie wszystkich zasobów, które zostało wewnętrznie przydzielone temu odbiornikowi TCP. Aplikacja może ponownie wykorzystać pamięć dla odbiornika TCP, jeśli uzna to za stosowne.
Jeśli detektor TCP aktualnie nasłuchuje, przestanie nasłuchiwać.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
otTcpListenerGetContext
void * otTcpListenerGetContext( otTcpListener *aListener )
Uzyskuje wskaźnik kontekstu, który był powiązany z elementem aListener
podczas inicjowania.
Szczegóły | |||
---|---|---|---|
Parametry |
|
||
Zwroty |
Wskaźnik kontekstu powiązany z elementem
aListener . |
otTcpListenerGetInstance
otInstance * otTcpListenerGetInstance( otTcpListener *aListener )
Podczas inicjowania pobiera instancję otInstance, która była powiązana z aListener
.
Szczegóły | |||
---|---|---|---|
Parametry |
|
||
Zwroty |
Wskaźnik otInstance powiązany z
aListener . |
otTcpListenerInitialize
otError otTcpListenerInitialize( otInstance *aInstance, otTcpListener *aListener, const otTcpListenerInitializeArgs *aArgs )
Inicjuje detektor TCP.
Wywołanie tej funkcji powoduje, że OpenThread śledzi detektor TCP i przechowuje i pobiera dane TCP w elemencie aListener
. Aplikacja nie powinna uzyskiwać bezpośredniego dostępu do pól w aListener
ani modyfikować tych pól. Jeśli aplikacja musi odzyskać bazę danych aListener
, powinna wywołać funkcję otTcpListenerDeinitialize().
Szczegóły | |||||||
---|---|---|---|---|---|---|---|
Parametry |
|
||||||
Zwracane wartości |
|
otTcpReceiveByReference
otError otTcpReceiveByReference( otTcpEndpoint *aEndpoint, const otLinkedBuffer **aBuffer )
Udostępnia aplikację z połączonym łańcuchem bufora odwołującym się do danych, które obecnie znajdują się w buforze odbierania TCP.
Połączony łańcuch bufora jest prawidłowy do czasu następnego wywołania zwrotnego „Odbieranie gotowości” albo do następnego wywołania otTcpReceiveContiguify() lub otTcpCommitReceive().
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
otTcpReceiveContiguify
otError otTcpReceiveContiguify( otTcpEndpoint *aEndpoint )
Zmienia organizację bufora odbierania tak, aby był całkowicie przyległy w pamięci.
Jest to opcjonalne. Aplikacja może po prostu przemierzać połączony łańcuch bufora uzyskany przez wywołanie metody otTcpReceiveByReference
. Niektóre aplikacje mogą chcieć wywoływać tę funkcję, aby zapewnić ciągłość bufora odbierającego w celu uproszczenia przetwarzania danych, ale reorganizacja danych w buforze odbierającym zwiększa czas potrzebny na obsługę procesora.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
otTcpSendByExtension
otError otTcpSendByExtension( otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags )
Dodaje dane do bufora wysyłania, zwiększając długość ostatecznej wartości parametru otLinkedBuffer w buforze wysyłania o określoną ilość.
Jeśli bufor wysyłania jest pusty, operacja się nie powiedzie.
Szczegóły | |||||||
---|---|---|---|---|---|---|---|
Parametry |
|
||||||
Zwracane wartości |
|
otTcpSendByReference
otError otTcpSendByReference( otTcpEndpoint *aEndpoint, otLinkedBuffer *aBuffer, uint32_t aFlags )
Dodaje do bufora wysyłania dane, do których odwołuje się połączony bufor wskazywany przez aBuffer
.
Po pomyślnym wywołaniu tej funkcji połączony bufor i dane, do których się on odnosi, należą do stosu TCP. Aplikacja nie powinna ich modyfikować, dopóki wywołanie zwrotne „send” zwróci jej własność. Można wywołać tę funkcję, aby dodać kolejny połączony bufor do kolejki wysyłania, nawet jeśli wywołanie zwrotne „send ready” dla poprzedniego wywołania tej funkcji nie zostało jeszcze uruchomione.
Pamiętaj, że aBuffer
nie powinien być łańcuchem – jego pole mNext powinno zawierać wartość NULL. Jeśli zaraz po tym wywołaniu zostaną dodane dodatkowe dane, należy użyć flagi OT_TCP_SEND_MORE_TO_COME jako wskazówki dla implementacji TCP.
Szczegóły | |||||||
---|---|---|---|---|---|---|---|
Parametry |
|
||||||
Zwracane wartości |
|
otTcpSendEndOfStream
otError otTcpSendEndOfStream( otTcpEndpoint *aEndpoint )
Informacja dla peera połączenia, że ten punkt końcowy TCP nie wyśle więcej danych.
Należy z niej korzystać, gdy aplikacja nie ma już więcej danych do wysłania do peera połączenia. W przypadku tego połączenia przyszłe odczyty elementu równorzędnego połączenia będą skutkować warunkiem „koniec strumienia”, a przyszłe zapisy w tym punkcie końcowym połączenia zakończą się niepowodzeniem.
Warunek „koniec strumienia” ma zastosowanie tylko wtedy, gdy peer połączenie otrzyma wszystkie dane, które wcześniej zostały przekazane do stosu TCP do wysłania.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
otTcpStopListening
otError otTcpStopListening( otTcpListener *aListener )
Powoduje, że ten detektor TCP przestaje nasłuchiwać połączeń przychodzących.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
Makra
OT_TCP_ENDPOINT_TCB_NUM_PTR
OT_TCP_ENDPOINT_TCB_NUM_PTR 36
OT_TCP_ENDPOINT_TCB_SIZE_BASE
OT_TCP_ENDPOINT_TCB_SIZE_BASE 392
OT_TCP_ENDPOINT_TCB_SIZE_BASE i OT_TCP_ENDPOINT_TCB_NUM_POINTERS zostały tak wybrane, aby pole mTcb obiektu otTcpEndpoint ma taki sam rozmiar jak struktura tcpcb w TCPlp.
Jest to konieczne, ponieważ pole mTcb, choć nieprzezroczyste w deklaracji, jest w implementacji TCP traktowane jako pole struct tcpcb.
OT_TCP_LISTENER_TCB_NUM_PTR
OT_TCP_LISTENER_TCB_NUM_PTR 3
OT_TCP_LISTENER_TCB_SIZE_BASE
OT_TCP_LISTENER_TCB_SIZE_BASE 16
OT_TCP_LISTENER_TCB_SIZE_BASE i OT_TCP_LISTENER_TCB_NUM_POINTERS zostały tak wybrane, aby pole mTcbListener w otTcpListener miało taki sam rozmiar jak struktura tcpcb_listen w TCPlp.
Jest to konieczne, ponieważ pole mTcbListen, choć nieprzezroczyste w deklaracji, jest w implementacji TCP traktowane jako pole struct tcpcb.
OT_TCP_RECEIVE_BUFFER_SIZE_FEW_HOPS
OT_TCP_RECEIVE_BUFFER_SIZE_FEW_HOPS 2598
Zalecany rozmiar bufora w przypadku połączeń TCP, które przemierzają maksymalnie 3 przeskoki bezprzewodowe.
Na platformach, w których pamięć jest szczególnie ograniczona, i gdy duża przepustowość nie jest potrzebna, ręcznie wybierz mniejszy rozmiar bufora.
OT_TCP_RECEIVE_BUFFER_SIZE_MANY_HOPS
OT_TCP_RECEIVE_BUFFER_SIZE_MANY_HOPS 4157
Zalecany rozmiar bufora dla połączeń TCP przemierzających wiele przeskoków bezprzewodowych.
Jeśli połączenie TCP przemierza bardzo dużą liczbę przeskoków (ponad 6), zalecane może być ręczne wybranie dużego rozmiaru bufora.
Zasoby
Tematy referencyjne interfejsu OpenThread API pochodzą z kodu źródłowego dostępnego w GitHub. Aby dowiedzieć się więcej lub dołączyć do naszej dokumentacji, skorzystaj z sekcji Zasoby.