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

pdcomm_gem_spool_send_next

함수

수락된 전송 중에 스풀 큐의 맨 앞 메시지를 보냅니다.

PdcommStatus pdcomm_gem_spool_send_next(PdcommTcpEndpoint *endpoint, PdcommTcpToken *token)

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

호스트의 S6F23 전송 요청이 수락된 뒤 호출합니다. 호출할 때마다 메시지 하나를 제출하며, 다음 맨 앞 메시지를 보내는 자동 반복은 없습니다. W1 메시지는 공유 대기 슬롯 32개 중 하나를 사용하고, W0 메시지는 별도의 단일 진행(single-flight) 토큰을 사용하며 응답 슬롯을 쓰지 않습니다. 제출은 전달이 아닙니다. 이어지는 #PDCOMM_GEM_SPOOL_DELIVERY_RESPONSE, #PDCOMM_GEM_SPOOL_DELIVERY_WRITTEN, #PDCOMM_GEM_SPOOL_DELIVERY_FAILED 결과를 처리하고, 성공 증거가 있으면 pdcomm_gem_spool_complete_delivery()를 호출합니다.

맨 앞 메시지를 제출할 수 없으면(W1 메시지에 쓸 빈 대기 슬롯이 없거나, 저장된 메시지가 유효하지 않거나, TCP 송신에 실패한 경우) 큐는 유지되고 현재 전송 실행이 끝납니다. 큐가 비어 있으면 실행이 끝나고 호출은 #PDCOMM_OUT_OF_RANGE를 반환합니다. 전송 중이 아니거나, 사용 중이거나, 동기화되지 않은 상태에서 호출하면 아무것도 제출하지 않습니다.

매개변수

이름설명
endpoint스풀이 있고 Synchronized이면서 Communicating 상태인 장비 엔드포인트입니다.
token제출한 메시지의 토큰을 받습니다. 실패하면 항상 0입니다. NULL이 아니어야 합니다.

반환값

맨 앞 메시지를 제출했으면 #PDCOMM_OK를 반환합니다. 큐가 비어 있으면 #PDCOMM_OUT_OF_RANGE를 반환합니다. 활성 전송 실행이 없거나, 스풀이 동기화되지 않았거나, GEM이 Communicating 상태가 아니면 #PDCOMM_INVALID_STATE를 반환합니다. 준비된 TCP 이벤트(staged event)가 대기 중이거나, 전달 또는 디큐가 대기 중이거나, W1 메시지에 쓸 빈 대기 슬롯이 없거나, 송신 큐가 가득 차면 #PDCOMM_BACKPRESSURE를 반환합니다. 시도 번호가 소진되었거나 메시지가 한도를 넘으면 #PDCOMM_LIMIT_EXCEEDED를 반환합니다. 인수가 NULL이면 #PDCOMM_INVALID_ARGUMENT를 반환하며, 그 밖에 TCP 상태 코드 또는 #PDCOMM_POISONED를 반환합니다.