콘텐츠로 이동
무료 평가 시작

PdcommTcpOptions

구조체

pdcomm_tcp_create()에 전달하는 구성입니다.

typedef struct PdcommTcpOptions { ... } PdcommTcpOptions

선언 위치: #include <pdcomm_tcp.h>

모든 타이머와 한도는 애플리케이션 정책이며, 필드 설명에 달리 적혀 있지 않으면 0은 유효하지 않습니다. 엔드포인트가 구조체를 복사하므로 pdcomm_tcp_create()가 반환된 뒤 해제해도 됩니다.

멤버

connect_timeout_ms

필드

능동 모드 TCP 연결 시간 초과(timeout)(밀리초)입니다. 0이 아니어야 합니다.

uint64_t connect_timeout_ms

선언 위치: #include <pdcomm_tcp.h>

연결 호출은 pdcomm_tcp_poll() 안에서 실행되며 최대 이 시간 동안 pdcomm_tcp_poll()을 블로킹할 수 있습니다.

initial_system_bytes

필드

각 연결 세대(generation)의 첫 시스템 바이트(system bytes) 값입니다.

uint32_t initial_system_bytes

선언 위치: #include <pdcomm_tcp.h>

새 송신 메시지마다 다음 값을 사용합니다. 카운터는 세대마다 이 값에서 다시 시작하며 되돌아가지 않습니다. 0xFFFFFFFF 이후의 제출은 #PDCOMM_LIMIT_EXCEEDED로 실패합니다.

item_limits

필드

메시지 본문에 적용하는 SECS-II 한도입니다.

PdcommSecsLimits item_limits

선언 위치: #include <pdcomm_tcp.h>

pdcomm_tcp_request()와 pdcomm_tcp_reply()에 전달한 본문과 수신한 데이터 메시지 본문에 적용됩니다. item_limits.struct_size는 sizeof(PdcommSecsLimits) 이상이어야 합니다.

max_application_bytes

필드

pdcomm_tcp_next_event()가 읽는 큐에 있는 이벤트 본문 전체 크기의 최댓값(바이트)입니다. PdcommTcpOptions::max_frame_bytes에서 14를 뺀 값 이상이어야 합니다.

size_t max_application_bytes

선언 위치: #include <pdcomm_tcp.h>

max_application_events

필드

pdcomm_tcp_next_event()가 읽는 큐의 용량입니다. 0이 아니어야 합니다.

size_t max_application_events

선언 위치: #include <pdcomm_tcp.h>

큐가 가득 차면 엔드포인트는 큐를 비울 때까지 이후 이벤트를 보류합니다.

max_events

필드

내부 세션 이벤트 큐의 용량입니다. 2 * #PDCOMM_TCP_MAX_TRANSACTIONS + 8(72) 이상이어야 합니다.

size_t max_events

선언 위치: #include <pdcomm_tcp.h>

max_frame_bytes

필드

4바이트 길이 필드와 10바이트 헤더를 포함한 HSMS 프레임의 최대 크기(바이트)입니다. 14 이상이어야 합니다.

size_t max_frame_bytes

선언 위치: #include <pdcomm_tcp.h>

메시지 본문의 최대 크기는 이 값에서 14를 뺀 값입니다. 이보다 큰 송신 본문은 #PDCOMM_LIMIT_EXCEEDED로 거부되고, 이보다 큰 수신 프레임은 연결을 닫습니다.

max_io_chunk

필드

소켓 읽기 또는 쓰기 호출 한 번에 전달하는 최대 바이트 수입니다. 0이 아니어야 합니다.

size_t max_io_chunk

선언 위치: #include <pdcomm_tcp.h>

max_queued_bytes

필드

내부 세션 큐에 보관하는 메시지 본문 전체 크기의 최댓값(바이트)입니다.

size_t max_queued_bytes

선언 위치: #include <pdcomm_tcp.h>

이 값을 넘게 되는 제출은 #PDCOMM_BACKPRESSURE를 반환합니다. 본문이 프레임에 들어가지 않으면 먼저 #PDCOMM_LIMIT_EXCEEDED를 반환합니다. 0이면 본문이 없는 메시지만 허용합니다.

max_write_bytes

필드

소켓 쓰기 큐 전체 크기의 최댓값(바이트)입니다. 14 이상이면서 PdcommTcpOptions::max_frame_bytes 이상이어야 합니다.

size_t max_write_bytes

선언 위치: #include <pdcomm_tcp.h>

max_write_frames

필드

