TCP
이 모듈에는 TCP 통신을 제어하는 기능이 포함되어 있습니다.
요약
열거 |
|
---|---|
anonymous enum
|
enum otTcpConnect()에 전달되는 플래그를 정의합니다. |
anonymous enum
|
enumotTcpSendByReference 에 전달된 플래그를 정의합니다. |
otTcpDisconnectedReason
|
enum |
otTcpIncomingConnectionAction{
|
enum 수신 연결 작업을 정의합니다. |
Typedef |
|
---|---|
otLinkedBuffer
|
typedefstruct otLinkedBuffer
TCP와 함께 사용하기 위한 링크된 버퍼 구조. |
otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer)
|
typedefvoid(*
이 콜백은 TCP 연결이 이제 양방향 통신에 사용될 준비가 되었음을 나타냅니다. |
otTcpAcceptReady)(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto)
|
typedef 이 콜백은 이 TCP 리스너와 일치하는 수신 연결이 도착했음을 나타냅니다. |
otTcpDisconnected)(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason)
|
typedefvoid(*
이 콜백은 연결이 끊어져 더 이상 사용해서는 안 되거나 연결이 TIME-WAIT 상태에 들어갔음을 나타냅니다. |
otTcpDisconnectedReason
|
typedefenum otTcpDisconnectedReason
|
otTcpEndpoint
|
typedefstruct otTcpEndpoint
|
otTcpEndpointInitializeArgs
|
typedefstruct otTcpEndpointInitializeArgs
otTcpEndpointInitialize() 함수의 인수를 포함합니다. |
otTcpEstablished)(otTcpEndpoint *aEndpoint)
|
typedefvoid(*
이 콜백은 TCP 3방향 핸드셰이크가 완료되고 이제 연결이 설정되었음을 애플리케이션에 알립니다. |
otTcpForwardProgress)(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog)
|
typedefvoid(*
이 콜백은 전송 버퍼에서 수신자에게 데이터를 전송할 때 전달이 진행되었는지 애플리케이션에 알립니다. |
otTcpIncomingConnectionAction
|
typedef 수신 연결 작업을 정의합니다. |
otTcpListener
|
typedefstruct otTcpListener
|
otTcpListenerInitializeArgs
|
typedefstruct otTcpListenerInitializeArgs
otTcpListenerInitialize() 함수의 인수를 포함합니다. |
otTcpReceiveAvailable)(otTcpEndpoint *aEndpoint, size_t aBytesAvailable, bool aEndOfStream, size_t aBytesRemaining)
|
typedefvoid(*
이 콜백은 수신 버퍼에서 소비할 수 있는 바이트 수를 나타냅니다. |
otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData)
|
typedefvoid(*
이 콜백은 제공된 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
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 리스너와 연결된 컨텍스트입니다.
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
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
를 채우지 않아도 됩니다.
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
||||||
반환 |
수신 연결을 처리하는 방법에 대한 설명입니다.
|
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 사용) 다시 두 번 호출됩니다.
세부정보 | |||||
---|---|---|---|---|---|
매개변수 |
|
otTcpDisconnectedReason
enum otTcpDisconnectedReason otTcpDisconnectedReason
otTcpEndpoint
struct otTcpEndpoint otTcpEndpoint
otTcpEndpointInitializeArgs
struct otTcpEndpointInitializeArgs otTcpEndpointInitializeArgs
otTcpEndpointInitialize() 함수의 인수를 포함합니다.
otTcpEstablished
void(* otTcpEstablished)(otTcpEndpoint *aEndpoint)
이 콜백은 TCP 3방향 핸드셰이크가 완료되고 이제 연결이 설정되었음을 애플리케이션에 알립니다.
세부정보 | |||
---|---|---|---|
매개변수 |
|
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() 함수에서 직접 호출하지 않습니다.
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
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
는 도착하는 추가 데이터를 보관할 수 있는 수신 버퍼의 용량이 얼마나 남았는지 나타냅니다.
세부정보 | |||||||||
---|---|---|---|---|---|---|---|---|---|
매개변수 |
|
otTcpSendDone
void(* otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData)
이 콜백은 제공된 aData
의 데이터를 연결 피어에서 확인했으며 aData
및 여기에 포함된 데이터를 애플리케이션에서 회수할 수 있음을 애플리케이션에 알립니다.
aData
는 otTcpSendByExtension()을 통해 영향을 받는 모든 확장을 포함하여 otTcpSendByReference()를 통해 TCP로 전달된 것과 동일합니다.
세부정보 | |||||
---|---|---|---|---|---|
매개변수 |
|
함수
otTcpAbort
otError otTcpAbort( otTcpEndpoint *aEndpoint )
이 TCP 엔드포인트와 연결된 TCP 연결을 강제로 종료합니다.
이렇게 하면 즉시 TCP 엔드포인트를 다른 연결에 사용할 수 없게 되고 송수신 버퍼를 비우고 otTcpSendByReference() 및 otTcpSendByExtension()에서 애플리케이션이 제공하는 모든 데이터의 소유권을 애플리케이션으로 다시 전송합니다. TCP 엔드포인트의 콜백 및 수신 버퍼의 메모리는 TCP 엔드포인트와 연결된 상태로 유지됩니다.
세부정보 | |||||
---|---|---|---|---|---|
매개변수 |
|
||||
반환 값 |
|
otTcpBind
otError otTcpBind( otTcpEndpoint *aEndpoint, const otSockAddr *aSockName )
TCP 엔드포인트를 IP 주소 및 포트에 바인딩합니다.
세부정보 | |||||
---|---|---|---|---|---|
매개변수 |
|
||||
반환 값 |
|
otTcpCommitReceive
otError otTcpCommitReceive( otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags )
애플리케이션이 수신 버퍼 시작 시 데이터의 aNumBytes
바이트 처리를 완료했으며 TCP 스택이 수신 버퍼에서 이러한 바이트를 계속 유지할 필요가 없음을 TCP 스택에 알립니다.
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
||||||
반환 값 |
|
otTcpConnect
otError otTcpConnect( otTcpEndpoint *aEndpoint, const otSockAddr *aSockName, uint32_t aFlags )
이 연결의 원격 호스트와 포트를 기록합니다.
TCP 빠른 열기는 aFlags
를 사용하여 사용 설정하거나 사용 중지해야 합니다. 사용 중지되면 TCP 연결 설정 핸드셰이크가 즉시 시작됩니다. 사용 설정된 경우 이 함수는 원격 호스트와 포트만 기록하며 TCP 연결 설정 핸드셰이크는 첫 번째 otTcpSendByReference()
호출에서만 발생합니다.
TCP 빠른 열기가 사용 중지된 경우 호출자는 TCP 연결 설정 핸드셰이크가 완료되었음을 나타내는 otTcpEstablished
콜백을 기다려야 데이터 전송을 시작할 수 있습니다(예: otTcpSendByReference()
호출).
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
||||||
반환 값 |
|
otTcpEndpointDeinitialize
otError otTcpEndpointDeinitialize( otTcpEndpoint *aEndpoint )
이 TCP 엔드포인트를 초기화 해제합니다.
즉, OpenThread는 더 이상 이 TCP 엔드포인트를 추적하지 않고 이 TCP 엔드포인트에 내부적으로 할당한 모든 리소스를 할당 해제합니다. 애플리케이션은 필요에 따라 TCP 엔드포인트를 지원하는 메모리를 재사용할 수 있습니다.
활성 TCP 연결에 상응하는 경우 연결이 무의식적으로 종료됩니다 (예: otTcpAbort()). 애플리케이션이 이 TCP 엔드포인트에 제공한 모든 리소스 (전송 버퍼의 링크된 버퍼, 수신 버퍼의 메모리, aEndpoint
구조 자체 등)는 즉시 애플리케이션에 반환됩니다.
세부정보 | |||||
---|---|---|---|---|---|
매개변수 |
|
||||
반환 값 |
|
otTcpEndpointGetContext
void * otTcpEndpointGetContext( otTcpEndpoint *aEndpoint )
초기화 시 aEndpoint
와 연결된 컨텍스트 포인터를 가져옵니다.
세부정보 | |||
---|---|---|---|
매개변수 |
|
||
반환 |
aEndpoint 와 연결된 컨텍스트 포인터입니다. |
otTcpEndpointGetInstance
otInstance * otTcpEndpointGetInstance( otTcpEndpoint *aEndpoint )
초기화 시 aEndpoint
와 연결된 otInstance를 가져옵니다.
세부정보 | |||
---|---|---|---|
매개변수 |
|
||
반환 |
aEndpoint 와 연결된 otInstance 포인터입니다. |
otTcpEndpointInitialize
otError otTcpEndpointInitialize( otInstance *aInstance, otTcpEndpoint *aEndpoint, const otTcpEndpointInitializeArgs *aArgs )
TCP 엔드포인트를 초기화합니다.
이 함수를 호출하면 OpenThread가 TCP 엔드포인트를 추적하고 aEndpoint
내에서 TCP 데이터를 저장 및 검색합니다. 애플리케이션은 aEndpoint
의 필드에 직접 액세스하거나 이를 수정해서는 안 됩니다. 애플리케이션이 aEndpoint
지원 메모리를 회수해야 하는 경우 otTcpEndpointDeinitialize()를 호출해야 합니다.
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
||||||
반환 값 |
|
otTcpGetLocalAddress
const otSockAddr * otTcpGetLocalAddress( const otTcpEndpoint *aEndpoint )
TCP 엔드포인트의 로컬 호스트 및 포트에 대한 포인터를 가져옵니다.
이 소켓이 연결된 상태가 아니고 마지막으로 연결 해제된 후 바인딩되지 않았다면 호스트와 포트의 콘텐츠가 비활성 상태일 수 있습니다.
세부정보 | |||
---|---|---|---|
매개변수 |
|
||
반환 |
aEndpoint 의 로컬 호스트 및 포트 |
otTcpGetPeerAddress
const otSockAddr * otTcpGetPeerAddress( const otTcpEndpoint *aEndpoint )
TCP 엔드포인트의 피어 호스트 및 포트에 대한 포인터를 가져옵니다.
이 소켓이 연결된 상태가 아니면 호스트와 포트의 콘텐츠가 비활성 상태일 수 있습니다.
세부정보 | |||
---|---|---|---|
매개변수 |
|
||
반환 |
aEndpoint 연결 피어의 호스트 및 포트입니다. |
otTcpListen
otError otTcpListen( otTcpListener *aListener, const otSockAddr *aSockName )
지정된 IP 주소 및 포트와 일치하는 수신 TCP 연결이 이 TCP 리스너의 콜백을 트리거하도록 합니다.
세부정보 | |||||
---|---|---|---|---|---|
매개변수 |
|
||||
반환 값 |
|
otTcpListenerDeinitialize
otError otTcpListenerDeinitialize( otTcpListener *aListener )
이 TCP 리스너를 초기화 해제합니다.
즉, OpenThread는 더 이상 이 TCP 리스너를 추적하지 않고 이 TCP 리스너에 내부적으로 할당한 모든 리소스를 할당 해제합니다. 애플리케이션은 필요에 따라 TCP 리스너를 지원하는 메모리를 재사용할 수 있습니다.
TCP 리스너가 현재 수신 대기 중인 경우 수신 대기를 중지합니다.
세부정보 | |||||
---|---|---|---|---|---|
매개변수 |
|
||||
반환 값 |
|
otTcpListenerGetContext
void * otTcpListenerGetContext( otTcpListener *aListener )
초기화 시 aListener
와 연결된 컨텍스트 포인터를 가져옵니다.
세부정보 | |||
---|---|---|---|
매개변수 |
|
||
반환 |
aListener 와 연결된 컨텍스트 포인터입니다. |
otTcpListenerGetInstance
otInstance * otTcpListenerGetInstance( otTcpListener *aListener )
초기화 시 aListener
와 연결된 otInstance를 가져옵니다.
세부정보 | |||
---|---|---|---|
매개변수 |
|
||
반환 |
aListener 와 연결된 otInstance 포인터입니다. |
otTcpListenerInitialize
otError otTcpListenerInitialize( otInstance *aInstance, otTcpListener *aListener, const otTcpListenerInitializeArgs *aArgs )
TCP 리스너를 초기화합니다.
이 함수를 호출하면 OpenThread가 TCP 리스너를 추적하고 aListener
내에서 TCP 데이터를 저장 및 검색합니다. 애플리케이션은 aListener
의 필드에 직접 액세스하거나 이를 수정해서는 안 됩니다. 애플리케이션이 aListener
지원 메모리를 회수해야 하는 경우 otTcpListenerDeinitialize()를 호출해야 합니다.
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
||||||
반환 값 |
|
otTcpReceiveByReference
otError otTcpReceiveByReference( otTcpEndpoint *aEndpoint, const otLinkedBuffer **aBuffer )
현재 TCP 수신 버퍼에 있는 데이터를 참조하는 링크된 버퍼 체인을 애플리케이션에 제공합니다.
연결된 버퍼 체인은 '수신 준비' 콜백이 다음에 호출될 때까지 또는 다음 번에 otTcpReceiveContiguify() 또는 otTcpCommitReceive()를 호출할 때까지 유효합니다.
세부정보 | |||||
---|---|---|---|---|---|
매개변수 |
|
||||
반환 값 |
|
otTcpReceiveContiguify
otError otTcpReceiveContiguify( otTcpEndpoint *aEndpoint )
메모리에서 완전히 인접하도록 수신 버퍼를 재구성합니다.
이는 선택사항입니다. 애플리케이션은 otTcpReceiveByReference
를 호출하여 가져온 링크된 버퍼 체인을 순회할 수 있습니다. 일부 애플리케이션에서는 이 함수를 호출하여 데이터 처리를 단순화하기 위해 수신 버퍼를 인접하게 만들 수 있지만, 이 경우 수신 버퍼의 데이터를 재구성하는 데 CPU 시간이 소모됩니다.
세부정보 | |||||
---|---|---|---|---|---|
매개변수 |
|
||||
반환 값 |
|
otTcpSendByExtension
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 구현에 대한 힌트로 사용해야 합니다.
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
||||||
반환 값 |
|
otTcpSendEndOfStream
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
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에서 제공되는 소스 코드에서 비롯됩니다. 자세한 내용을 알아보거나 문서에 참여하려면 리소스를 참고하세요.