TCP

이 모듈에는 TCP 통신을 제어하는 기능이 포함되어 있습니다.

요약

열거

anonymous enum enum
otTcpConnect()에 전달되는 플래그를 정의합니다.
anonymous enum enum
otTcpSendByReference에 전달된 플래그를 정의합니다.
otTcpDisconnectedReason enum
otTcpIncomingConnectionAction{
  OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT,
  OT_TCP_INCOMING_CONNECTION_ACTION_DEFER,
  OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE
}
enum
수신 연결 작업을 정의합니다.

Typedef

otLinkedBuffer typedef
TCP와 함께 사용하기 위한 링크된 버퍼 구조.
otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer) typedef
void(*
이 콜백은 TCP 연결이 이제 양방향 통신에 사용될 준비가 되었음을 나타냅니다.
otTcpAcceptReady)(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto) typedef
이 콜백은 이 TCP 리스너와 일치하는 수신 연결이 도착했음을 나타냅니다.
otTcpDisconnected)(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason) typedef
void(*
이 콜백은 연결이 끊어져 더 이상 사용해서는 안 되거나 연결이 TIME-WAIT 상태에 들어갔음을 나타냅니다.
otTcpDisconnectedReason typedef
enum otTcpDisconnectedReason
otTcpEndpoint typedef
struct otTcpEndpoint
otTcpEndpointInitializeArgs typedef
otTcpEndpointInitialize() 함수의 인수를 포함합니다.
otTcpEstablished)(otTcpEndpoint *aEndpoint) typedef
void(*
이 콜백은 TCP 3방향 핸드셰이크가 완료되고 이제 연결이 설정되었음을 애플리케이션에 알립니다.
otTcpForwardProgress)(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog) typedef
void(*
이 콜백은 전송 버퍼에서 수신자에게 데이터를 전송할 때 전달이 진행되었는지 애플리케이션에 알립니다.
otTcpIncomingConnectionAction typedef
수신 연결 작업을 정의합니다.
otTcpListener typedef
struct otTcpListener
otTcpListenerInitializeArgs typedef
otTcpListenerInitialize() 함수의 인수를 포함합니다.
otTcpReceiveAvailable)(otTcpEndpoint *aEndpoint, size_t aBytesAvailable, bool aEndOfStream, size_t aBytesRemaining) typedef
void(*
이 콜백은 수신 버퍼에서 소비할 수 있는 바이트 수를 나타냅니다.
otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData) typedef
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)
애플리케이션이 수신 버퍼 시작 시 데이터의 aNumBytes 바이트 처리를 완료했으며 TCP 스택이 수신 버퍼에서 이러한 바이트를 계속 유지할 필요가 없음을 TCP 스택에 알립니다.
otTcpConnect(otTcpEndpoint *aEndpoint, const otSockAddr *aSockName, uint32_t aFlags)
이 연결의 원격 호스트와 포트를 기록합니다.
otTcpEndpointDeinitialize(otTcpEndpoint *aEndpoint)
이 TCP 엔드포인트를 초기화 해제합니다.
otTcpEndpointGetContext(otTcpEndpoint *aEndpoint)
void *
초기화 시 aEndpoint와 연결된 컨텍스트 포인터를 가져옵니다.
otTcpEndpointGetInstance(otTcpEndpoint *aEndpoint)
초기화 시 aEndpoint와 연결된 otInstance를 가져옵니다.
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)
지정된 IP 주소 및 포트와 일치하는 수신 TCP 연결이 이 TCP 리스너의 콜백을 트리거하도록 합니다.
otTcpListenerDeinitialize(otTcpListener *aListener)
이 TCP 리스너를 초기화 해제합니다.
otTcpListenerGetContext(otTcpListener *aListener)
void *
초기화 시 aListener와 연결된 컨텍스트 포인터를 가져옵니다.
otTcpListenerGetInstance(otTcpListener *aListener)
초기화 시 aListener와 연결된 otInstance를 가져옵니다.
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() 함수의 인수를 포함합니다.

열거형

익명의 enum

 anonymous enum

otTcpConnect()에 전달되는 플래그를 정의합니다.

익명의 enum

 anonymous enum

otTcpSendByReference에 전달된 플래그를 정의합니다.

otTcpDisconnectedReason

 otTcpDisconnectedReason

otTcpIncomingConnectionAction

 otTcpIncomingConnectionAction

수신 연결 작업을 정의합니다.

이는 otTcpAcceptReady() 콜백에서 사용됩니다.

속성
OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT

수신 연결을 수락합니다.

OT_TCP_INCOMING_CONNECTION_ACTION_DEFER

