TCP
Questo modulo include funzioni che controllano la comunicazione TCP.
Riepilogo
Enumerazioni |
|
---|---|
anonymous enum
|
enum Definisce i flag passati a otTcpConnect(). |
anonymous enum
|
enum Definisce i flag passati a otTcpSendByReference . |
otTcpDisconnectedReason
|
enum |
otTcpIncomingConnectionAction{
|
enum Definisce le azioni di connessione in entrata. |
Typedef |
|
---|---|
otLinkedBuffer
|
typedefstruct otLinkedBuffer
Una struttura di buffer collegata da utilizzare con TCP. |
otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer)
|
typedefvoid(*
Questo callback indica che la connessione TCP è ora pronta per la comunicazione bidirezionale. |
otTcpAcceptReady)(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto)
|
typedef Questo callback indica che è arrivata una connessione in entrata corrispondente a questo listener TCP. |
otTcpDisconnected)(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason)
|
typedefvoid(*
Questo callback indica che la connessione è stata interrotta e non deve più essere utilizzata o che la connessione è passata allo stato TIME-WAIT. |
otTcpDisconnectedReason
|
typedefenum otTcpDisconnectedReason
|
otTcpEndpoint
|
typedefstruct otTcpEndpoint
|
otTcpEndpointInitializeArgs
|
typedefstruct otTcpEndpointInitializeArgs
Contiene argomenti per la funzione otTcpEndpointInitialize(). |
otTcpEstablished)(otTcpEndpoint *aEndpoint)
|
typedefvoid(*
Questo callback informa l'applicazione che l'handshake TCP a 3 vie è stato completato e che la connessione è stata stabilita. |
otTcpForwardProgress)(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog)
|
typedefvoid(*
Questo callback informa l'applicazione se il trasferimento dei dati dal buffer di invio al destinatario è stato completato. |
otTcpIncomingConnectionAction
|
typedef Definisce le azioni di connessione in entrata. |
otTcpListener
|
typedefstruct otTcpListener
|
otTcpListenerInitializeArgs
|
typedefstruct otTcpListenerInitializeArgs
Contiene argomenti per la funzione otTcpListenerInitialize(). |
otTcpReceiveAvailable)(otTcpEndpoint *aEndpoint, size_t aBytesAvailable, bool aEndOfStream, size_t aBytesRemaining)
|
typedefvoid(*
Questo callback indica il numero di byte disponibili per l'utilizzo dal buffer di ricezione. |
otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData)
|
typedefvoid(*
Questo callback informa l'applicazione che i dati nell'elemento aData fornito sono stati confermati dal peer di connessione e che aData e i dati che contiene possono essere recuperati dall'applicazione. |
Funzioni |
|
---|---|
otTcpAbort(otTcpEndpoint *aEndpoint)
|
Termina forzatamente la connessione TCP associata a questo endpoint TCP.
|
otTcpBind(otTcpEndpoint *aEndpoint, const otSockAddr *aSockName)
|
Associa l'endpoint TCP a un indirizzo IP e a una porta.
|
otTcpCommitReceive(otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags)
|
Comunica allo stack TCP che l'applicazione ha terminato l'elaborazione di
aNumBytes byte di dati all'inizio del buffer di ricezione e che lo stack TCP non deve continuare a mantenere quei byte nel buffer di ricezione. |
otTcpConnect(otTcpEndpoint *aEndpoint, const otSockAddr *aSockName, uint32_t aFlags)
|
Registra l'host remoto e la porta per questa connessione.
|
otTcpEndpointDeinitialize(otTcpEndpoint *aEndpoint)
|
Deinizializza questo endpoint TCP.
|
otTcpEndpointGetContext(otTcpEndpoint *aEndpoint)
|
void *
Consente di ottenere il puntatore al contesto associato a
aEndpoint al momento dell'inizializzazione. |
otTcpEndpointGetInstance(otTcpEndpoint *aEndpoint)
|
Consente di ottenere l'istanza otInstance associata a
aEndpoint al momento dell'inizializzazione. |
otTcpEndpointInitialize(otInstance *aInstance, otTcpEndpoint *aEndpoint, const otTcpEndpointInitializeArgs *aArgs)
|
Inizializza un endpoint TCP.
|
otTcpGetLocalAddress(const otTcpEndpoint *aEndpoint)
|
const otSockAddr *
Restituisce un puntatore all'host locale e alla porta di un endpoint TCP.
|
otTcpGetPeerAddress(const otTcpEndpoint *aEndpoint)
|
const otSockAddr *
Restituisce un puntatore all'host e alla porta del peer di un endpoint TCP.
|
otTcpListen(otTcpListener *aListener, const otSockAddr *aSockName)
|
Consente alle connessioni TCP in entrata che corrispondono all'indirizzo IP e alla porta specificati di attivare i callback di questo listener TCP.
|
otTcpListenerDeinitialize(otTcpListener *aListener)
|
Deinizializza questo listener TCP.
|
otTcpListenerGetContext(otTcpListener *aListener)
|
void *
Consente di ottenere il puntatore al contesto associato a
aListener al momento dell'inizializzazione. |
otTcpListenerGetInstance(otTcpListener *aListener)
|
Consente di ottenere l'istanza otInstance associata a
aListener al momento dell'inizializzazione. |
otTcpListenerInitialize(otInstance *aInstance, otTcpListener *aListener, const otTcpListenerInitializeArgs *aArgs)
|
Inizializza un listener TCP.
|
otTcpReceiveByReference(otTcpEndpoint *aEndpoint, const otLinkedBuffer **aBuffer)
|
Fornisce all'applicazione una catena di buffer collegata che fa riferimento ai dati attualmente presenti nel buffer di ricezione TCP.
|
otTcpReceiveContiguify(otTcpEndpoint *aEndpoint)
|
Riorganizza il buffer di ricezione in modo che sia completamente contiguo in memoria.
|
otTcpSendByExtension(otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags)
|
Aggiunge dati al buffer di invio estendendo la lunghezza del otLinkedBuffer finale nel buffer di invio del valore specificato.
|
otTcpSendByReference(otTcpEndpoint *aEndpoint, otLinkedBuffer *aBuffer, uint32_t aFlags)
|
Aggiunge al buffer di invio i dati a cui fa riferimento il buffer collegato a cui punta
aBuffer . |
otTcpSendEndOfStream(otTcpEndpoint *aEndpoint)
|
Comunica al peer di connessione che questo endpoint TCP non invierà altri dati.
|
otTcpStopListening(otTcpListener *aListener)
|
Causa l'interruzione dell'ascolto di connessioni in entrata da parte del listener TCP.
|
Strutture |
|
---|---|
otLinkedBuffer |
Una struttura di buffer collegata da utilizzare con TCP. |
otTcpEndpoint |
Rappresenta un endpoint TCP. |
otTcpEndpointInitializeArgs |
Contiene argomenti per la funzione otTcpEndpointInitialize(). |
otTcpListener |
Rappresenta un listener TCP. |
otTcpListenerInitializeArgs |
Contiene argomenti per la funzione otTcpListenerInitialize(). |
Enumerazioni
enum anonimo
anonymous enum
Definisce i flag passati a otTcpSendByReference
.
otTcpDisconnectedReason
otTcpDisconnectedReason
otTcpIncomingConnectionAction
otTcpIncomingConnectionAction
Definisce le azioni di connessione in entrata.
Questo viene utilizzato nel callback otTcpAcceptReady().
Proprietà | |
---|---|
OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT
|
Accetta la connessione in entrata. |
OT_TCP_INCOMING_CONNECTION_ACTION_DEFER
|
Rimanda (ignorando silenziosamente) la connessione in entrata. |
OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE
|
Rifiutare la connessione in entrata. |
Typedef
otLinkedBuffer
struct otLinkedBuffer otLinkedBuffer
Una struttura di buffer collegata da utilizzare con TCP.
Una singola struttura otLinkedBuffer fa riferimento a un array di byte in memoria, tramite mData e mLength. Il campo mNext viene utilizzato per formare una catena di strutture otLinkedBuffer.
otTcpAcceptDone
void(* otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer)
Questo callback indica che la connessione TCP è ora pronta per la comunicazione bidirezionale.
Nel caso dell'apertura rapida TCP, potrebbe avvenire prima che l'handshake della connessione TCP sia stato effettivamente completato. All'applicazione vengono forniti puntatori di contesto sia per il listener TCP che ha accettato la connessione sia per l'endpoint TCP in cui è stata accettata. Il contesto fornito è quello associato al listener TCP.
Dettagli | |||||||
---|---|---|---|---|---|---|---|
Parametri |
|
otTcpAcceptReady
otTcpIncomingConnectionAction(* otTcpAcceptReady)(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto)
Questo callback indica che è arrivata una connessione in entrata corrispondente a questo listener TCP.
La risposta tipica è che l'applicazione accetti la connessione in entrata. Per farlo, compila aAcceptInto
con un puntatore a otTcpEndpoint in cui accettare la connessione in entrata. Questo otTcpEndpoint deve essere già stato inizializzato utilizzando otTcpEndpointInitialize(). Successivamente, l'applicazione restituisce OT_TCP_INCOMING_CONNECTION_ACTION_);">.
In alternativa, l'applicazione può rifiutare di accettare la connessione in entrata. L'applicazione può farlo in due modi. Innanzitutto, se l'applicazione restituisce OT_TCP_INCOMING_CONNECTION_ACTION_DEFER, OpenThread ignora automaticamente la richiesta di creazione della connessione; è probabile che il peer di connessione ritrasmetta la richiesta, dopodiché il callback verrà richiamato. Ciò è utile se al momento non sono disponibili risorse per accettare la connessione, ma potrebbero esserlo quando il peer di connessione ritrasmette il tentativo di connessione. In secondo luogo, se l'applicazione restituisce OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE, OpenThread invia un messaggio "Connessione rifiutata" all'host che ha tentato di stabilire una connessione. Se l'applicazione rifiuta la connessione in entrata, non è necessario compilare aAcceptInto
.
Dettagli | |||||||
---|---|---|---|---|---|---|---|
Parametri |
|
||||||
Restituisce |
Descrizione di come gestire la connessione in entrata.
|
otTcpDisconnected
void(* otTcpDisconnected)(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason)
Questo callback indica che la connessione è stata interrotta e non deve più essere utilizzata o che la connessione è passata allo stato TIME-WAIT.
Può verificarsi se un tentativo di stabilire una connessione (avviato chiamando otTcpConnect()) non va a buon fine o in qualsiasi momento successivo (ad es. se la connessione scade o viene ricevuto un segmento RST dal peer di connessione). Una volta attivato questo callback, tutte le risorse fornite dall'applicazione per questa connessione (ovvero qualsiasi otLinkedBuffers
e memoria a cui fanno riferimento, ma non l'endpoint TCP stesso o lo spazio per i buffer di ricezione) possono essere recuperate. Nel caso in cui una connessione entri nello stato TIME-WAIT, questo callback viene chiamato due volte, una volta all'accesso allo stato TIME-WAIT (con OT_TCP_DISCONNECTED_REASON_TIME_WAIT e una volta alla scadenza dello stato TIME-WAIT (con OT_TCP_DISCONNECTED_REASON_NORMAL).
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
otTcpDisconnectedReason
enum otTcpDisconnectedReason otTcpDisconnectedReason
otTcpEndpoint
struct otTcpEndpoint otTcpEndpoint
otTcpEndpointInitializeArgs
struct otTcpEndpointInitializeArgs otTcpEndpointInitializeArgs
Contiene argomenti per la funzione otTcpEndpointInitialize().
otTcpEstablished
void(* otTcpEstablished)(otTcpEndpoint *aEndpoint)
Questo callback informa l'applicazione che l'handshake TCP a 3 vie è stato completato e che la connessione è stata stabilita.
Dettagli | |||
---|---|---|---|
Parametri |
|
otTcpForwardProgress
void(* otTcpForwardProgress)(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog)
Questo callback informa l'applicazione se il trasferimento dei dati dal buffer di invio al destinatario è stato completato.
Questo callback non è necessario per il corretto funzionamento TCP. La maggior parte delle applicazioni può affidarsi al callback otTcpSendDone() per recuperare i buffer collegati una volta che lo stack TCP li utilizza. Lo scopo di questo callback è supportare applicazioni avanzate che beneficiano di informazioni più granulari sul progresso della connessione nel trasferimento dei dati al peer di connessione.
L'operazione di questo callback è strettamente legata al buffer di invio di TCP. Il buffer di invio può essere interpretato come se avesse due regioni. La prima è la regione "in volo" nella parte anteriore del buffer di invio. Corrisponde ai dati che sono stati inviati al destinatario, ma non sono ancora stati confermati. La seconda è la regione "backlog", che consiste in tutti i dati nel buffer di invio che non si trovano nella regione "in-flight". La regione "backlog" corrisponde ai dati in coda per l'invio, ma che non sono stati ancora inviati.
Il callback viene richiamato in risposta a due tipi di eventi. Innanzitutto, la regione "in-flight" del buffer di invio potrebbe ridursi (ad esempio, quando il destinatario riconosce i dati che abbiamo inviato in precedenza). In secondo luogo, la regione "backlog" del buffer di invio potrebbe ridursi (ad esempio, sono stati inviati nuovi dati). Queste due condizioni spesso si verificano contemporaneamente, in risposta a un segmento ACK dal peer di connessione, motivo per cui vengono combinate in un unico callback.
Lo stack TCP utilizza solo i byte aInSendBuffer
nella parte posteriore del buffer di invio; quando aInSendBuffer
diminuisce di una quantità x, significa che x byte aggiuntivi che in precedenza erano in cima al buffer di invio non fanno più parte del buffer di invio e ora possono essere rivendicati (ossia sovrascritti) dall'applicazione. Tieni presente che la struttura otLinkedBuffer può essere recuperata solo quando tutti i byte a cui fa riferimento non fanno più parte del buffer di invio.
Questo callback prende in considerazione otTcpSendDone() nel seguente senso: le applicazioni possono determinare quando è possibile recuperare i buffer collegati confrontando aInSendBuffer
con il numero di byte presenti in ogni buffer collegato. Tuttavia, prevediamo che l'utilizzo di otTcpSendDone(), che comunica direttamente quali otLinkedBuffers può essere rivendicato, sia molto più semplice. Se entrambi i callback sono registrati e vengono attivati dallo stesso evento (ad es. lo stesso segmento ACK ricevuto), viene attivato prima il callback otTcpSendDone(), seguito da questo callback.
Inoltre, questo callback fornisce aBacklog
, che indica quanti byte di dati nel buffer di invio non sono ancora in corso di pubblicazione. Per le applicazioni che vogliono aggiungere dati al buffer di invio solo quando si ha la certezza che verranno inviati a breve, potrebbe essere opportuno inviare i dati solo quando aBacklog
è adeguatamente piccolo (0 o vicino a 0). Ad esempio, un'applicazione potrebbe utilizzare aBacklog
in modo da poter reagire all'accumulo della coda eliminando o aggregando i dati per evitare di creare un backlog di dati.
Dopo una chiamata a otTcpSendByReference() o a otTcpSendByExtension() con un numero positivo di byte, viene garantito il callback otTcpForwardProgress() per indicare quando vengono inviati i byte aggiunti al buffer di invio. La chiamata a otTcpForwardProgress() può essere effettuata immediatamente dopo che i byte sono stati aggiunti al buffer di invio (se alcuni di questi byte vengono inviati immediatamente, riducendo il backlog) o in futuro (quando la connessione invia alcuni o tutti i dati, riducendo il backlog). Con "immediatamente", intendiamo che il callback viene immediatamente programmato per l'esecuzione in un tasklet; per evitare complessità legate al rientro, il callback otTcpForwardProgress() non viene mai chiamato direttamente dalle funzioni otTcpSendByReference() o otTcpSendByExtension().
Dettagli | |||||||
---|---|---|---|---|---|---|---|
Parametri |
|
otTcpIncomingConnectionAction
enum otTcpIncomingConnectionAction otTcpIncomingConnectionAction
Definisce le azioni di connessione in entrata.
Questo viene utilizzato nel callback otTcpAcceptReady().
otTcpListener
struct otTcpListener otTcpListener
otTcpListenerInitializeArgs
struct otTcpListenerInitializeArgs otTcpListenerInitializeArgs
Contiene argomenti per la funzione otTcpListenerInitialize().
otTcpReceiveAvailable
void(* otTcpReceiveAvailable)(otTcpEndpoint *aEndpoint, size_t aBytesAvailable, bool aEndOfStream, size_t aBytesRemaining)
Questo callback indica il numero di byte disponibili per l'utilizzo dal buffer di ricezione.
Viene chiamato ogni volta che vengono aggiunti byte al buffer di ricezione e quando viene raggiunta la fine del flusso. Se è stata raggiunta la fine del flusso (ad esempio, se non saranno disponibili altri dati per la lettura perché il peer della connessione ha chiuso la fine della connessione per la scrittura), aEndOfStream
è true. Infine, aBytesRemaining
indica la quantità di capacità rimanente nel buffer di ricezione per contenere i dati aggiuntivi in arrivo.
Dettagli | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parametri |
|
otTcpSendDone
void(* otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData)
Questo callback informa l'applicazione che i dati nell'elemento aData
fornito sono stati confermati dal peer di connessione e che aData
e i dati che contiene possono essere recuperati dall'applicazione.
aData
è garantito che siano identici a quelli trasmessi al protocollo TCP tramite otTcpSendByReference(), incluse eventuali estensioni effettuate tramite otTcpSendByExtension().
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
Funzioni
otTcpAbort
otError otTcpAbort( otTcpEndpoint *aEndpoint )
Termina forzatamente la connessione TCP associata a questo endpoint TCP.
In questo modo l'endpoint TCP può essere immediatamente utilizzato per un'altra connessione e i buffer di invio e ricezione vengono svuotati, trasferendo la proprietà di tutti i dati forniti dall'applicazione in otTcpSendByReference() e otTcpSendByExtension() per l'applicazione. I callback e la memoria dell'endpoint TCP per il buffer di ricezione rimangono associati all'endpoint TCP.
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
||||
Valori restituiti |
|
otTcpBind
otError otTcpBind( otTcpEndpoint *aEndpoint, const otSockAddr *aSockName )
Associa l'endpoint TCP a un indirizzo IP e a una porta.
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
||||
Valori restituiti |
|
otTcpCommitReceive
otError otTcpCommitReceive( otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags )
Comunica allo stack TCP che l'applicazione ha terminato l'elaborazione di aNumBytes
byte di dati all'inizio del buffer di ricezione e che lo stack TCP non deve continuare a mantenere quei byte nel buffer di ricezione.
Dettagli | |||||||
---|---|---|---|---|---|---|---|
Parametri |
|
||||||
Valori restituiti |
|
otTcpConnect
otError otTcpConnect( otTcpEndpoint *aEndpoint, const otSockAddr *aSockName, uint32_t aFlags )
Registra l'host remoto e la porta per questa connessione.
L'apertura rapida TCP deve essere attivata o disattivata tramite aFlags
. Se viene disattivato, viene avviato immediatamente l'handshake della creazione della connessione TCP. Se viene attivata, questa funzione registra soltanto l'host e la porta remoti e l'handshake della creazione della connessione TCP avviene solo durante la prima chiamata a otTcpSendByReference()
.
Se l'opzione Apertura rapida TCP è disattivata, il chiamante deve attendere il callback otTcpEstablished
che indica che è stato eseguito l'handshake della creazione della connessione TCP prima di poter iniziare a inviare dati, ad esempio chiamando il numero otTcpSendByReference()
.
Dettagli | |||||||
---|---|---|---|---|---|---|---|
Parametri |
|
||||||
Valori restituiti |
|
otTcpEndpointDeinitialize
otError otTcpEndpointDeinitialize( otTcpEndpoint *aEndpoint )
Deinizializza questo endpoint TCP.
Ciò significa che OpenThread non tiene più traccia di questo endpoint TCP e distribuisce tutte le risorse che ha allocato internamente per questo endpoint TCP. L'applicazione può riutilizzare la memoria di supporto dell'endpoint TCP come ritiene opportuno.
Se corrisponde a una connessione TCP in tempo reale, la connessione viene terminata senza cerimonie (come in otTcpAbort()). Tutte le risorse fornite dall'applicazione per questo endpoint TCP (buffer collegati per il buffer di invio, memoria per il buffer di ricezione, la struttura aEndpoint
stessa e così via) vengono immediatamente restituite all'applicazione.
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
||||
Valori restituiti |
|
otTcpEndpointGetContext
void * otTcpEndpointGetContext( otTcpEndpoint *aEndpoint )
Consente di ottenere il puntatore al contesto associato a aEndpoint
al momento dell'inizializzazione.
Dettagli | |||
---|---|---|---|
Parametri |
|
||
Restituisce |
Il puntatore di contesto associato a
aEndpoint . |
otTcpEndpointGetInstance
otInstance * otTcpEndpointGetInstance( otTcpEndpoint *aEndpoint )
Consente di ottenere l'istanza otInstance associata a aEndpoint
al momento dell'inizializzazione.
Dettagli | |||
---|---|---|---|
Parametri |
|
||
Restituisce |
Il puntatore otInstance associato a
aEndpoint . |
otTcpEndpointInitialize
otError otTcpEndpointInitialize( otInstance *aInstance, otTcpEndpoint *aEndpoint, const otTcpEndpointInitializeArgs *aArgs )
Inizializza un endpoint TCP.
Se chiami questa funzione, OpenThread tiene traccia dell'endpoint TCP e archivia e recupera i dati TCP all'interno di aEndpoint
. L'applicazione non deve accedere o modificare direttamente i campi in aEndpoint
. Se l'applicazione deve recuperare la memoria di supporto aEndpoint
, dovrebbe chiamare otTcpEndpointDeinitialize().
Dettagli | |||||||
---|---|---|---|---|---|---|---|
Parametri |
|
||||||
Valori restituiti |
|
otTcpGetLocalAddress
const otSockAddr * otTcpGetLocalAddress( const otTcpEndpoint *aEndpoint )
Restituisce un puntatore all'host locale e alla porta di un endpoint TCP.
I contenuti dell'host e della porta potrebbero non essere aggiornati se il socket non è connesso e non è stato associato dopo l'ultima disconnessione.
Dettagli | |||
---|---|---|---|
Parametri |
|
||
Restituisce |
L'host e la porta locali di
aEndpoint . |
otTcpGetPeerAddress
const otSockAddr * otTcpGetPeerAddress( const otTcpEndpoint *aEndpoint )
Restituisce un puntatore all'host e alla porta del peer di un endpoint TCP.
I contenuti dell'host e della porta potrebbero essere inattivi se questo socket non è in stato connesso.
Dettagli | |||
---|---|---|---|
Parametri |
|
||
Restituisce |
L'host e la porta del peer di connessione di
aEndpoint . |
otTcpListen
otError otTcpListen( otTcpListener *aListener, const otSockAddr *aSockName )
Consente alle connessioni TCP in entrata che corrispondono all'indirizzo IP e alla porta specificati di attivare i callback di questo listener TCP.
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
||||
Valori restituiti |
|
otTcpListenerDeinitialize
otError otTcpListenerDeinitialize( otTcpListener *aListener )
Deinizializza questo listener TCP.
Ciò significa che OpenThread non tiene più traccia di questo listener TCP e distribuisce tutte le risorse che ha allocato internamente per questo listener TCP. L'applicazione può riutilizzare la memoria di supporto del listener TCP come ritiene opportuno.
Se il listener TCP è attualmente in ascolto, smette di ascoltare.
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
||||
Valori restituiti |
|
otTcpListenerGetContext
void * otTcpListenerGetContext( otTcpListener *aListener )
Consente di ottenere il puntatore al contesto associato a aListener
al momento dell'inizializzazione.
Dettagli | |||
---|---|---|---|
Parametri |
|
||
Restituisce |
Il puntatore di contesto associato a
aListener . |
otTcpListenerGetInstance
otInstance * otTcpListenerGetInstance( otTcpListener *aListener )
Consente di ottenere l'istanza otInstance associata a aListener
al momento dell'inizializzazione.
Dettagli | |||
---|---|---|---|
Parametri |
|
||
Restituisce |
Il puntatore otInstance associato a
aListener . |
otTcpListenerInitialize
otError otTcpListenerInitialize( otInstance *aInstance, otTcpListener *aListener, const otTcpListenerInitializeArgs *aArgs )
Inizializza un listener TCP.
La chiamata di questa funzione consente a OpenThread di tenere traccia del listener TCP e di archiviare e recuperare i dati TCP all'interno di aListener
. L'applicazione non deve accedere o modificare direttamente i campi in aListener
. Se l'applicazione deve recuperare la memoria di supporto aListener
, dovrebbe chiamare otTcpListenerDeinitialize().
Dettagli | |||||||
---|---|---|---|---|---|---|---|
Parametri |
|
||||||
Valori restituiti |
|
otTcpReceiveByReference
otError otTcpReceiveByReference( otTcpEndpoint *aEndpoint, const otLinkedBuffer **aBuffer )
Fornisce all'applicazione una catena di buffer collegata che fa riferimento ai dati attualmente presenti nel buffer di ricezione TCP.
La catena di buffer collegata è valida fino alla successiva chiamata del callback "receive ready" o fino alla chiamata successiva a otTcpReceiveContiguify() o otTcpCommitReceive().
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
||||
Valori restituiti |
|
otTcpReceiveContiguify
otError otTcpReceiveContiguify( otTcpEndpoint *aEndpoint )
Riorganizza il buffer di ricezione in modo che sia completamente contiguo in memoria.
Questa operazione è facoltativa: un'applicazione può semplicemente attraversare la catena del buffer collegata ottenuta chiamando otTcpReceiveByReference
. Alcune applicazioni potrebbero voler chiamare questa funzione per rendere contiguo il buffer di ricezione in modo da semplificare l'elaborazione dei dati, ma ciò va a scapito del tempo di CPU per riorganizzare i dati nel buffer di ricezione.
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
||||
Valori restituiti |
|
otTcpSendByExtension
otError otTcpSendByExtension( otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags )
Aggiunge dati al buffer di invio estendendo la lunghezza del otLinkedBuffer finale nel buffer di invio del valore specificato.
Se il buffer di invio è vuoto, l'operazione non riesce.
Dettagli | |||||||
---|---|---|---|---|---|---|---|
Parametri |
|
||||||
Valori restituiti |
|
otTcpSendByReference
otError otTcpSendByReference( otTcpEndpoint *aEndpoint, otLinkedBuffer *aBuffer, uint32_t aFlags )
Aggiunge al buffer di invio i dati a cui fa riferimento il buffer collegato a cui punta aBuffer
.
Dopo una chiamata a questa funzione riuscita, il buffer collegato e i dati a cui fa riferimento sono di proprietà dello stack TCP; non dovrebbero essere modificati dall'applicazione finché un callback di invio completato non restituisce la proprietà di questi oggetti all'applicazione. È accettabile chiamare questa funzione per aggiungere un altro buffer collegato alla coda di invio, anche se il callback "invio completato" per una chiamata precedente di questa funzione non è ancora stato attivato.
Tieni presente che aBuffer
non deve essere concatenato; il relativo campo mNext deve essere NULL. Se vengono aggiunti ulteriori dati subito dopo questa chiamata, è necessario utilizzare il flag OT_TCP_SEND_MORE_TO_COME come suggerimento per l'implementazione TCP.
Dettagli | |||||||
---|---|---|---|---|---|---|---|
Parametri |
|
||||||
Valori restituiti |
|
otTcpSendEndOfStream
otError otTcpSendEndOfStream( otTcpEndpoint *aEndpoint )
Comunica al peer di connessione che questo endpoint TCP non invierà altri dati.
Da usare quando l'applicazione non ha altri dati da inviare al peer di connessione. Per questa connessione, le letture future sul peer di connessione genereranno la condizione di "fine del flusso" e le scritture future su questo endpoint di connessione avranno esito negativo.
La condizione di "fine del flusso" si applica solo dopo che i dati precedentemente forniti allo stack TCP da inviare sono stati ricevuti dal peer di connessione.
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
||||
Valori restituiti |
|
otTcpStopListening
otError otTcpStopListening( otTcpListener *aListener )
Causa l'interruzione dell'ascolto di connessioni in entrata da parte del listener TCP.
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
||||
Valori restituiti |
|
Macro
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 e OT_TCP_ENDPOINT_TCB_NUM_POINTERS sono scelti in modo tale che il campo mTcb di otTcpEndpoint abbia le stesse dimensioni di struct tcpcb in TCPlp.
Ciò è necessario perché il campo mTcb, sebbene opaco nella sua dichiarazione, viene trattato come struct tcpcb nell'implementazione TCP.
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 e OT_TCP_LISTENER_TCB_NUM_POINTERS sono scelti in modo tale che il campo mTcbListener di otTcpListener abbia le stesse dimensioni di struct tcpcb_listen in TCPlp.
Ciò è necessario perché il campo mTcbListen, sebbene opaco nella sua dichiarazione, viene trattato come struct tcpcb nell'implementazione TCP.
OT_TCP_RECEIVE_BUFFER_SIZE_FEW_HOPS
OT_TCP_RECEIVE_BUFFER_SIZE_FEW_HOPS 2598
Dimensione del buffer consigliata per le connessioni TCP che attraversano circa 3 hop wireless o meno.
Sulle piattaforme in cui la memoria è particolarmente limitata e in situazioni in cui non è necessaria un'elevata larghezza di banda, potrebbe essere preferibile selezionare manualmente una dimensione del buffer inferiore.
OT_TCP_RECEIVE_BUFFER_SIZE_MANY_HOPS
OT_TCP_RECEIVE_BUFFER_SIZE_MANY_HOPS 4157
Dimensione del buffer consigliata per le connessioni TCP che attraversano molti hop wireless.
Se la connessione TCP attraversa un numero molto elevato di hop (più di 6 circa), potrebbe essere consigliabile selezionare manualmente una dimensione del buffer grande.
Risorse
Gli argomenti di riferimento dell'API OpenThread provengono dal codice sorgente, disponibile su GitHub. Per saperne di più o per contribuire alla nostra documentazione, consulta la sezione Risorse.