TCP
Этот модуль включает функции, управляющие TCP-коммуникацией.
Краткое содержание
Перечисления | |
---|---|
anonymous enum | перечисление Определяет флаги, передаваемые в otTcpConnect() . |
anonymous enum | перечисление Определяет флаги, передаваемые в otTcpSendByReference . |
otTcpDisconnectedReason | перечисление |
otTcpIncomingConnectionAction { | перечисление Определяет действия при входящем соединении. |
Определения типов | |
---|---|
otLinkedBuffer | определение типаstruct 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 | определение типаstruct otTcpEndpoint |
otTcpEndpointInitializeArgs | определение типаstruct otTcpEndpointInitializeArgs Содержит аргументы функции otTcpEndpointInitialize() . |
otTcpEstablished )(otTcpEndpoint *aEndpoint) | определение типаvoid(* Этот обратный вызов сообщает приложению, что трехстороннее подтверждение TCP завершено и теперь соединение установлено. |
otTcpForwardProgress )(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog) | определение типаvoid(* Этот обратный вызов сообщает приложению, был ли достигнут прогресс в передаче данных из буфера отправки получателю. |
otTcpIncomingConnectionAction | определение типа Определяет действия при входящем соединении. |
otTcpListener | определение типаstruct otTcpListener |
otTcpListenerInitializeArgs | определение типаstruct 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
Определяет флаги, передаваемые в otTcpSendByReference
.
отТкпдисконнектедреасон
otTcpDisconnectedReason
отткпинкомингконнектионэкшн
otTcpIncomingConnectionAction
Определяет действия при входящем соединении.
Это используется в обратном вызове otTcpAcceptReady() .
Определения типов
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.
Подробности | |||||||
---|---|---|---|---|---|---|---|
Параметры |
|
отТкпакцептреди
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
не требуется.
Подробности | |||||||
---|---|---|---|---|---|---|---|
Параметры |
| ||||||
Возврат | Описание того, как обрабатывать входящее соединение. |
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).
Подробности | |||||
---|---|---|---|---|---|
Параметры |
|
отТкпдисконнектедреасон
enum otTcpDisconnectedReason otTcpDisconnectedReason
otTcpEndpoint
struct otTcpEndpoint otTcpEndpoint
otTcpEndpointInitializeArgs
struct otTcpEndpointInitializeArgs otTcpEndpointInitializeArgs
Содержит аргументы функции otTcpEndpointInitialize() .
otTcpEstablished
void(* otTcpEstablished)(otTcpEndpoint *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() .
Подробности | |||||||
---|---|---|---|---|---|---|---|
Параметры |
|
отткпинкомингконнектионэкшн
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
указывает, сколько емкости осталось в буфере приема для хранения дополнительных поступающих данных.
Подробности | |||||||||
---|---|---|---|---|---|---|---|---|---|
Параметры |
|
otTcpSendDone
void(* otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData)
Этот обратный вызов сообщает приложению, что данные в предоставленном aData
были подтверждены одноранговым соединением и что aData
и содержащиеся в нем данные могут быть возвращены приложением.
aData
гарантированно будут идентичны тем, которые передаются в TCP через otTcpSendByReference() , включая любые расширения, выполняемые через otTcpSendByExtension() .
Подробности | |||||
---|---|---|---|---|---|
Параметры |
|
Функции
otTcpAbort
otError otTcpAbort( otTcpEndpoint *aEndpoint )
Принудительно завершает TCP-соединение, связанное с этой конечной точкой TCP.
Это немедленно освобождает конечную точку TCP для использования для другого соединения и очищает буферы отправки и приема, передавая право собственности на любые данные, предоставленные приложением в вызовах otTcpSendByReference() и otTcpSendByExtension(), обратно приложению. Обратные вызовы конечной точки TCP и память для буфера приема остаются связанными с конечной точкой TCP.
Подробности | |||||
---|---|---|---|---|---|
Параметры |
| ||||
Возвращаемые значения |
|
отТкпбинд
otError otTcpBind( otTcpEndpoint *aEndpoint, const otSockAddr *aSockName )
Привязывает конечную точку TCP к IP-адресу и порту.
Подробности | |||||
---|---|---|---|---|---|
Параметры |
| ||||
Возвращаемые значения |
|
otTcpCommitReceive
otError otTcpCommitReceive( otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags )
Сообщает стеку TCP, что приложение завершило обработку aNumBytes
байтов данных в начале буфера приема и что стеку TCP не нужно продолжать поддерживать эти байты в буфере приема.
Подробности | |||||||
---|---|---|---|---|---|---|---|
Параметры |
| ||||||
Возвращаемые значения |
|
otTcpConnect
otError otTcpConnect( otTcpEndpoint *aEndpoint, const otSockAddr *aSockName, uint32_t aFlags )
Записывает удаленный хост и порт для этого подключения.
TCP Fast Open необходимо включить или отключить с помощью aFlags
. Если он отключен, то подтверждение установления TCP-соединения инициируется немедленно. Если она включена, то эта функция просто записывает удаленный хост и порт, а подтверждение установления TCP-соединения происходит только при первом вызове otTcpSendByReference()
.
Если TCP Fast Open отключен, вызывающий объект должен дождаться обратного вызова otTcpEstablished
указывающего, что установление соединения TCP выполнено, прежде чем он сможет начать отправку данных, например, путем вызова otTcpSendByReference()
.
Подробности | |||||||
---|---|---|---|---|---|---|---|
Параметры |
| ||||||
Возвращаемые значения |
|
otTcpEndpointDeinitialize
otError otTcpEndpointDeinitialize( otTcpEndpoint *aEndpoint )
Деинициализирует эту конечную точку TCP.
Это означает, что OpenThread больше не отслеживает эту конечную точку TCP и освобождает все ресурсы, которые он внутренне выделил для этой конечной точки TCP. Приложение может повторно использовать память, поддерживающую конечную точку TCP, по своему усмотрению.
Если это соответствует реальному TCP-соединению, соединение прерывается бесцеремонно (как в otTcpAbort() ). Все ресурсы, предоставленные приложением для этой конечной точки TCP (связанные буферы для буфера отправки, память для буфера приема, сама структура aEndpoint
и т. д.), немедленно возвращаются приложению.
Подробности | |||||
---|---|---|---|---|---|
Параметры |
| ||||
Возвращаемые значения |
|
отТкпендпойнтжетконтекст
void * otTcpEndpointGetContext( otTcpEndpoint *aEndpoint )
Получает указатель контекста, который был связан с aEndpoint
при инициализации.
Подробности | |||
---|---|---|---|
Параметры |
| ||
Возврат | Указатель контекста, связанный с aEndpoint . |
отТкпендпойнтжетинстанце
otInstance * otTcpEndpointGetInstance( otTcpEndpoint *aEndpoint )
Получает otInstance, который был связан с aEndpoint
при инициализации.
Подробности | |||
---|---|---|---|
Параметры |
| ||
Возврат | Указатель otInstance, связанный с aEndpoint . |
otTcpEndpointInitialize
otError otTcpEndpointInitialize( otInstance *aInstance, otTcpEndpoint *aEndpoint, const otTcpEndpointInitializeArgs *aArgs )
Инициализирует конечную точку TCP.
Вызов этой функции заставляет OpenThread отслеживать конечную точку TCP, а также сохранять и извлекать данные TCP внутри aEndpoint
. Приложению следует воздерживаться от прямого доступа или изменения полей в aEndpoint
. Если приложению необходимо освободить память, поддерживающую aEndpoint
, оно должно вызвать otTcpEndpointDeinitialize() .
Подробности | |||||||
---|---|---|---|---|---|---|---|
Параметры |
| ||||||
Возвращаемые значения |
|
отТкпжетлокалдресс
const otSockAddr * otTcpGetLocalAddress( const otTcpEndpoint *aEndpoint )
Получает указатель на локальный хост и порт конечной точки TCP.
Содержимое хоста и порта может быть устаревшим, если этот сокет не находится в подключенном состоянии и не был привязан после последнего отключения.
Подробности | |||
---|---|---|---|
Параметры |
| ||
Возврат | Локальный хост и порт aEndpoint . |
отТкпжетпеерадрес
const otSockAddr * otTcpGetPeerAddress( const otTcpEndpoint *aEndpoint )
Получает указатель на хост и порт узла конечной точки TCP.
Содержимое хоста и порта может быть устаревшим, если этот сокет не находится в подключенном состоянии.
Подробности | |||
---|---|---|---|
Параметры |
| ||
Возврат | Хост и порт узла соединения aEndpoint . |
otTcpListen
otError otTcpListen( otTcpListener *aListener, const otSockAddr *aSockName )
Заставляет входящие TCP-соединения, соответствующие указанному IP-адресу и порту, запускать обратные вызовы этого прослушивателя TCP.
Подробности | |||||
---|---|---|---|---|---|
Параметры |
| ||||
Возвращаемые значения |
|
otTcpListenerДеинициализация
otError otTcpListenerDeinitialize( otTcpListener *aListener )
Деинициализирует этот прослушиватель TCP.
Это означает, что OpenThread больше не отслеживает этот прослушиватель TCP и освобождает все ресурсы, которые он внутренне выделил для этого прослушивателя TCP. Приложение может повторно использовать память, поддерживающую прослушиватель TCP, по своему усмотрению.
Если прослушиватель TCP в данный момент прослушивает, он прекращает прослушивание.
Подробности | |||||
---|---|---|---|---|---|
Параметры |
| ||||
Возвращаемые значения |
|
отТкплистенержетконтекст
void * otTcpListenerGetContext( otTcpListener *aListener )
Получает указатель контекста, который был связан с aListener
при инициализации.
Подробности | |||
---|---|---|---|
Параметры |
| ||
Возврат | Указатель контекста, связанный с aListener . |
отткплистенержетинстанце
otInstance * otTcpListenerGetInstance( otTcpListener *aListener )
Получает otInstance, который был связан с aListener
при инициализации.
Подробности | |||
---|---|---|---|
Параметры |
| ||
Возврат | Указатель otInstance, связанный с aListener . |
otTcpListenerInitialize
otError otTcpListenerInitialize( otInstance *aInstance, otTcpListener *aListener, const otTcpListenerInitializeArgs *aArgs )
Инициализирует прослушиватель TCP.
Вызов этой функции заставляет OpenThread отслеживать прослушиватель TCP, а также сохранять и извлекать данные TCP внутри aListener
. Приложению следует воздерживаться от прямого доступа или изменения полей в aListener
. Если приложению необходимо освободить память, поддерживающую aListener
, ему следует вызвать otTcpListenerDeinitialize() .
Подробности | |||||||
---|---|---|---|---|---|---|---|
Параметры |
| ||||||
Возвращаемые значения |
|
otTcpReceiveByReference
otError otTcpReceiveByReference( otTcpEndpoint *aEndpoint, const otLinkedBuffer **aBuffer )
Предоставляет приложению связанную цепочку буферов, ссылающуюся на данные, которые в данный момент находятся в приемном буфере TCP.
Цепочка связанных буферов действительна до тех пор, пока не будет вызван обратный вызов «готовность к приему» или до следующего вызова otTcpReceiveContiguify() или otTcpCommitReceive() .
Подробности | |||||
---|---|---|---|---|---|
Параметры |
| ||||
Возвращаемые значения |
|
otTcpReceiveContiguify
otError otTcpReceiveContiguify( otTcpEndpoint *aEndpoint )
Реорганизует буфер приема, чтобы он был полностью непрерывным в памяти.
Это необязательно; приложение может просто пройти по связанной цепочке буферов, полученной вызовом otTcpReceiveByReference
. Некоторым приложениям может потребоваться вызвать эту функцию, чтобы сделать буфер приема непрерывным и упростить обработку данных, но это происходит за счет времени ЦП на реорганизацию данных в буфере приема.
Подробности | |||||
---|---|---|---|---|---|
Параметры |
| ||||
Возвращаемые значения |
|
отТкпсендбиекстенсион
otError otTcpSendByExtension( otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags )
Добавляет данные в буфер отправки, увеличивая длину последнего otLinkedBuffer в буфере отправки на указанную величину.
Если буфер отправки пуст, операция завершается неудачей.
Подробности | |||||||
---|---|---|---|---|---|---|---|
Параметры |
| ||||||
Возвращаемые значения |
|
otTcpSendByReference
otError otTcpSendByReference( otTcpEndpoint *aEndpoint, otLinkedBuffer *aBuffer, uint32_t aFlags )
Добавляет данные, на которые ссылается связанный буфер, на который указывает aBuffer
, в буфер отправки.
После успешного вызова этой функции связанный буфер и данные, на которые он ссылается, принадлежат стеку TCP; они не должны изменяться приложением до тех пор, пока обратный вызов «отправить готово» не вернет право владения этими объектами приложению. Допустимо вызвать эту функцию, чтобы добавить еще один связанный буфер в очередь отправки, даже если обратный вызов «отправка выполнена» для предыдущего вызова этой функции еще не сработал.
Обратите внимание, что aBuffer
не должен быть связан; его поле mNext должно быть NULL. Если дополнительные данные будут добавлены сразу после этого вызова, то флаг OT_TCP_SEND_MORE_TO_COME следует использовать как подсказку к реализации TCP.
Подробности | |||||||
---|---|---|---|---|---|---|---|
Параметры |
| ||||||
Возвращаемые значения |
|
отТкпсендофстрим
otError otTcpSendEndOfStream( otTcpEndpoint *aEndpoint )
Сообщает одноранговому соединению, что эта конечная точка TCP не будет отправлять дополнительные данные.
Это следует использовать, когда у приложения больше нет данных для отправки партнеру соединения. Для этого соединения будущие чтения на одноранговом соединении приведут к состоянию «конец потока», а будущие записи в этой конечной точке соединения завершится сбоем.
Условие «конец потока» применяется только после того, как любые данные, ранее предоставленные в стек TCP для отправки, были получены одноранговым соединением.
Подробности | |||||
---|---|---|---|---|---|
Параметры |
| ||||
Возвращаемые значения |
|
otTcpStopListening
otError otTcpStopListening( otTcpListener *aListener )
Заставляет этот прослушиватель 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 . Для получения дополнительной информации или внесения вклада в нашу документацию обратитесь к Ресурсам .