수신 연결을 연기합니다 (자동으로 무시).

OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE

수신 연결을 거부합니다.

Typedef

otLinkedBuffer

struct otLinkedBuffer otLinkedBuffer

TCP와 함께 사용하기 위한 링크된 버퍼 구조.

단일 otLinkedBuffer 구조는 mData 및 mLength를 통해 메모리의 바이트 배열을 참조합니다. mNext 필드는 otLinkedBuffer 구조의 체인을 형성하는 데 사용됩니다.

otTcpAcceptDone

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

이 콜백은 TCP 연결이 이제 양방향 통신에 사용될 준비가 되었음을 나타냅니다.

TCP 빠른 열기의 경우 TCP 연결 핸드셰이크가 실제로 완료되기 전일 수 있습니다. 애플리케이션에는 연결을 수락한 TCP 리스너와 연결이 허용된 TCP 엔드포인트 모두에 대한 컨텍스트 포인터가 제공됩니다. 제공된 컨텍스트는 TCP 리스너와 연결된 컨텍스트입니다.

세부정보
매개변수
[in] aListener
들어오는 연결과 일치하는 TCP 리스너입니다.
[in] aEndpoint
들어오는 연결이 허용된 TCP 엔드포인트입니다.
[in] aPeer
호스트와 포트의 IP 주소를 알아야 합니다.

otTcpAcceptReady

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

이 콜백은 이 TCP 리스너와 일치하는 수신 연결이 도착했음을 나타냅니다.

일반적인 응답은 애플리케이션이 들어오는 연결을 수락하는 것입니다. 들어오는 연결을 수락할 otTcpEndpoint를 가리키는 포인터로 aAcceptInto를 채우면 됩니다. 이 otTcpEndpoint는 이미 otTcpEndpointInitialize()를 사용하여 초기화되어 있어야 합니다. 그런 다음 애플리케이션에서 OT_TCP_INCOMING_CONNECTION_ACTION_동의를 반환합니다.

또는 애플리케이션에서 수신 연결 수락을 거부할 수 있습니다. 애플리케이션에서 이 작업을 실행하는 방법에는 두 가지가 있습니다. 첫째, 애플리케이션이 OT_TCP_INCOMING_CONNECTION_ACTION_DEFER를 반환하면 OpenThread는 연결 설정 요청을 자동으로 무시합니다. 연결 피어가 요청을 재전송할 가능성이 있고, 이 때 콜백이 다시 호출됩니다. 이 방법은 현재 연결을 수락할 수 있는 리소스가 없지만 연결 피어가 연결 설정 시도를 재전송할 때 리소스를 사용할 수 있는 경우에 유용합니다. 둘째, 애플리케이션이 OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE를 반환하면 OpenThread는 연결 설정을 시도한 호스트에 'connection denied' 메시지를 전송합니다. 애플리케이션이 수신 연결을 거부하면 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
연결이 끊어진 이유입니다.

otTcpDisconnectedReason

enum otTcpDisconnectedReason otTcpDisconnectedReason

otTcpEndpoint

struct otTcpEndpoint otTcpEndpoint

otTcpEndpointInitializeArgs

struct otTcpEndpointInitializeArgs otTcpEndpointInitializeArgs

otTcpEndpointInitialize() 함수의 인수를 포함합니다.

otTcpEstablished

void(* otTcpEstablished)(otTcpEndpoint *aEndpoint)

이 콜백은 TCP 3방향 핸드셰이크가 완료되고 이제 연결이 설정되었음을 애플리케이션에 알립니다.

세부정보
매개변수
[in] aEndpoint
이제 연결이 설정된 TCP 엔드포인트입니다.

otTcpForwardProgress

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

이 콜백은 전송 버퍼에서 수신자에게 데이터를 전송할 때 전달이 진행되었는지 애플리케이션에 알립니다.

올바른 TCP 작업에는 이 콜백이 필요하지 않습니다. 대부분의 애플리케이션은 otTcpSendDone() 콜백에 의존하여 TCP 스택이 버퍼 사용을 마친 후 연결된 버퍼를 회수할 수 있습니다. 이 콜백의 목적은 연결 피어로 데이터를 전송하는 과정에서 연결이 어떻게 진행되고 있는지에 대한 세분화된 정보를 활용하는 고급 애플리케이션을 지원하는 것입니다.

