TCP

Этот модуль включает функции, управляющие TCP-коммуникацией.

Краткое содержание

Перечисления

anonymous enum перечисление
Определяет флаги, передаваемые в otTcpConnect() .
anonymous enum перечисление
Определяет флаги, передаваемые в otTcpSendByReference .
otTcpDisconnectedReason перечисление
otTcpIncomingConnectionAction {
OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT ,
OT_TCP_INCOMING_CONNECTION_ACTION_DEFER ,
OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE
}
перечисление
Определяет действия при входящем соединении.

Определения типов

otLinkedBuffer определение типа
Структура связанного буфера для использования с TCP.
otTcpAcceptDone )(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer) определение типа
void(*
Этот обратный вызов указывает, что TCP-соединение теперь готово для двусторонней связи.
otTcpAcceptReady )(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto) определение типа
Этот обратный вызов указывает, что прибыло входящее соединение, соответствующее этому прослушивателю TCP.
otTcpDisconnected )(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason) определение типа
void(*
Этот обратный вызов указывает, что соединение прервано и его больше не следует использовать, или что соединение перешло в состояние TIME-WAIT.
otTcpDisconnectedReason определение типа
enum otTcpDisconnectedReason
otTcpEndpoint определение типа
otTcpEndpointInitializeArgs определение типа
Содержит аргументы функции otTcpEndpointInitialize() .
otTcpEstablished )(otTcpEndpoint *aEndpoint) определение типа
void(*
Этот обратный вызов сообщает приложению, что трехстороннее подтверждение TCP завершено и теперь соединение установлено.
otTcpForwardProgress )(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog) определение типа
void(*
Этот обратный вызов сообщает приложению, был ли достигнут прогресс в передаче данных из буфера отправки получателю.
otTcpIncomingConnectionAction определение типа
Определяет действия при входящем соединении.
otTcpListener определение типа
otTcpListenerInitializeArgs определение типа
Содержит аргументы функции otTcpListenerInitialize() .
otTcpReceiveAvailable )(otTcpEndpoint *aEndpoint, size_t aBytesAvailable, bool aEndOfStream, size_t aBytesRemaining) определение типа
void(*
Этот обратный вызов указывает количество байтов, доступных для использования из буфера приема.
otTcpSendDone )(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData) определение типа
void(*
Этот обратный вызов сообщает приложению, что данные в предоставленном aData были подтверждены одноранговым соединением и что aData и содержащиеся в нем данные могут быть возвращены приложением.

Функции

otTcpAbort ( otTcpEndpoint *aEndpoint)
Принудительно завершает TCP-соединение, связанное с этой конечной точкой TCP.
otTcpBind ( otTcpEndpoint *aEndpoint, const otSockAddr *aSockName)
Привязывает конечную точку TCP к IP-адресу и порту.
otTcpCommitReceive ( otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags)
Сообщает стеку TCP, что приложение завершило обработку aNumBytes байтов данных в начале буфера приема и что стеку TCP не нужно продолжать поддерживать эти байты в буфере приема.
otTcpConnect ( otTcpEndpoint *aEndpoint, const otSockAddr *aSockName, uint32_t aFlags)
Записывает удаленный хост и порт для этого подключения.
otTcpEndpointDeinitialize ( otTcpEndpoint *aEndpoint)
Деинициализирует эту конечную точку TCP.
otTcpEndpointGetContext ( otTcpEndpoint *aEndpoint)
void *
Получает указатель контекста, который был связан с aEndpoint при инициализации.
otTcpEndpointGetInstance ( otTcpEndpoint *aEndpoint)
Получает otInstance, который был связан с aEndpoint при инициализации.
otTcpEndpointInitialize ( otInstance *aInstance, otTcpEndpoint *aEndpoint, const otTcpEndpointInitializeArgs *aArgs)
Инициализирует конечную точку TCP.
otTcpGetLocalAddress (const otTcpEndpoint *aEndpoint)
const otSockAddr *
Получает указатель на локальный хост и порт конечной точки TCP.
otTcpGetPeerAddress (const otTcpEndpoint *aEndpoint)
const otSockAddr *
Получает указатель на хост и порт узла конечной точки TCP.
otTcpListen ( otTcpListener *aListener, const otSockAddr *aSockName)
Заставляет входящие TCP-соединения, соответствующие указанному IP-адресу и порту, запускать обратные вызовы этого прослушивателя TCP.
otTcpListenerDeinitialize ( otTcpListener *aListener)
Деинициализирует этот прослушиватель TCP.
otTcpListenerGetContext ( otTcpListener *aListener)
void *
Получает указатель контекста, который был связан с aListener при инициализации.
otTcpListenerGetInstance ( otTcpListener *aListener)
Получает otInstance, который был связан с aListener при инициализации.
otTcpListenerInitialize ( otInstance *aInstance, otTcpListener *aListener, const otTcpListenerInitializeArgs *aArgs)
Инициализирует прослушиватель TCP.
otTcpReceiveByReference ( otTcpEndpoint *aEndpoint, const otLinkedBuffer **aBuffer)
Предоставляет приложению связанную цепочку буферов, ссылающуюся на данные, которые в данный момент находятся в приемном буфере TCP.
otTcpReceiveContiguify ( otTcpEndpoint *aEndpoint)
Реорганизует буфер приема, чтобы он был полностью непрерывным в памяти.
otTcpSendByExtension ( otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags)
Добавляет данные в буфер отправки, увеличивая длину последнего otLinkedBuffer в буфере отправки на указанную величину.
otTcpSendByReference ( otTcpEndpoint *aEndpoint, otLinkedBuffer *aBuffer, uint32_t aFlags)
Добавляет данные, на которые ссылается связанный буфер, на который указывает aBuffer , в буфер отправки.
otTcpSendEndOfStream ( otTcpEndpoint *aEndpoint)
Сообщает одноранговому соединению, что эта конечная точка TCP не будет отправлять дополнительные данные.
otTcpStopListening ( otTcpListener *aListener)
Заставляет этот прослушиватель TCP перестать прослушивать входящие соединения.

Структуры

otLinkedBuffer

Структура связанного буфера для использования с TCP.

otTcpEndpoint

Представляет конечную точку TCP.

otTcpEndpointInitializeArgs

Содержит аргументы функции otTcpEndpointInitialize() .

otTcpListener

Представляет прослушиватель TCP.

otTcpListenerInitializeArgs

Содержит аргументы функции otTcpListenerInitialize() .

Перечисления

анонимное перечисление

 anonymous enum

Определяет флаги, передаваемые в otTcpConnect() .

анонимное перечисление

 anonymous enum

Определяет флаги, передаваемые в otTcpSendByReference .

отТкпдисконнектедреасон

 otTcpDisconnectedReason

отткпинкомингконнектионэкшн

 otTcpIncomingConnectionAction

Определяет действия при входящем соединении.

Это используется в обратном вызове otTcpAcceptReady() .

Характеристики
OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT

Примите входящее соединение.

OT_TCP_INCOMING_CONNECTION_ACTION_DEFER

Отложить (тихо игнорировать) входящее соединение.

OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE

Отказаться от входящего соединения.

Определения типов

otLinkedBuffer

struct otLinkedBuffer otLinkedBuffer

Структура связанного буфера для использования с TCP.

Одна структура otLinkedBuffer ссылается на массив байтов в памяти через mData и mLength. Поле mNext используется для формирования цепочки структур otLinkedBuffer .

отткпакцептдоне

void(* otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer)

Этот обратный вызов указывает, что TCP-соединение теперь готово для двусторонней связи.

В случае TCP Fast Open это может произойти до фактического завершения установления соединения TCP. Приложению предоставляются указатели контекста как для прослушивателя TCP, принявшего соединение, так и для конечной точки TCP, в которой оно было принято. Предоставленный контекст связан с прослушивателем TCP.

Подробности
Параметры
[in] aListener
Прослушиватель TCP, соответствующий входящему соединению.
[in] aEndpoint
Конечная точка TCP, в которую было принято входящее соединение.
[in] aPeer
хост и порт, с которого возникло входящее соединение.

отТкпакцептреди

otTcpIncomingConnectionAction(* otTcpAcceptReady)(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto)

Этот обратный вызов указывает, что прибыло входящее соединение, соответствующее этому прослушивателю TCP.

Типичный ответ приложения — принять входящее соединение. Это делается путем заполнения aAcceptInto указателем на otTcpEndpoint , в который можно принять входящее соединение. Эта otTcpEndpoint уже должна быть инициализирована с помощью otTcpEndpointInitialize() . Затем приложение возвращает OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT.

Альтернативно приложение может отказаться принимать входящее соединение. Приложение может сделать это двумя способами. Во-первых, если приложение возвращает OT_TCP_INCOMING_CONNECTION_ACTION_DEFER, то OpenThread молча игнорирует запрос на установление соединения; узел соединения, скорее всего, повторно передаст запрос, после чего обратный вызов будет вызван снова. Это полезно, если в данный момент ресурсы для принятия соединения недоступны, но они могут быть доступны, когда партнер по соединению повторно передает свою попытку установления соединения. Во-вторых, если приложение возвращает OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE, OpenThread отправляет сообщение об отказе в соединении хосту, который пытался установить соединение. Если приложение отклоняет входящее соединение, заполнять aAcceptInto не требуется.

Подробности
Параметры
[in] aListener
Прослушиватель TCP, соответствующий входящему соединению.
[in] aPeer
Хост и порт, с которого происходит входящее соединение.
[out] aAcceptInto
Конечная точка TCP, через которую можно принять входящее соединение.
Возврат
Описание того, как обрабатывать входящее соединение.

otTcpDisconnected

void(* otTcpDisconnected)(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason)

Этот обратный вызов указывает, что соединение прервано и его больше не следует использовать, или что соединение перешло в состояние TIME-WAIT.

Это может произойти в случае неудачной попытки установления соединения (инициированной вызовом otTcpConnect() ) или в любой момент после этого (например, если время соединения истекло или от узла соединения получен сегмент RST). Как только этот обратный вызов сработает, все ресурсы, которые приложение предоставило для этого соединения (т. е. любые otLinkedBuffers и память, на которую они ссылаются, но не сама конечная точка TCP или пространство для буферов приема), могут быть возвращены. В случае перехода соединения в состояние TIME-WAIT этот обратный вызов вызывается дважды: один раз при входе в состояние TIME-WAIT (с OT_TCP_DISCONNECTED_REASON_TIME_WAIT и снова по истечении срока действия состояния TIME-WAIT (с OT_TCP_DISCONNECTED_REASON_NORMAL).

Подробности
Параметры
[in] aEndpoint
Конечная точка TCP, соединение с которой потеряно.
[in] aReason
Причина, по которой пропала связь.

отТкпдисконнектедреасон

enum otTcpDisconnectedReason otTcpDisconnectedReason

otTcpEndpoint

struct otTcpEndpoint otTcpEndpoint

otTcpEndpointInitializeArgs

struct otTcpEndpointInitializeArgs otTcpEndpointInitializeArgs

Содержит аргументы функции otTcpEndpointInitialize() .

otTcpEstablished

void(* otTcpEstablished)(otTcpEndpoint *aEndpoint)

Этот обратный вызов сообщает приложению, что трехстороннее подтверждение TCP завершено и теперь соединение установлено.

Подробности
Параметры
[in] aEndpoint
Конечная точка TCP, соединение с которой теперь установлено.

отТкпфорвардпрогресс

void(* otTcpForwardProgress)(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog)

Этот обратный вызов сообщает приложению, был ли достигнут прогресс в передаче данных из буфера отправки получателю.

Этот обратный вызов не требуется для корректной работы TCP. Большинство приложений могут просто полагаться на обратный вызов otTcpSendDone() для освобождения связанных буферов после того, как стек TCP завершит их использование. Целью этого обратного вызова является поддержка расширенных приложений, которые получают выгоду от более детальной информации о том, как соединение продвигается вперед в передаче данных к одноранговому соединению.

Операция этого обратного вызова тесно связана с буфером отправки TCP. Буфер отправки можно понимать как имеющий две области. Во-первых, в начале (передней части) буфера отправки есть «оперативная» область. Он соответствует данным, которые были отправлены получателю, но еще не подтверждены. Во-вторых, существует «незавершенная» область, состоящая из всех данных в буфере отправки, которые не находятся в «текущей» области. Область «отставание» соответствует данным, которые поставлены в очередь на отправку, но еще не были отправлены.

Обратный вызов вызывается в ответ на два типа событий. Во-первых, «текущая» область буфера отправки может сжаться (например, когда получатель подтверждает данные, которые мы отправили ранее). Во-вторых, область «незавершенной работы» буфера отправки может сжаться (например, были отправлены новые данные). Эти два условия часто возникают одновременно в ответ на сегмент ACK от узла соединения, поэтому они объединяются в один обратный вызов.

Стек TCP использует только байты aInSendBuffer в конце буфера отправки; когда aInSendBuffer уменьшается на величину x, это означает, что x дополнительных байтов, которые раньше находились в заголовке буфера отправки, больше не являются частью буфера отправки и теперь могут быть возвращены (т. е. перезаписаны) приложением. Обратите внимание, что сама структура otLinkedBuffer может быть восстановлена ​​только после того, как все байты, на которые она ссылается, больше не являются частью буфера отправки.

Этот обратный вызов включает в себя otTcpSendDone() в следующем смысле: приложения могут определить, когда связанные буферы могут быть освобождены, сравнивая aInSendBuffer с количеством байтов в каждом связанном буфере. Однако мы ожидаем, что otTcpSendDone() , который напрямую сообщает, какие otLinkedBuffers могут быть освобождены, будет намного проще в использовании. Если оба обратных вызова зарегистрированы и запускаются одним и тем же событием (например, получением одного и того же сегмента ACK), то сначала будет запущен обратный вызов otTcpSendDone() , а затем этот обратный вызов.

Кроме того, этот обратный вызов предоставляет aBacklog , который указывает, сколько байтов данных в буфере отправки еще не передано. Для приложений, которые хотят добавлять данные в буфер отправки только тогда, когда есть уверенность, что они будут отправлены в ближайшее время, может быть желательно отправлять данные только тогда, когда aBacklog достаточно мал (0 или близко к 0). Например, приложение может использовать aBacklog , чтобы оно могло реагировать на накопление очереди путем удаления или агрегирования данных, чтобы избежать создания журнала невыполненных данных.

После вызова otTcpSendByReference() или otTcpSendByExtension() с положительным числом байтов гарантирован вызов обратного вызова otTcpForwardProgress() , чтобы указать, когда отправляются байты, добавленные в буфер отправки. Вызов otTcpForwardProgress() может быть сделан сразу после добавления байтов в буфер отправки (если некоторые из этих байтов отправляются немедленно, что уменьшает отставание) или когда-нибудь в будущем (как только соединение отправит некоторые или все данные, сокращая отставание). Под «немедленно» мы подразумеваем, что обратный вызов немедленно запланирован для выполнения в тасклете; Чтобы избежать сложностей, связанных с повторным входом, обратный вызов otTcpForwardProgress() никогда не вызывается напрямую из функций otTcpSendByReference() или otTcpSendByExtension() .

Подробности
Параметры
[in] aEndpoint
Конечная точка TCP для соединения.
[in] aInSendBuffer
Количество байтов в буфере отправки (сумма регионов «в работе» и «незавершенных»).
[in] aBacklog
Количество байтов, поставленных в очередь для отправки, но еще не отправленных (область «невыполненной работы»).

отткпинкомингконнектионэкшн

enum otTcpIncomingConnectionAction otTcpIncomingConnectionAction

Определяет действия при входящем соединении.

Это используется в обратном вызове otTcpAcceptReady() .

otTcpListener

struct otTcpListener otTcpListener

otTcpListenerInitializeArgs

struct otTcpListenerInitializeArgs otTcpListenerInitializeArgs

Содержит аргументы функции otTcpListenerInitialize() .

otTcpReceiveAvailable

void(* otTcpReceiveAvailable)(otTcpEndpoint *aEndpoint, size_t aBytesAvailable, bool aEndOfStream, size_t aBytesRemaining)

Этот обратный вызов указывает количество байтов, доступных для использования из буфера приема.

Он вызывается всякий раз, когда байты добавляются в буфер приема и когда достигается конец потока. Если достигнут конец потока (т. е. если данные больше не станут доступны для чтения, поскольку одноранговый узел соединения закрыл свой конец соединения для записи), то aEndOfStream имеет значение true. Наконец, aBytesRemaining указывает, сколько емкости осталось в буфере приема для хранения дополнительных поступающих данных.

Подробности
Параметры
[in] aEndpoint
Конечная точка TCP для соединения.
[in] aBytesAvailable
Количество байтов в буфере приема соединения.
[in] aEndOfStream
Указывает, могут ли быть получены дополнительные данные, помимо тех, которые уже находятся в буфере приема соединения.
[in] aBytesRemaining
Количество дополнительных байтов, которые могут быть получены до того, как буфер приема заполнится.

otTcpSendDone

void(* otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData)

Этот обратный вызов сообщает приложению, что данные в предоставленном aData были подтверждены одноранговым соединением и что aData и содержащиеся в нем данные могут быть возвращены приложением.

aData гарантированно будут идентичны тем, которые передаются в TCP через otTcpSendByReference() , включая любые расширения, выполняемые через otTcpSendByExtension() .

Подробности
Параметры
[in] aEndpoint
Конечная точка TCP для соединения.
[in] aData
Указатель на otLinkedBuffer , который можно вернуть.

Функции

otTcpAbort

otError otTcpAbort(
  otTcpEndpoint *aEndpoint
)

Принудительно завершает TCP-соединение, связанное с этой конечной точкой TCP.

Это немедленно освобождает конечную точку TCP для использования для другого соединения и очищает буферы отправки и приема, передавая право собственности на любые данные, предоставленные приложением в вызовах otTcpSendByReference() и otTcpSendByExtension(), обратно приложению. Обратные вызовы конечной точки TCP и память для буфера приема остаются связанными с конечной точкой TCP.

Подробности
Параметры
[in] aEndpoint
Указатель на структуру конечной точки TCP, представляющую конечную точку TCP для прерывания.
Возвращаемые значения
OT_ERROR_NONE
Соединение конечной точки TCP успешно прервано.
OT_ERROR_FAILED
Не удалось прервать соединение конечной точки TCP.

отТкпбинд

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

Привязывает конечную точку TCP к IP-адресу и порту.

Подробности
Параметры
[in] aEndpoint
Указатель на структуру конечной точки TCP для привязки.
[in] aSockName
Адрес и порт, к которым можно привязать эту конечную точку TCP.
Возвращаемые значения
OT_ERROR_NONE
Конечная точка TCP успешно привязана.
OT_ERROR_FAILED
Не удалось привязать конечную точку TCP.

otTcpCommitReceive

otError otTcpCommitReceive(
  otTcpEndpoint *aEndpoint,
  size_t aNumBytes,
  uint32_t aFlags
)

Сообщает стеку TCP, что приложение завершило обработку aNumBytes байтов данных в начале буфера приема и что стеку TCP не нужно продолжать поддерживать эти байты в буфере приема.

Подробности
Параметры
[in] aEndpoint
Указатель на структуру конечной точки TCP, представляющую конечную точку TCP, на которую следует получать данные.
[in] aNumBytes
Количество использованных байт.
[in] aFlags
Флаги, определяющие параметры этой операции (пока нет).
Возвращаемые значения
OT_ERROR_NONE
Операция получения успешно завершена.
OT_ERROR_FAILED
Не удалось завершить операцию получения.

otTcpConnect

otError otTcpConnect(
  otTcpEndpoint *aEndpoint,
  const otSockAddr *aSockName,
  uint32_t aFlags
)

Записывает удаленный хост и порт для этого подключения.

TCP Fast Open необходимо включить или отключить с помощью aFlags . Если он отключен, то подтверждение установления TCP-соединения инициируется немедленно. Если она включена, то эта функция просто записывает удаленный хост и порт, а подтверждение установления TCP-соединения происходит только при первом вызове otTcpSendByReference() .

Если TCP Fast Open отключен, вызывающий объект должен дождаться обратного вызова otTcpEstablished указывающего, что установление соединения TCP выполнено, прежде чем он сможет начать отправку данных, например, путем вызова otTcpSendByReference() .

Подробности
Параметры
[in] aEndpoint
Указатель на структуру конечной точки TCP для подключения.
[in] aSockName
IP-адрес и порт хоста, к которому необходимо подключиться.
[in] aFlags
Флаги, определяющие параметры этой операции (см. перечисление выше).
Возвращаемые значения
OT_ERROR_NONE
Успешно завершил операцию.
OT_ERROR_FAILED
Не удалось завершить операцию.

otTcpEndpointDeinitialize

otError otTcpEndpointDeinitialize(
  otTcpEndpoint *aEndpoint
)

Деинициализирует эту конечную точку TCP.

Это означает, что OpenThread больше не отслеживает эту конечную точку TCP и освобождает все ресурсы, которые он внутренне выделил для этой конечной точки TCP. Приложение может повторно использовать память, поддерживающую конечную точку TCP, по своему усмотрению.

Если это соответствует реальному TCP-соединению, соединение прерывается бесцеремонно (как в otTcpAbort() ). Все ресурсы, предоставленные приложением для этой конечной точки TCP (связанные буферы для буфера отправки, память для буфера приема, сама структура aEndpoint и т. д.), немедленно возвращаются приложению.

Подробности
Параметры
[in] aEndpoint
Указатель на структуру конечной точки TCP, которую необходимо деинициализировать.
Возвращаемые значения
OT_ERROR_NONE
Конечная точка TCP успешно деинициализирована.
OT_ERROR_FAILED
Не удалось деинициализировать конечную точку TCP.

отТкпендпойнтжетконтекст

void * otTcpEndpointGetContext(
  otTcpEndpoint *aEndpoint
)

Получает указатель контекста, который был связан с aEndpoint при инициализации.

Подробности
Параметры
[in] aEndpoint
Конечная точка TCP, контекст которой необходимо получить.
Возврат
Указатель контекста, связанный с aEndpoint .

отТкпендпойнтжетинстанце

otInstance * otTcpEndpointGetInstance(
  otTcpEndpoint *aEndpoint
)

Получает otInstance, который был связан с aEndpoint при инициализации.

Подробности
Параметры
[in] aEndpoint
Конечная точка TCP, экземпляр которой необходимо получить.
Возврат
Указатель otInstance, связанный с aEndpoint .

otTcpEndpointInitialize

otError otTcpEndpointInitialize(
  otInstance *aInstance,
  otTcpEndpoint *aEndpoint,
  const otTcpEndpointInitializeArgs *aArgs
)

Инициализирует конечную точку TCP.

Вызов этой функции заставляет OpenThread отслеживать конечную точку TCP, а также сохранять и извлекать данные TCP внутри aEndpoint . Приложению следует воздерживаться от прямого доступа или изменения полей в aEndpoint . Если приложению необходимо освободить память, поддерживающую aEndpoint , оно должно вызвать otTcpEndpointDeinitialize() .

Подробности
Параметры
[in] aInstance
Указатель на экземпляр OpenThread.
[in] aEndpoint
Указатель на структуру конечной точки TCP.
[in] aArgs
Указатель на структуру аргументов.
Возвращаемые значения
OT_ERROR_NONE
Конечная точка TCP успешно открыта.
OT_ERROR_FAILED
Не удалось открыть конечную точку TCP.

отТкпжетлокалдресс

const otSockAddr * otTcpGetLocalAddress(
  const otTcpEndpoint *aEndpoint
)

Получает указатель на локальный хост и порт конечной точки TCP.

Содержимое хоста и порта может быть устаревшим, если этот сокет не находится в подключенном состоянии и не был привязан после последнего отключения.

Подробности
Параметры
[in] aEndpoint
Конечная точка TCP, локальный хост и порт которой необходимо получить.
Возврат
Локальный хост и порт aEndpoint .

отТкпжетпеерадрес

const otSockAddr * otTcpGetPeerAddress(
  const otTcpEndpoint *aEndpoint
)

Получает указатель на хост и порт узла конечной точки TCP.

Содержимое хоста и порта может быть устаревшим, если этот сокет не находится в подключенном состоянии.

Подробности
Параметры
[in] aEndpoint
Конечная точка TCP, хост и порт узла которого необходимо получить.
Возврат
Хост и порт узла соединения aEndpoint .

otTcpListen

otError otTcpListen(
  otTcpListener *aListener,
  const otSockAddr *aSockName
)

Заставляет входящие TCP-соединения, соответствующие указанному IP-адресу и порту, запускать обратные вызовы этого прослушивателя TCP.

Подробности
Параметры
[in] aListener
Указатель на структуру прослушивателя TCP, которая должна начать прослушивание.
[in] aSockName
Адрес и порт, на которых следует прослушивать входящие соединения.
Возвращаемые значения
OT_ERROR_NONE
Успешно инициировано прослушивание прослушивателя TCP.
OT_ERROR_FAILED
Не удалось инициировать прослушивание прослушивателя TCP.

otTcpListenerДеинициализация

otError otTcpListenerDeinitialize(
  otTcpListener *aListener
)

Деинициализирует этот прослушиватель TCP.

Это означает, что OpenThread больше не отслеживает этот прослушиватель TCP и освобождает все ресурсы, которые он внутренне выделил для этого прослушивателя TCP. Приложение может повторно использовать память, поддерживающую прослушиватель TCP, по своему усмотрению.

Если прослушиватель TCP в данный момент прослушивает, он прекращает прослушивание.

Подробности
Параметры
[in] aListener
Указатель на структуру прослушивателя TCP, которую необходимо деинициализировать.
Возвращаемые значения
OT_ERROR_NONE
Успешно деинициализировал прослушиватель TCP.
OT_ERROR_FAILED
Не удалось деинициализировать прослушиватель TCP.

отТкплистенержетконтекст

void * otTcpListenerGetContext(
  otTcpListener *aListener
)

Получает указатель контекста, который был связан с aListener при инициализации.

Подробности
Параметры
[in] aListener
Прослушиватель TCP, контекст которого требуется получить.
Возврат
Указатель контекста, связанный с aListener .

отткплистенержетинстанце

otInstance * otTcpListenerGetInstance(
  otTcpListener *aListener
)

Получает otInstance, который был связан с aListener при инициализации.

Подробности
Параметры
[in] aListener
Прослушиватель TCP, экземпляр которого необходимо получить.
Возврат
Указатель otInstance, связанный с aListener .

otTcpListenerInitialize

otError otTcpListenerInitialize(
  otInstance *aInstance,
  otTcpListener *aListener,
  const otTcpListenerInitializeArgs *aArgs
)

Инициализирует прослушиватель TCP.

Вызов этой функции заставляет OpenThread отслеживать прослушиватель TCP, а также сохранять и извлекать данные TCP внутри aListener . Приложению следует воздерживаться от прямого доступа или изменения полей в aListener . Если приложению необходимо освободить память, поддерживающую aListener , ему следует вызвать otTcpListenerDeinitialize() .

Подробности
Параметры
[in] aInstance
Указатель на экземпляр OpenThread.
[in] aListener
Указатель на структуру прослушивателя TCP.
[in] aArgs
Указатель на структуру аргументов.
Возвращаемые значения
OT_ERROR_NONE
Прослушиватель TCP успешно открыт.
OT_ERROR_FAILED
Не удалось открыть прослушиватель TCP.

otTcpReceiveByReference

otError otTcpReceiveByReference(
  otTcpEndpoint *aEndpoint,
  const otLinkedBuffer **aBuffer
)

Предоставляет приложению связанную цепочку буферов, ссылающуюся на данные, которые в данный момент находятся в приемном буфере TCP.

Цепочка связанных буферов действительна до тех пор, пока не будет вызван обратный вызов «готовность к приему» или до следующего вызова otTcpReceiveContiguify() или otTcpCommitReceive() .

Подробности
Параметры
[in] aEndpoint
Указатель на структуру конечной точки TCP, представляющую конечную точку TCP, на которую следует получать данные.
[out] aBuffer
Указатель на связанную цепочку буферов, ссылающуюся на данные, которые в данный момент находятся в приемном буфере.
Возвращаемые значения
OT_ERROR_NONE
Успешно завершил операцию.
OT_ERROR_FAILED
Не удалось завершить операцию.

otTcpReceiveContiguify

otError otTcpReceiveContiguify(
  otTcpEndpoint *aEndpoint
)

Реорганизует буфер приема, чтобы он был полностью непрерывным в памяти.

Это необязательно; приложение может просто пройти по связанной цепочке буферов, полученной вызовом otTcpReceiveByReference . Некоторым приложениям может потребоваться вызвать эту функцию, чтобы сделать буфер приема непрерывным и упростить обработку данных, но это происходит за счет времени ЦП на реорганизацию данных в буфере приема.

Подробности
Параметры
[in] aEndpoint
Указатель на конечную точку TCP, чей буфер приема необходимо реорганизовать.
Возвращаемые значения
OT_ERROR_NONE
Успешно завершил операцию.
OT_ERROR_FAILED
Не удалось завершить операцию.

отТкпсендбиекстенсион

otError otTcpSendByExtension(
  otTcpEndpoint *aEndpoint,
  size_t aNumBytes,
  uint32_t aFlags
)

Добавляет данные в буфер отправки, увеличивая длину последнего otLinkedBuffer в буфере отправки на указанную величину.

Если буфер отправки пуст, операция завершается неудачей.

Подробности
Параметры
[in] aEndpoint
Указатель на структуру конечной точки TCP, представляющую конечную точку TCP, на которую следует отправлять данные.
[in] aNumBytes
Количество байтов, на которое можно увеличить длину окончательного связанного буфера.
[in] aFlags
Флаги, определяющие параметры этой операции (см. перечисление выше).
Возвращаемые значения
OT_ERROR_NONE
Данные успешно добавлены в буфер отправки.
OT_ERROR_FAILED
Не удалось добавить данные в буфер отправки.

otTcpSendByReference

otError otTcpSendByReference(
  otTcpEndpoint *aEndpoint,
  otLinkedBuffer *aBuffer,
  uint32_t aFlags
)

Добавляет данные, на которые ссылается связанный буфер, на который указывает aBuffer , в буфер отправки.

После успешного вызова этой функции связанный буфер и данные, на которые он ссылается, принадлежат стеку TCP; они не должны изменяться приложением до тех пор, пока обратный вызов «отправить готово» не вернет право владения этими объектами приложению. Допустимо вызвать эту функцию, чтобы добавить еще один связанный буфер в очередь отправки, даже если обратный вызов «отправка выполнена» для предыдущего вызова этой функции еще не сработал.

Обратите внимание, что aBuffer не должен быть связан; его поле mNext должно быть NULL. Если дополнительные данные будут добавлены сразу после этого вызова, то флаг OT_TCP_SEND_MORE_TO_COME следует использовать как подсказку к реализации TCP.

Подробности
Параметры
[in] aEndpoint
Указатель на структуру конечной точки TCP, представляющую конечную точку TCP, на которую следует отправлять данные.
[in] aBuffer
Указатель на связанную цепочку буферов, ссылающуюся на данные, которые необходимо добавить в буфер отправки.
[in] aFlags
Флаги, определяющие параметры этой операции (см. перечисление выше).
Возвращаемые значения
OT_ERROR_NONE
Данные успешно добавлены в буфер отправки.
OT_ERROR_FAILED
Не удалось добавить данные в буфер отправки.

отТкпсендофстрим

otError otTcpSendEndOfStream(
  otTcpEndpoint *aEndpoint
)

Сообщает одноранговому соединению, что эта конечная точка TCP не будет отправлять дополнительные данные.

Это следует использовать, когда у приложения больше нет данных для отправки партнеру соединения. Для этого соединения будущие чтения на одноранговом соединении приведут к состоянию «конец потока», а будущие записи в этой конечной точке соединения завершится сбоем.

Условие «конец потока» применяется только после того, как любые данные, ранее предоставленные в стек TCP для отправки, были получены одноранговым соединением.

Подробности
Параметры
[in] aEndpoint
Указатель на структуру конечной точки TCP, представляющую конечную точку TCP, которую необходимо завершить.
Возвращаемые значения
OT_ERROR_NONE
Успешно поставлено условие «конец потока» в очередь для передачи.
OT_ERROR_FAILED
Не удалось поставить в очередь условие «конец потока» для передачи.

otTcpStopListening

otError otTcpStopListening(
  otTcpListener *aListener
)

Заставляет этот прослушиватель TCP перестать прослушивать входящие соединения.

Подробности
Параметры
[in] aListener
Указатель на структуру прослушивателя TCP, которая должна прекратить прослушивание.
Возвращаемые значения
OT_ERROR_NONE
Прослушивание TCP-прослушивателя успешно прекращено.
OT_ERROR_FAILED
Не удалось остановить прослушивание TCP-прослушивателя.

Макросы

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 и OT_TCP_ENDPOINT_TCB_NUM_POINTERS выбираются таким образом, чтобы поле mTcb в otTcpEndpoint имело тот же размер, что и структура tcpcb в TCPlp.

Это необходимо, поскольку поле mTcb, хотя и непрозрачное в своем объявлении, в реализации TCP рассматривается как структура 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 и OT_TCP_LISTENER_TCB_NUM_POINTERS выбираются так, чтобы поле mTcbListener в otTcpListener имело тот же размер, что и структура tcpcb_listen в TCPlp.

Это необходимо, поскольку поле mTcbListen, хотя и непрозрачное в своем объявлении, в реализации TCP рассматривается как структура tcpcb.

OT_TCP_RECEIVE_BUFFER_SIZE_FEW_HOPS

 OT_TCP_RECEIVE_BUFFER_SIZE_FEW_HOPS 2598

Рекомендуемый размер буфера для TCP-соединений, которые проходят около 3 беспроводных прыжков или меньше.

На платформах, где объем памяти особенно ограничен, и в ситуациях, когда высокая пропускная способность не требуется, может оказаться желательным вручную выбрать меньший размер буфера.

OT_TCP_RECEIVE_BUFFER_SIZE_MANY_HOPS

 OT_TCP_RECEIVE_BUFFER_SIZE_MANY_HOPS 4157

Рекомендуемый размер буфера для TCP-соединений, которые проходят через множество беспроводных переходов.

Если TCP-соединение проходит очень большое количество переходов (более 6 или около того), возможно, будет целесообразно выбрать большой размер буфера вручную.

Ресурсы

Справочные разделы API OpenThread взяты из исходного кода, доступного на GitHub . Для получения дополнительной информации или внесения вклада в нашу документацию обратитесь к Ресурсам .