PdcommTcpOptions
구조체
pdcomm_tcp_create()에 전달하는 구성입니다.
typedef struct PdcommTcpOptions { ... } PdcommTcpOptions모든 타이머와 한도는 애플리케이션 정책이며, 필드 설명에 달리 적혀 있지 않으면 0은 유효하지 않습니다. 엔드포인트가 구조체를 복사하므로 pdcomm_tcp_create()가 반환된 뒤 해제해도 됩니다.
멤버
connect_timeout_ms
필드
능동 모드 TCP 연결 시간 초과(timeout)(밀리초)입니다. 0이 아니어야 합니다.
uint64_t connect_timeout_ms연결 호출은 pdcomm_tcp_poll() 안에서 실행되며 최대 이 시간 동안 pdcomm_tcp_poll()을 블로킹할 수 있습니다.
initial_system_bytes
필드
각 연결 세대(generation)의 첫 시스템 바이트(system bytes) 값입니다.
uint32_t initial_system_bytes새 송신 메시지마다 다음 값을 사용합니다. 카운터는 세대마다 이 값에서 다시 시작하며 되돌아가지 않습니다. 0xFFFFFFFF 이후의 제출은 #PDCOMM_LIMIT_EXCEEDED로 실패합니다.
item_limits
필드
메시지 본문에 적용하는 SECS-II 한도입니다.
PdcommSecsLimits item_limitspdcomm_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_bytesmax_application_events
필드
pdcomm_tcp_next_event()가 읽는 큐의 용량입니다. 0이 아니어야 합니다.
size_t max_application_events큐가 가득 차면 엔드포인트는 큐를 비울 때까지 이후 이벤트를 보류합니다.
max_events
필드
내부 세션 이벤트 큐의 용량입니다. 2 * #PDCOMM_TCP_MAX_TRANSACTIONS + 8(72) 이상이어야 합니다.
size_t max_eventsmax_frame_bytes
필드
4바이트 길이 필드와 10바이트 헤더를 포함한 HSMS 프레임의 최대 크기(바이트)입니다. 14 이상이어야 합니다.
size_t max_frame_bytes메시지 본문의 최대 크기는 이 값에서 14를 뺀 값입니다. 이보다 큰 송신 본문은 #PDCOMM_LIMIT_EXCEEDED로 거부되고, 이보다 큰 수신 프레임은 연결을 닫습니다.
max_io_chunk
필드
소켓 읽기 또는 쓰기 호출 한 번에 전달하는 최대 바이트 수입니다. 0이 아니어야 합니다.
size_t max_io_chunkmax_queued_bytes
필드
내부 세션 큐에 보관하는 메시지 본문 전체 크기의 최댓값(바이트)입니다.
size_t max_queued_bytes이 값을 넘게 되는 제출은 #PDCOMM_BACKPRESSURE를 반환합니다. 본문이 프레임에 들어가지 않으면 먼저 #PDCOMM_LIMIT_EXCEEDED를 반환합니다. 0이면 본문이 없는 메시지만 허용합니다.
max_write_bytes
필드
소켓 쓰기 큐 전체 크기의 최댓값(바이트)입니다. 14 이상이면서 PdcommTcpOptions::max_frame_bytes 이상이어야 합니다.
size_t max_write_bytesmax_write_frames
필드
소켓 쓰기 큐에 둘 수 있는 프레임의 최대 개수입니다. 0이 아니어야 합니다.
size_t max_write_framesmode
필드
연결 모드입니다. #PDCOMM_TCP_ACTIVE 또는 #PDCOMM_TCP_PASSIVE입니다.
uint32_t modepoll_budget
필드
pdcomm_tcp_poll() 호출 한 번이 수행하는 내부 동작의 최대 개수입니다. 0이 아니어야 합니다.
size_t poll_budgetreserved
필드
예약 필드입니다. 0이어야 합니다.
uint16_t reservedsession_id
필드
데이터 메시지에 쓰는 HSMS 세션 ID(장치 ID(device ID))입니다.
uint16_t session_id송신 데이터 메시지에 이 값이 들어가며, 값이 다른 수신 데이터 메시지는 #PDCOMM_TCP_WRONG_SESSION으로 보고됩니다. 제어 메시지는 항상 0xFFFF를 사용합니다.
shutdown_timeout_ms
필드
정상 종료 한도(밀리초)입니다. 0이 아니어야 합니다.
uint64_t shutdown_timeout_mspdcomm_tcp_stop() 뒤에 연결은 Separate.req 같은 큐의 프레임을 기록하기 위해 최대 이 시간 동안 열려 있다가 닫힙니다.
struct_size
필드
이 구조체의 크기(바이트)입니다. sizeof(PdcommTcpOptions) 이상으로 설정합니다.
size_t struct_sizet3_ms
필드
T3 응답 시간 초과(timeout)(밀리초)입니다. 0이 아니어야 합니다.
uint64_t t3_ms타이머는 W 비트 데이터 요청을 소켓에 모두 기록했을 때 시작합니다. 만료되면 요청이 #PDCOMM_TCP_T3_TIMEOUT으로 실패합니다.
t5_ms
필드
T5 연결 분리 시간 초과(timeout)(밀리초)입니다. 0이 아니어야 합니다.
uint64_t t5_ms능동 모드에서 연결이 끝나거나 시도가 실패한 뒤 다음 시도까지의 지연이며, 이 동안 #PDCOMM_TCP_RETRY_WAIT 상태에 있습니다.
t6_ms
필드
T6 제어 트랜잭션 시간 초과(timeout)(밀리초)입니다. 0이 아니어야 합니다.
uint64_t t6_ms요청을 기록한 뒤 Select.rsp, Deselect.rsp, Linktest.rsp를 기다리는 시간을 제한합니다. 만료되면 트랜잭션이 #PDCOMM_TCP_T6_TIMEOUT으로 실패하고 연결이 닫힙니다.
t7_ms
필드
T7 미선택 시간 초과(timeout)(밀리초)입니다. 0이 아니어야 합니다.
uint64_t t7_ms연결이 수립되거나 Deselect된 뒤 이 시간 동안 NOT SELECTED 상태로 남아 있으면 연결을 닫습니다.
t8_ms
필드
T8 네트워크 문자 간 시간 초과(timeout)(밀리초)입니다. 0이 아니어야 합니다.
uint64_t t8_ms일부만 수신된 프레임이 이 시간 동안 진전이 없으면 연결을 닫습니다.
version
필드
옵션 레이아웃 버전입니다. #PDCOMM_TCP_OPTIONS_VERSION이어야 합니다.
uint32_t versionwrite_timeout_ms
필드
쓰기 시간 초과(timeout)(밀리초)입니다. 0이 아니어야 합니다.
uint64_t write_timeout_ms쓰기 큐 맨 앞의 프레임을 이 시간 안에 모두 기록하지 못하면 연결이 종류 #PDCOMM_TCP_IO_TIMED_OUT인 #PDCOMM_TCP_OP_WRITE 전송 오류로 실패합니다.