이 콜백의 작업은 TCP의 전송 버퍼와 밀접하게 연결되어 있습니다. 전송 버퍼에는 두 영역이 있는 것으로 이해할 수 있습니다. 첫째, 전송 버퍼의 헤드 (전면)에 '진행 중인' 영역이 있습니다. 수신자에게 전송되었지만 아직 확인되지 않은 데이터에 해당합니다. 둘째, '백로그' 영역이 있는데, 이 영역은 '처리 중' 리전에 없는 전송 버퍼의 모든 데이터로 구성됩니다. '백로그' 리전은 전송 대기열에 추가되었지만 아직 전송되지 않은 데이터에 해당합니다.

콜백은 두 가지 유형의 이벤트에 대한 응답으로 호출됩니다. 첫째, 전송 버퍼의 '처리 중' 영역이 축소될 수 있습니다 (예: 수신자가 이전에 보낸 데이터를 확인하는 경우). 둘째, 전송 버퍼의 '백로그' 영역이 축소될 수 있습니다 (예: 새 데이터가 전송됨). 이 두 조건은 연결 피어의 ACK 세그먼트에 대한 응답으로 종종 동시에 발생하므로 단일 콜백으로 결합됩니다.

TCP 스택은 전송 버퍼의 꼬리에 있는 aInSendBuffer 바이트만 사용합니다. aInSendBuffer가 x만큼 감소하면 이전에 전송 버퍼의 헤드에 있던 추가 바이트 x개가 더 이상 전송 버퍼의 일부가 아니며 이제 애플리케이션이 회수 (덮어쓰기)할 수 있다는 의미입니다. otLinkedBuffer 구조 자체는 참조하는 모든 바이트가 더 이상 전송 버퍼의 일부가 아닌 경우에만 회수할 수 있습니다.

이 콜백은 다음과 같은 의미에서 otTcpSendDone()을 포함합니다. 애플리케이션은 aInSendBuffer를 링크된 각 버퍼에 있는 바이트 수와 비교하여 연결된 버퍼를 회수할 수 있는 시기를 결정할 수 있습니다. 하지만 회수할 수 있는 otLinkedBuffers를 직접 전달하는 otTcpSendDone()은 사용하기가 훨씬 간단할 것으로 예상됩니다. 두 콜백이 모두 등록되고 동일한 이벤트 (예: 동일한 ACK 세그먼트가 수신된 경우)에 의해 트리거되면 otTcpSendDone() 콜백이 먼저 트리거된 후 이 콜백이 트리거됩니다.

또한 이 콜백은 전송 버퍼의 데이터 바이트 수가 아직 전송 중이 아닌 것을 나타내는 aBacklog를 제공합니다. 데이터가 곧 전송될 것이라는 보장이 있을 때만 전송 버퍼에 데이터를 추가하려는 애플리케이션의 경우, aBacklog가 매우 작을 때 (0 또는 0에 가까울 때)만 데이터를 전송하는 것이 좋을 수 있습니다. 예를 들어 애플리케이션에서 aBacklog를 사용하면 데이터 백로그가 생성되지 않도록 데이터를 삭제하거나 집계하여 큐 축적에 반응할 수 있습니다.

양의 바이트로 otTcpSendByReference() 또는 otTcpSendByExtension()을 호출한 후에는 otTcpForwardProgress() 콜백이 호출되어 전송 버퍼에 추가된 바이트가 전송되는 시기를 나타냅니다. otTcpForwardProgress()는 바이트가 전송 버퍼에 추가된 직후 (일부 바이트가 즉시 전송되는 경우, 백로그가 감소하는 경우) 즉시 또는 향후 언젠가 (연결에서 데이터의 일부 또는 전체를 전송한 후, 백로그가 감소된 후) 실행될 수 있습니다. '즉시'란 콜백이 tasklet에서 실행되도록 즉시 예약됨을 의미합니다. 재진입 관련 복잡성을 방지하기 위해 otTcpForwardProgress() 콜백은 otTcpSendByReference() 또는 otTcpSendByExtension() 함수에서 직접 호출하지 않습니다.

세부정보
매개변수
[in] aEndpoint
연결의 TCP 엔드포인트입니다.
[in] aInSendBuffer
전송 버퍼의 바이트 수('처리 중' 및 '백로그' 영역의 합계)입니다.
[in] aBacklog
전송을 위해 큐에 추가되었지만 아직 전송되지 않은 바이트 수입니다('백로그' 영역).

otTcpIncomingConnectionAction

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 및 여기에 포함된 데이터를 애플리케이션에서 회수할 수 있음을 애플리케이션에 알립니다.

aDataotTcpSendByExtension()을 통해 영향을 받는 모든 확장을 포함하여 otTcpSendByReference()를 통해 TCP로 전달된 것과 동일합니다.

세부정보
매개변수
[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 엔드포인트의 연결을 취소할 수 없습니다.

otTcpBind

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
)

