TCP 추상화
이 모듈에는 기본 TCP API 위에 사용하기 쉬운 추상화가 포함됩니다.
요약
Typedef |
|
---|---|
otTcpCircularSendBuffer
|
typedefstruct otTcpCircularSendBuffer
이 구조는 TCP 엔드포인트와 함께 사용할 순환 전송 버퍼를 나타냅니다. |
Functions |
|
---|---|
otTcpCircularSendBufferDeinitialize(otTcpCircularSendBuffer *aSendBuffer)
|
TCP 순환 전송 버퍼를 초기화하고 연결된 경우 분리합니다.
|
otTcpCircularSendBufferForceDiscardAll(otTcpCircularSendBuffer *aSendBuffer)
|
void
순환 전송 버퍼의 모든 데이터를 강제 삭제합니다.
|
otTcpCircularSendBufferFreeSpace(otTcpCircularSendBuffer *aSendBuffer)
|
size_t
TCP 순환 전송 버퍼의 여유 공간을 반환합니다.
|
otTcpCircularSendBufferHandleForwardProgress(otTcpCircularSendBuffer *aSendBuffer, size_t aInSendBuffer)
|
void
otTcpForwardProgress 콜백에서 순환 전송 버퍼별 처리를 수행합니다.
|
otTcpCircularSendBufferInitialize(otTcpCircularSendBuffer *aSendBuffer, void *aDataBuffer, size_t aCapacity)
|
void
TCP 순환 전송 버퍼를 초기화합니다.
|
otTcpCircularSendBufferWrite(otTcpEndpoint *aEndpoint, otTcpCircularSendBuffer *aSendBuffer, void *aData, size_t aLength, size_t *aWritten)
|
제공된 TCP 순환 전송 버퍼를 사용하여 버퍼를 관리하기 위해 TCP 엔드포인트에서 데이터를 전송합니다.
|
구조체 |
|
---|---|
otTcpCircularSendBuffer |
이 구조는 TCP 엔드포인트와 함께 사용할 순환 전송 버퍼를 나타냅니다. |
Typedef
otTcpCircularSendBuffer
struct otTcpCircularSendBuffer otTcpCircularSendBuffer
이 구조는 TCP 엔드포인트와 함께 사용할 순환 전송 버퍼를 나타냅니다.
순환 전송 버퍼 사용은 선택사항입니다. 애플리케이션은 TCP 엔드포인트를 사용하여 otLinkedBuffers를 직접 관리하여 데이터를 전송할 수 있습니다. 하지만 일부 애플리케이션은 순환 전송 버퍼를 사용하는 것이 더 편리할 수 있습니다. 이러한 애플리케이션은 otTcpCircularSendBufferWrite()를 호출하여 쿼터(cache)에 연결 버퍼를 실행하고, TCP 엔드포인트로 순환 전송 버퍼를 전송하여 기본 otLinkedBuffer를 관리하는 순환 엔드포인트 버퍼에서 데이터를 전송할 수 있습니다.
otTcpCircularSendBuffer는 otTcpEndpoint에서 제공되는 otLinkedBuffer 기반 API 위에 구현됩니다. otTcpEndpoint에 연결되면 otTcpCircularSendBuffer가 연결을 위해 otLinkedBuffer를 관리하는 모든 작업을 실행합니다. 즉, otTcpCircularSendBuffer가 otTcpEndpoint에 연결되면 애플리케이션은 otTcpEndpoint에 관해 otTcpSendByReference() 또는 otTcpSendByExtension()을 호출하면 안 됩니다. 대신 애플리케이션은 otTcpCircularSendBufferWrite()를 사용하여 전송 버퍼에 데이터를 추가해야 합니다.
otTcpForwardProgress() 콜백은 순환 보내기 버퍼에서 공간을 사용할 수 있을 때 사용자가 알 수 있도록 하는 방법입니다. otTcpCircularSendBuffer가 연결된 otTcpEndpoint에서 애플리케이션은 otTcpCircularSendBufferHandleForwardProgress() 콜백을 설치하고 콜백 함수 시작 시 연결된 otTcpCircularSendBuffer를 호출해야 합니다(MUST). otLinkedBuffers의 관리는 모두 순환 전송 버퍼에 의해 처리되므로 사용자는 otTcpSendDone() 콜백을 설치하지 않는 것이 좋습니다.
애플리케이션은 이 구조의 필드를 직접 검사해서는 안 되며, 이 파일에서 서명이 제공되는 TCP Circular Send Buffer API 함수를 통해서만 이와 상호작용해야 합니다.
Functions
otTcpCircularSendBufferDeinitialize
otError otTcpCircularSendBufferDeinitialize( otTcpCircularSendBuffer *aSendBuffer )
TCP 순환 전송 버퍼를 초기화하고 연결된 경우 분리합니다.
TCP 순환 전송 버퍼가 비어 있지 않으면 이 작업이 실패합니다.
세부정보 | |||||
---|---|---|---|---|---|
매개변수 |
|
||||
반환 값 |
|
otTcpCircularSendBufferForceDiscardAll
void otTcpCircularSendBufferForceDiscardAll( otTcpCircularSendBuffer *aSendBuffer )
순환 전송 버퍼의 모든 데이터를 강제 삭제합니다.
애플리케이션이 TCP 연결이 비정상적으로 종료될 때 이 함수를 호출해야 합니다 (예: 애플리케이션이 otTcpEndpointAbort()를 호출하거나 otTcpConnectionLost() 콜백을 통해 연결 재설정에 대한 알림을 받은 경우).
TCP 엔드포인트에 연결된 비어 있지 않은 TCP 순환 전송 버퍼에서 이 함수를 호출하면 정의되지 않은 동작이 발생합니다.
세부정보 | |||
---|---|---|---|
매개변수 |
|
otTcpCircularSendBufferFreeSpace
size_t otTcpCircularSendBufferFreeSpace( otTcpCircularSendBuffer *aSendBuffer )
TCP 순환 전송 버퍼의 여유 공간을 반환합니다.
이 작업은 항상 성공합니다.
세부정보 | |||
---|---|---|---|
매개변수 |
|
||
반환 |
전송 버퍼의 여유 공간 크기입니다.
|
otTcpCircularSendBufferHandleForwardProgress
void otTcpCircularSendBufferHandleForwardProgress( otTcpCircularSendBuffer *aSendBuffer, size_t aInSendBuffer )
otTcpForwardProgress 콜백에서 순환 전송 버퍼별 처리를 수행합니다.
애플리케이션은 otTcpEndpoint에 otTcpForwardProgress() 콜백을 설치하고, 순환 전송 버퍼별 처리를 위해 콜백 함수의 시작 부분에서 이 함수를 호출해야 합니다.
콜백 함수에서 애플리케이션은 otTcpCircularSendBufferFreeSpace()를 호출하거나 aInSendBuffer
를 otTcpCircularSendBufferInitialize()를 호출할 때 사용자가 선택한 전송 버퍼 용량과 비교하여 순환 전송 버퍼의 여유 공간을 확인할 수 있습니다.
세부정보 | |||||
---|---|---|---|---|---|
매개변수 |
|
otTcpCircularSendBufferInitialize
void otTcpCircularSendBufferInitialize( otTcpCircularSendBuffer *aSendBuffer, void *aDataBuffer, size_t aCapacity )
TCP 순환 전송 버퍼를 초기화합니다.
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
otTcpCircularSendBufferWrite
otError otTcpCircularSendBufferWrite( otTcpEndpoint *aEndpoint, otTcpCircularSendBuffer *aSendBuffer, void *aData, size_t aLength, size_t *aWritten )
제공된 TCP 순환 전송 버퍼를 사용하여 버퍼를 관리하기 위해 TCP 엔드포인트에서 데이터를 전송합니다.
이 함수가 호출되면 aSendBuffer
과 aEndpoint
은 서로 연결된 것으로 간주됩니다. 연결된 상태에서 aEndpoint
의 모든 전송 작업은 aSendBuffer
를 사용하여 실행해야 하고 aSendBuffer
의 모든 작업은 aEndpoint
와 연결되어야 합니다.
TCP 순환 전송 버퍼와 TCP 엔드포인트를 '분할'할 수 있는 유일한 방법은 전송 버퍼가 완전히 비어 있을 때까지 기다리는 것입니다. 이는 (1) 전송 버퍼의 모든 데이터가 일반적인 TCP 프로토콜 작업 과정에서 전송 및 확인되거나 (2) 연결이 종료되는 두 가지 방식으로 발생할 수 있습니다.
권장 사용 패턴은 TCP 엔드포인트와 함께 단일 TCP 순환 전송 버퍼를 사용하고 연결된 TCP 순환 버퍼를 통해 해당 TCP 엔드포인트의 데이터를 전송하는 것입니다. 이 권장 사용 패턴은 항상 TCP 엔드포인트와 TCP 순환 전송 버퍼를 함께 사용하여 위에 설명된 문제를 방지합니다.
순환 전송 버퍼가 용량에 도달하면 제공된 데이터의 접두사만 순환 전송 버퍼에 복사됩니다.
세부정보 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
매개변수 |
|
||||||||||
반환 |
OT_ERROR_NONE 데이터가 전송 버퍼로 복사되어 TCP 엔드포인트로 전송되었습니다.
|
||||||||||
반환 |
OT_ERROR_FAILED: TCP 엔드포인트로 데이터 전송 실패
|
리소스
OpenThread API 참조 주제는 GitHub에서 제공되는 소스 코드에서 가져옵니다. 자세한 정보를 보거나 문서 작성에 참여하려면 리소스를 참고하세요.