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{
  OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT,
  OT_TCP_INCOMING_CONNECTION_ACTION_DEFER,
  OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE
}
enum | typ wyliczeniowy
Definiuje działania dotyczące połączeń przychodzących.

Definicje typów

otLinkedBuffer typedef
Połączona struktura bufora do użycia z TCP.
otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer) typedef
void(*
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) typedef
void(*
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 typedef
enum otTcpDisconnectedReason
otTcpEndpoint typedef
struct otTcpEndpoint
otTcpEndpointInitializeArgs typedef
Zawiera argumenty funkcji otTcpEndpointInitialize().
otTcpEstablished)(otTcpEndpoint *aEndpoint) typedef
void(*
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) typedef
void(*
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 typedef
struct otTcpListener
otTcpListenerInitializeArgs typedef
Zawiera argumenty funkcji otTcpListenerInitialize().
otTcpReceiveAvailable)(otTcpEndpoint *aEndpoint, size_t aBytesAvailable, bool aEndOfStream, size_t aBytesRemaining) typedef
void(*
To wywołanie zwrotne wskazuje liczbę bajtów dostępnych do wykorzystania z bufora odbierania.
otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData) typedef
void(*
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 otTcpConnect().

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
[in] aListener
Detektor TCP zgodny z połączeniem przychodzącym.
[in] aEndpoint
Punkt końcowy TCP, w którym połączenie przychodzące zostało zaakceptowane.
[in] aPeer
host i port, z których pochodziło połączenie przychodzące.

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
[in] aListener
Detektor TCP zgodny z połączeniem przychodzącym.
[in] aPeer
Host i port, z których pochodzi połączenie przychodzące.
[out] aAcceptInto
Punkt końcowy TCP, w którym ma zaakceptować połączenie przychodzące.
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
[in] aEndpoint
Punkt końcowy TCP, którego połączenie zostało utracone.
[in] aReason
Przyczyna utraty połączenia.

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
[in] aEndpoint
Punkt końcowy TCP, którego połączenie zostało nawiązane.

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
[in] aEndpoint
Punkt końcowy TCP połączenia.
[in] aInSendBuffer
Liczba bajtów w buforze wysyłania (suma regionów „w trakcie przesyłania” i „zaległości”).
[in] aBacklog
Liczba bajtów znajdujących się w kolejce do wysłania, które nie zostały jeszcze wysłane (region „zaległości”).

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
[in] aEndpoint
Punkt końcowy TCP połączenia.
[in] aBytesAvailable
Liczba bajtów w buforze odbierania połączenia.
[in] aEndOfStream
Wskazuje, czy mogą być odbierane dodatkowe dane oprócz tych znajdujących się już w buforze odbioru połączenia.
[in] aBytesRemaining
Liczba dodatkowych bajtów, które można odebrać, zanim bufor odbierania będzie pełny.

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
[in] aEndpoint
Punkt końcowy TCP połączenia.
[in] aData
Wskaźnik do otLinkedBuffer, który można odzyskać.

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
[in] aEndpoint
Wskaźnik do struktury punktu końcowego TCP reprezentujący punkt końcowy TCP do przerwania.
Zwracane wartości
OT_ERROR_NONE
Połączenie z punktem końcowym TCP zostało przerwane.
OT_ERROR_FAILED
Nie udało się przerwać połączenia z punktem końcowym TCP.

otTcpBind

otError otTcpBind(
  otTcpEndpoint *aEndpoint,
  const otSockAddr *aSockName
)

Wiąże punkt końcowy TCP z adresem IP i portem.

Szczegóły
Parametry
[in] aEndpoint
Wskaźnik struktury punktu końcowego TCP do powiązania.
[in] aSockName
Adres i port, z którym chcesz powiązać ten punkt końcowy TCP.
Zwracane wartości
OT_ERROR_NONE
Punkt końcowy TCP został powiązany.
OT_ERROR_FAILED
Nie udało się powiązać punktu końcowego TCP.

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
[in] aEndpoint
Wskaźnik do struktury punktu końcowego TCP reprezentujący punkt końcowy TCP, w którym mają być odbierane dane.
[in] aNumBytes
Liczba wykorzystanych bajtów.
[in] aFlags
Flagi określające opcje tej operacji (jeszcze brak).
Zwracane wartości
OT_ERROR_NONE
Operacja odbierania została wykonana.
OT_ERROR_FAILED
Nie udało się ukończyć operacji odbierania.

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
[in] aEndpoint
Wskaźnik struktury punktów końcowych TCP do połączenia.
[in] aSockName
Adres IP i port hosta, z którym chcesz się połączyć.
[in] aFlags
Flagi określające opcje tej operacji (patrz wyliczenie powyżej).
Zwracane wartości
OT_ERROR_NONE
Operacja została wykonana.
OT_ERROR_FAILED
Nie udało się ukończyć operacji.

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
[in] aEndpoint
Wskaźnik do struktury punktu końcowego TCP do deinicjowania.
Zwracane wartości
OT_ERROR_NONE
Zdeinicjowano punkt końcowy TCP.
OT_ERROR_FAILED
Nie udało się deinicjować punktu końcowego TCP.

otTcpEndpointGetContext

void * otTcpEndpointGetContext(
  otTcpEndpoint *aEndpoint
)

Uzyskuje wskaźnik kontekstu, który był powiązany z elementem aEndpoint podczas inicjowania.

Szczegóły
Parametry
[in] aEndpoint
Punkt końcowy TCP, którego kontekst należy uzyskać.
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
[in] aEndpoint
Punkt końcowy TCP, którego instancja ma zostać uzyskana.
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
[in] aInstance
Wskaźnik do instancji OpenThread.
[in] aEndpoint
Wskaźnik struktury punktów końcowych TCP.
[in] aArgs
Wskaźnik struktury argumentów.
Zwracane wartości
OT_ERROR_NONE
Punkt końcowy TCP został otwarty.
OT_ERROR_FAILED
Nie udało się otworzyć punktu końcowego TCP.

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
[in] aEndpoint
Punkt końcowy TCP, którego host lokalny i port mają zostać uzyskane.
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
[in] aEndpoint
Punkt końcowy TCP, którego host i port peera mają zostać uzyskane.
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
[in] aListener
Wskaźnik do struktury odbiornika TCP, który powinien rozpocząć nasłuchiwanie.
[in] aSockName
Adres i port, na którym mają być nasłuchiwane połączenia przychodzące.
Zwracane wartości
OT_ERROR_NONE
Udało się zainicjować nasłuchiwanie w odbiorniku TCP.
OT_ERROR_FAILED
Nie udało się rozpocząć nasłuchiwania w odbiorniku TCP.

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
[in] aListener
Wskaźnik do struktury odbiornika TCP do deinicjowania.
Zwracane wartości
OT_ERROR_NONE
De zainicjowano odbiornik TCP.
OT_ERROR_FAILED
Nie udało się deinicjować odbiornika TCP.

otTcpListenerGetContext

void * otTcpListenerGetContext(
  otTcpListener *aListener
)

Uzyskuje wskaźnik kontekstu, który był powiązany z elementem aListener podczas inicjowania.

Szczegóły
Parametry
[in] aListener
Detektor TCP, którego kontekst uzyskać.
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
[in] aListener
Detektor TCP, którego instancja ma zostać uzyskana.
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
[in] aInstance
Wskaźnik do instancji OpenThread.
[in] aListener
Wskaźnik do struktury odbiornika TCP.
[in] aArgs
Wskaźnik struktury argumentów.
Zwracane wartości
OT_ERROR_NONE
Detektor TCP został otwarty.
OT_ERROR_FAILED
Nie udało się otworzyć odbiornika TCP.

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
[in] aEndpoint
Wskaźnik do struktury punktu końcowego TCP reprezentujący punkt końcowy TCP, w którym mają być odbierane dane.
[out] aBuffer
Wskaźnik do połączonego łańcucha bufora odwołujący się do danych aktualnie znajdujących się w buforze odbierania.
Zwracane wartości
OT_ERROR_NONE
Operacja została wykonana.
OT_ERROR_FAILED
Nie udało się ukończyć operacji.

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
[in] aEndpoint
Wskaźnik do punktu końcowego TCP, którego bufor odbierania jest potrzebny do reorganizacji.
Zwracane wartości
OT_ERROR_NONE
Operacja została wykonana.
OT_ERROR_FAILED
Nie udało się ukończyć operacji.

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
[in] aEndpoint
Wskaźnik do struktury punktu końcowego TCP reprezentujący punkt końcowy TCP, z którego mają być wysyłane dane.
[in] aNumBytes
Liczba bajtów, o które można zwiększyć długość ostatecznego połączonego bufora.
[in] aFlags
Flagi określające opcje tej operacji (patrz wyliczenie powyżej).
Zwracane wartości
OT_ERROR_NONE
Dane zostały dodane do bufora wysyłania.
OT_ERROR_FAILED
Nie udało się dodać danych do bufora wysyłania.

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
[in] aEndpoint
Wskaźnik do struktury punktu końcowego TCP reprezentujący punkt końcowy TCP, z którego mają być wysyłane dane.
[in] aBuffer
Wskaźnik do połączonego łańcucha bufora odwołujący się do danych, które należy dodać do bufora wysyłania.
[in] aFlags
Flagi określające opcje tej operacji (patrz wyliczenie powyżej).
Zwracane wartości
OT_ERROR_NONE
Dane zostały dodane do bufora wysyłania.
OT_ERROR_FAILED
Nie udało się dodać danych do bufora wysyłania.

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
[in] aEndpoint
Wskaźnik do struktury punktu końcowego TCP reprezentujący punkt końcowy TCP, który ma zostać wyłączony.
Zwracane wartości
OT_ERROR_NONE
Warunek „koniec strumienia” został dodany do kolejki przesyłania.
OT_ERROR_FAILED
Nie udało się umieścić w kolejce warunku „koniec strumienia” do transmisji.

otTcpStopListening

otError otTcpStopListening(
  otTcpListener *aListener
)

Powoduje, że ten detektor TCP przestaje nasłuchiwać połączeń przychodzących.

Szczegóły
Parametry
[in] aListener
Wskaźnik do struktury odbiornika TCP, który powinien przestać nasłuchiwać.
Zwracane wartości
OT_ERROR_NONE
Zatrzymano nasłuchiwanie w odbiorniku TCP.
OT_ERROR_FAILED
Nie udało się zatrzymać nasłuchiwania w odbiorniku TCP.

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.