애플리케이션이 수신 버퍼 시작 시 데이터의 aNumBytes 바이트 처리를 완료했으며 TCP 스택이 수신 버퍼에서 이러한 바이트를 계속 유지할 필요가 없음을 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 빠른 열기는 aFlags를 사용하여 사용 설정하거나 사용 중지해야 합니다. 사용 중지되면 TCP 연결 설정 핸드셰이크가 즉시 시작됩니다. 사용 설정된 경우 이 함수는 원격 호스트와 포트만 기록하며 TCP 연결 설정 핸드셰이크는 첫 번째 otTcpSendByReference() 호출에서만 발생합니다.

TCP 빠른 열기가 사용 중지된 경우 호출자는 TCP 연결 설정 핸드셰이크가 완료되었음을 나타내는 otTcpEstablished 콜백을 기다려야 데이터 전송을 시작할 수 있습니다(예: 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 엔드포인트를 초기화 해제할 수 없습니다.

otTcpEndpointGetContext

void * otTcpEndpointGetContext(
  otTcpEndpoint *aEndpoint
)

초기화 시 aEndpoint와 연결된 컨텍스트 포인터를 가져옵니다.

세부정보
매개변수
[in] aEndpoint
컨텍스트를 가져올 TCP 엔드포인트입니다.
반환
aEndpoint와 연결된 컨텍스트 포인터입니다.

otTcpEndpointGetInstance

otInstance * otTcpEndpointGetInstance(
  otTcpEndpoint *aEndpoint
)

초기화 시 aEndpoint와 연결된 otInstance를 가져옵니다.

세부정보
매개변수
[in] aEndpoint
인스턴스를 가져올 TCP 엔드포인트입니다.
반환
aEndpoint와 연결된 otInstance 포인터입니다.

otTcpEndpointInitialize

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

TCP 엔드포인트를 초기화합니다.

이 함수를 호출하면 OpenThread가 TCP 엔드포인트를 추적하고 aEndpoint 내에서 TCP 데이터를 저장 및 검색합니다. 애플리케이션은 aEndpoint의 필드에 직접 액세스하거나 이를 수정해서는 안 됩니다. 애플리케이션이 aEndpoint 지원 메모리를 회수해야 하는 경우 otTcpEndpointDeinitialize()를 호출해야 합니다.

세부정보
매개변수
[in] aInstance
OpenThread 인스턴스를 가리키는 포인터입니다.
[in] aEndpoint
TCP 엔드포인트 구조를 가리키는 포인터입니다.
[in] aArgs
인수 구조를 가리키는 포인터입니다.
반환 값
OT_ERROR_NONE
TCP 엔드포인트를 열었습니다.
OT_ERROR_FAILED
TCP 엔드포인트를 열 수 없습니다.

otTcpGetLocalAddress

const otSockAddr * otTcpGetLocalAddress(
  const otTcpEndpoint *aEndpoint
)

TCP 엔드포인트의 로컬 호스트 및 포트에 대한 포인터를 가져옵니다.

이 소켓이 연결된 상태가 아니고 마지막으로 연결 해제된 후 바인딩되지 않았다면 호스트와 포트의 콘텐츠가 비활성 상태일 수 있습니다.

세부정보
매개변수
[in] aEndpoint
가져올 로컬 호스트와 포트의 TCP 엔드포인트입니다.
반환
aEndpoint의 로컬 호스트 및 포트

otTcpGetPeerAddress

const otSockAddr * otTcpGetPeerAddress(
  const otTcpEndpoint *aEndpoint
)

TCP 엔드포인트의 피어 호스트 및 포트에 대한 포인터를 가져옵니다.

이 소켓이 연결된 상태가 아니면 호스트와 포트의 콘텐츠가 비활성 상태일 수 있습니다.

세부정보
매개변수
[in] aEndpoint
피어의 호스트와 포트를 가져올 TCP 엔드포인트입니다.
반환
aEndpoint 연결 피어의 호스트 및 포트입니다.

otTcpListen

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

지정된 IP 주소 및 포트와 일치하는 수신 TCP 연결이 이 TCP 리스너의 콜백을 트리거하도록 합니다.

세부정보
매개변수
[in] aListener
수신 대기를 시작해야 하는 TCP 리스너 구조를 가리키는 포인터입니다.
[in] aSockName
들어오는 연결을 리슨할 주소와 포트입니다.
반환 값
OT_ERROR_NONE
TCP 리스너에 대한 수신 대기가 시작되었습니다.
OT_ERROR_FAILED
TCP 리스너에서 리슨을 시작할 수 없습니다.

otTcpListenerDeinitialize

otError otTcpListenerDeinitialize(
  otTcpListener *aListener
)

이 TCP 리스너를 초기화 해제합니다.

즉, OpenThread는 더 이상 이 TCP 리스너를 추적하지 않고 이 TCP 리스너에 내부적으로 할당한 모든 리소스를 할당 해제합니다. 애플리케이션은 필요에 따라 TCP 리스너를 지원하는 메모리를 재사용할 수 있습니다.

TCP 리스너가 현재 수신 대기 중인 경우 수신 대기를 중지합니다.

세부정보
매개변수
[in] aListener
초기화 해제할 TCP 리스너 구조에 대한 포인터입니다.
반환 값
OT_ERROR_NONE
TCP 리스너를 초기화했습니다.
OT_ERROR_FAILED
TCP 리스너를 초기화하지 못했습니다.

otTcpListenerGetContext

void * otTcpListenerGetContext(
  otTcpListener *aListener
)

초기화 시 aListener와 연결된 컨텍스트 포인터를 가져옵니다.

세부정보
매개변수
[in] aListener
컨텍스트를 가져올 TCP 리스너입니다.
반환
aListener와 연결된 컨텍스트 포인터입니다.

otTcpListenerGetInstance

otInstance * otTcpListenerGetInstance(
  otTcpListener *aListener
)

초기화 시 aListener와 연결된 otInstance를 가져옵니다.

세부정보
매개변수
[in] aListener
가져올 인스턴스의 TCP 리스너입니다.
반환
aListener와 연결된 otInstance 포인터입니다.

otTcpListenerInitialize

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

TCP 리스너를 초기화합니다.

이 함수를 호출하면 OpenThread가 TCP 리스너를 추적하고 aListener 내에서 TCP 데이터를 저장 및 검색합니다. 애플리케이션은 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를 호출하여 가져온 링크된 버퍼 체인을 순회할 수 있습니다. 일부 애플리케이션에서는 이 함수를 호출하여 데이터 처리를 단순화하기 위해 수신 버퍼를 인접하게 만들 수 있지만, 이 경우 수신 버퍼의 데이터를 재구성하는 데 CPU 시간이 소모됩니다.

세부정보
매개변수
[in] aEndpoint
재구성할 수신 버퍼가 있는 TCP 엔드포인트에 대한 포인터입니다.
반환 값
OT_ERROR_NONE
작업을 완료했습니다.
OT_ERROR_FAILED
작업을 완료할 수 없습니다.

otTcpSendByExtension

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
전송 버퍼에 데이터를 추가할 수 없습니다.

otTcpSendEndOfStream

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

otTcpEndpoint의 mTcb 필드가 TCPlp의 구조체 tcpcb와 크기가 동일하도록 OT_TCP_ENDPOINT_TCB_SIZE_BASE 및 OT_TCP_ENDPOINT_TCB_NUM_POINTERS가 선택됩니다.

이렇게 해야 하는 이유는 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

otTcpListener의 mTcbListener 필드가 TCPlp의 구조체 tcpcb_listen과 크기가 동일하도록 OT_TCP_LISTENER_TCB_SIZE_BASE 및 OT_TCP_LISTENER_TCB_NUM_POINTERS가 선택됩니다.

이렇게 해야 하는 이유는 mTcbListen 필드가 선언에서는 불투명하지만 TCP 구현에서는 구조체 tcpcb로 취급되기 때문입니다.

OT_TCP_RECEIVE_BUFFER_SIZE_FEW_HOPS

 OT_TCP_RECEIVE_BUFFER_SIZE_FEW_HOPS 2598

약 3개 이하의 무선 홉을 통과하는 TCP 연결에 권장되는 버퍼 사이즈입니다.

메모리가 특히 제약되어 있고 고대역폭이 필요하지 않은 상황에서는 수동으로 버퍼 크기를 더 작게 선택하는 것이 바람직할 수도 있습니다.

OT_TCP_RECEIVE_BUFFER_SIZE_MANY_HOPS

 OT_TCP_RECEIVE_BUFFER_SIZE_MANY_HOPS 4157

여러 무선 홉을 통과하는 TCP 연결에 권장되는 버퍼 사이즈.

TCP 연결이 매우 많은 수의 홉 (약 6개 이상)을 통과하는 경우 큰 버퍼 크기를 수동으로 선택하는 것이 좋습니다.

자료

OpenThread API 참조 주제는 GitHub에서 제공되는 소스 코드에서 비롯됩니다. 자세한 내용을 알아보거나 문서에 참여하려면 리소스를 참고하세요.