소켓 쓰기 큐에 둘 수 있는 프레임의 최대 개수입니다. 0이 아니어야 합니다.

size_t max_write_frames

선언 위치: #include <pdcomm_tcp.h>

mode

필드

연결 모드입니다. #PDCOMM_TCP_ACTIVE 또는 #PDCOMM_TCP_PASSIVE입니다.

uint32_t mode

선언 위치: #include <pdcomm_tcp.h>

poll_budget

필드

pdcomm_tcp_poll() 호출 한 번이 수행하는 내부 동작의 최대 개수입니다. 0이 아니어야 합니다.

size_t poll_budget

선언 위치: #include <pdcomm_tcp.h>

reserved

필드

예약 필드입니다. 0이어야 합니다.

uint16_t reserved

선언 위치: #include <pdcomm_tcp.h>

session_id

필드

데이터 메시지에 쓰는 HSMS 세션 ID(장치 ID(device ID))입니다.

uint16_t session_id

선언 위치: #include <pdcomm_tcp.h>

송신 데이터 메시지에 이 값이 들어가며, 값이 다른 수신 데이터 메시지는 #PDCOMM_TCP_WRONG_SESSION으로 보고됩니다. 제어 메시지는 항상 0xFFFF를 사용합니다.

shutdown_timeout_ms

필드

정상 종료 한도(밀리초)입니다. 0이 아니어야 합니다.

uint64_t shutdown_timeout_ms

선언 위치: #include <pdcomm_tcp.h>

pdcomm_tcp_stop() 뒤에 연결은 Separate.req 같은 큐의 프레임을 기록하기 위해 최대 이 시간 동안 열려 있다가 닫힙니다.

struct_size

필드

이 구조체의 크기(바이트)입니다. sizeof(PdcommTcpOptions) 이상으로 설정합니다.

size_t struct_size

선언 위치: #include <pdcomm_tcp.h>

t3_ms

필드

T3 응답 시간 초과(timeout)(밀리초)입니다. 0이 아니어야 합니다.

uint64_t t3_ms

선언 위치: #include <pdcomm_tcp.h>

타이머는 W 비트 데이터 요청을 소켓에 모두 기록했을 때 시작합니다. 만료되면 요청이 #PDCOMM_TCP_T3_TIMEOUT으로 실패합니다.

t5_ms

필드

T5 연결 분리 시간 초과(timeout)(밀리초)입니다. 0이 아니어야 합니다.

uint64_t t5_ms

선언 위치: #include <pdcomm_tcp.h>

능동 모드에서 연결이 끝나거나 시도가 실패한 뒤 다음 시도까지의 지연이며, 이 동안 #PDCOMM_TCP_RETRY_WAIT 상태에 있습니다.

t6_ms

필드

T6 제어 트랜잭션 시간 초과(timeout)(밀리초)입니다. 0이 아니어야 합니다.

uint64_t t6_ms

선언 위치: #include <pdcomm_tcp.h>

요청을 기록한 뒤 Select.rsp, Deselect.rsp, Linktest.rsp를 기다리는 시간을 제한합니다. 만료되면 트랜잭션이 #PDCOMM_TCP_T6_TIMEOUT으로 실패하고 연결이 닫힙니다.

t7_ms

필드

T7 미선택 시간 초과(timeout)(밀리초)입니다. 0이 아니어야 합니다.

uint64_t t7_ms

선언 위치: #include <pdcomm_tcp.h>

연결이 수립되거나 Deselect된 뒤 이 시간 동안 NOT SELECTED 상태로 남아 있으면 연결을 닫습니다.

t8_ms

필드

T8 네트워크 문자 간 시간 초과(timeout)(밀리초)입니다. 0이 아니어야 합니다.

uint64_t t8_ms

선언 위치: #include <pdcomm_tcp.h>

일부만 수신된 프레임이 이 시간 동안 진전이 없으면 연결을 닫습니다.

version

필드

옵션 레이아웃 버전입니다. #PDCOMM_TCP_OPTIONS_VERSION이어야 합니다.

uint32_t version

선언 위치: #include <pdcomm_tcp.h>

write_timeout_ms

필드

쓰기 시간 초과(timeout)(밀리초)입니다. 0이 아니어야 합니다.

uint64_t write_timeout_ms

선언 위치: #include <pdcomm_tcp.h>

쓰기 큐 맨 앞의 프레임을 이 시간 안에 모두 기록하지 못하면 연결이 종류 #PDCOMM_TCP_IO_TIMED_OUT인 #PDCOMM_TCP_OP_WRITE 전송 오류로 실패합니다.