Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기

TCP 추상화

이 모듈에는 기본 TCP API 위에 사용하기 쉬운 추상화가 포함됩니다.

요약

Typedef

otTcpCircularSendBuffer typedef
이 구조는 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를 관리하는 순환 엔드포인트 버퍼에서 데이터를 전송할 수 있습니다.

otTcpCircularSendBufferotTcpEndpoint에서 제공되는 otLinkedBuffer 기반 API 위에 구현됩니다. otTcpEndpoint에 연결되면 otTcpCircularSendBuffer가 연결을 위해 otLinkedBuffer를 관리하는 모든 작업을 실행합니다. 즉, otTcpCircularSendBufferotTcpEndpoint에 연결되면 애플리케이션은 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 순환 전송 버퍼가 비어 있지 않으면 이 작업이 실패합니다.

세부정보
매개변수
[in] aSendBuffer
초기화할 TCP 순환 전송 버퍼입니다.
반환 값
OT_ERROR_NONE
TCP 순환 전송 버퍼를 초기화하지 못했습니다.
OT_ERROR_BUSY
순환 버퍼에는 데이터가 포함되어 있으며 초기화할 수 없습니다.

otTcpCircularSendBufferForceDiscardAll

void otTcpCircularSendBufferForceDiscardAll(
  otTcpCircularSendBuffer *aSendBuffer
)

순환 전송 버퍼의 모든 데이터를 강제 삭제합니다.

애플리케이션이 TCP 연결이 비정상적으로 종료될 때 이 함수를 호출해야 합니다 (예: 애플리케이션이 otTcpEndpointAbort()를 호출하거나 otTcpConnectionLost() 콜백을 통해 연결 재설정에 대한 알림을 받은 경우).

TCP 엔드포인트에 연결된 비어 있지 않은 TCP 순환 전송 버퍼에서 이 함수를 호출하면 정의되지 않은 동작이 발생합니다.

세부정보
매개변수
[in] aSendBuffer
데이터를 삭제할 TCP 순환 전송 버퍼입니다.

otTcpCircularSendBufferFreeSpace

size_t otTcpCircularSendBufferFreeSpace(
  otTcpCircularSendBuffer *aSendBuffer
)

TCP 순환 전송 버퍼의 여유 공간을 반환합니다.

이 작업은 항상 성공합니다.

세부정보
매개변수
[in] aSendBuffer
반환할 여유 공간이 있는 TCP 순환 전송 버퍼의 포인터입니다.
반환
전송 버퍼의 여유 공간 크기입니다.

otTcpCircularSendBufferHandleForwardProgress

void otTcpCircularSendBufferHandleForwardProgress(
  otTcpCircularSendBuffer *aSendBuffer,
  size_t aInSendBuffer
)

otTcpForwardProgress 콜백에서 순환 전송 버퍼별 처리를 수행합니다.

애플리케이션은 otTcpEndpointotTcpForwardProgress() 콜백을 설치하고, 순환 전송 버퍼별 처리를 위해 콜백 함수의 시작 부분에서 이 함수를 호출해야 합니다.

콜백 함수에서 애플리케이션은 otTcpCircularSendBufferFreeSpace()를 호출하거나 aInSendBufferotTcpCircularSendBufferInitialize()를 호출할 때 사용자가 선택한 전송 버퍼 용량과 비교하여 순환 전송 버퍼의 여유 공간을 확인할 수 있습니다.

세부정보
매개변수
[in] aSendBuffer
otTcpForwardProgress()가 호출된 엔드포인트의 TCP 순환 전송 버퍼에 대한 포인터입니다.
[in] aInSendBuffer
aInSendBuffer의 값이 otTcpForwardProgress() 콜백에 전달되었습니다.

otTcpCircularSendBufferInitialize

void otTcpCircularSendBufferInitialize(
  otTcpCircularSendBuffer *aSendBuffer,
  void *aDataBuffer,
  size_t aCapacity
)

TCP 순환 전송 버퍼를 초기화합니다.

세부정보
매개변수
[in] aSendBuffer
초기화할 TCP 순환 전송 버퍼의 포인터입니다.
[in] aDataBuffer
TCP 순환 전송 버퍼에 데이터를 저장하는 데 사용할 메모리 포인터입니다.
[in] aCapacity
TCP 순환 전송 버퍼의 용량(바이트)으로, aDataBuffer이 가리키는 메모리 크기와 같아야 합니다.

otTcpCircularSendBufferWrite

otError otTcpCircularSendBufferWrite(
  otTcpEndpoint *aEndpoint,
  otTcpCircularSendBuffer *aSendBuffer,
  void *aData,
  size_t aLength,
  size_t *aWritten
)

제공된 TCP 순환 전송 버퍼를 사용하여 버퍼를 관리하기 위해 TCP 엔드포인트에서 데이터를 전송합니다.

이 함수가 호출되면 aSendBufferaEndpoint은 서로 연결된 것으로 간주됩니다. 연결된 상태에서 aEndpoint의 모든 전송 작업은 aSendBuffer를 사용하여 실행해야 하고 aSendBuffer의 모든 작업은 aEndpoint와 연결되어야 합니다.

TCP 순환 전송 버퍼와 TCP 엔드포인트를 '분할'할 수 있는 유일한 방법은 전송 버퍼가 완전히 비어 있을 때까지 기다리는 것입니다. 이는 (1) 전송 버퍼의 모든 데이터가 일반적인 TCP 프로토콜 작업 과정에서 전송 및 확인되거나 (2) 연결이 종료되는 두 가지 방식으로 발생할 수 있습니다.

권장 사용 패턴은 TCP 엔드포인트와 함께 단일 TCP 순환 전송 버퍼를 사용하고 연결된 TCP 순환 버퍼를 통해 해당 TCP 엔드포인트의 데이터를 전송하는 것입니다. 이 권장 사용 패턴은 항상 TCP 엔드포인트와 TCP 순환 전송 버퍼를 함께 사용하여 위에 설명된 문제를 방지합니다.

순환 전송 버퍼가 용량에 도달하면 제공된 데이터의 접두사만 순환 전송 버퍼에 복사됩니다.

세부정보
매개변수
[in] aEndpoint
데이터를 전송할 TCP 엔드포인트입니다.
[in] aSendBuffer
데이터를 복사할 TCP 순환 전송 버퍼입니다.
[in] aData
TCP 순환 전송 버퍼에 복사할 데이터 포인터입니다.
[in] aLength
TCP 순환 전송 버퍼에 복사할 수 있도록 aData가 가리키는 데이터의 길이입니다.
[out] aWritten
전송 버퍼에 복사된 데이터의 양으로 채워집니다. 전송 버퍼가 용량에 도달하면 aLength보다 작을 수 있습니다.
반환
OT_ERROR_NONE 데이터가 전송 버퍼로 복사되어 TCP 엔드포인트로 전송되었습니다.
반환
OT_ERROR_FAILED: TCP 엔드포인트로 데이터 전송 실패

리소스

OpenThread API 참조 주제는 GitHub에서 제공되는 소스 코드에서 가져옵니다. 자세한 정보를 보거나 문서 작성에 참여하려면 리소스를 참고하세요.