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

pdcomm_tcp_request

함수

1차 데이터 메시지(primary data message)를 제출합니다.

PdcommStatus pdcomm_tcp_request(PdcommTcpEndpoint *endpoint, uint8_t stream, uint8_t function, uint8_t wait, const uint8_t *body, size_t body_length, PdcommTcpToken *out_token)

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

본문은 PdcommTcpOptions::item_limits로 검증한 뒤 복사하므로, 호출이 반환되면 해제해도 됩니다. wait가 1(W 비트)이면 엔드포인트가 트랜잭션을 엽니다. 해당 응답은 is_reply가 설정된 #PDCOMM_TCP_RECEIVED 이벤트로 도착하거나, 트랜잭션이 #PDCOMM_TCP_FAILED 이벤트로 끝납니다. wait가 0이면 응답을 추적하지 않으며, 프레임을 쓰고 나면 #PDCOMM_TCP_W0_WRITTEN 이벤트가 알려 줍니다. 성공은 메시지를 큐에 넣었다는 뜻일 뿐입니다.

매개변수

이름설명
endpoint#PDCOMM_TCP_SELECTED 상태인 유효한 엔드포인트입니다.
streamSECS-II 스트림이며 0부터 127까지입니다.
functionSECS-II 펑션이며 홀수(1차 메시지)여야 합니다. wait가 1이면 응답 펑션이 오버플로하므로 255이면 안 됩니다.
waitW 비트를 설정하고 응답을 기다리려면 1, 그렇지 않으면 0입니다.
body완전하게 인코딩된 SECS-II 항목 하나입니다. 본문이 없는 메시지이면 NULL과 body_length 0을 전달합니다.
body_lengthbody의 바이트 수입니다. 최대 PdcommTcpOptions::max_frame_bytes에서 14를 뺀 값입니다.
out_token트랜잭션 토큰을 받습니다. 먼저 모두 0으로 설정되므로 실패하면 항상 모두 0입니다. NULL이 아니어야 합니다.

반환값

메시지를 큐에 넣었으면 #PDCOMM_OK를 반환합니다. out_token 또는 endpoint가 NULL이거나, 길이가 0이 아닌데 body가 NULL이거나, wait가 1보다 크거나, stream이 127보다 크거나, function이 짝수이거나 W 비트와 함께 255이면 #PDCOMM_INVALID_ARGUMENT를 반환합니다. 본문이 정확히 하나의 유효한 SECS-II 항목이 아니면(잘린 항목 포함) #PDCOMM_INVALID_DATA를 반환합니다. 본문이 item_limits를 넘거나 프레임에 들어가지 않거나, 시스템 바이트(system bytes)가 소진되면 #PDCOMM_LIMIT_EXCEEDED를 반환합니다. 엔드포인트가 SELECTED 상태가 아니면 #PDCOMM_INVALID_STATE를 반환합니다. 준비된 이벤트(staged event)가 있거나, 모든 트랜잭션 슬롯이 사용 중이거나, 큐가 가득 찼거나, 엔드포인트가 정지하는 중이면 #PDCOMM_BACKPRESSURE를 반환합니다. #PDCOMM_POISONED를 반환할 수도 있습니다.

참고

  • 프레임이 일부만 기록된 트랜잭션을 취소하면 연결이 닫힙니다. 이미 회선에 나간 바이트는 회수되지 않습니다.