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

pdcomm_secs1_poll

함수

한 시간 구간 동안 회선 제어, 타이머, 콜백 I/O를 실행합니다.

PdcommStatus pdcomm_secs1_poll(PdcommSecs1Endpoint *endpoint, uint64_t now, size_t *attempts)

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

호출할 때마다 최대 PdcommSecs1Options::poll_budget 단계를 수행합니다. 회선이 유휴 상태이면 다음 송신 블록을 시작하고, 만료된 타이머를 처리하고, 받은 문자와 완료된 쓰기를 처리하며, 쓰기와 읽기 콜백을 번갈아 시도합니다. 콜백은 이 함수에서만 호출됩니다. 결과는 이벤트로 큐에 쌓이며, pdcomm_secs1_next_event()로 비웁니다. 장애 상태인 엔드포인트는 아무 작업도 하지 않고 시도 횟수 0과 함께 #PDCOMM_OK를 반환합니다.

매개변수

이름설명
endpoint시작된 엔드포인트입니다.
now호출자 틱으로 나타낸 현재 시각이며, *_ticks 옵션과 같은 단위입니다. 이전 호출에 전달한 값보다 작으면 안 됩니다.
attempts수행한 단계 수를 받습니다(먼저 0으로 설정). NULL이 아니어야 합니다.

반환값

성공하면 #PDCOMM_OK를 반환합니다. attempts 또는 endpoint가 NULL이거나 내부 프로토콜 검사가 단계를 거부하면 #PDCOMM_INVALID_ARGUMENT를 반환합니다. 준비된 이벤트(staged event)를 먼저 가져와야 하거나 이벤트 큐가 가득 차면 #PDCOMM_BACKPRESSURE를 반환합니다(대기 중인 단계는 유지되므로 이벤트를 비운 뒤 다시 폴링합니다). 엔드포인트가 시작되지 않았거나, 다른 스레드에서의 호출, 동시 호출, 재진입 호출이면 #PDCOMM_INVALID_STATE를 반환합니다. now가 이전 값보다 작거나 타이머 기한이 오버플로하면 #PDCOMM_LIMIT_EXCEEDED를 반환합니다. 내부 버퍼를 할당할 수 없으면 #PDCOMM_ALLOCATION_FAILED를 반환합니다. 엔드포인트가 오염(poisoned) 상태이거나 오염 상태가 되면 #PDCOMM_POISONED를 반환합니다.

참고

  • I/O 실패는 상태 코드가 아닙니다. #PDCOMM_SECS1_EVENT_FAULT 이벤트를 만들며 호출은 그래도 #PDCOMM_OK를 반환합니다.
  • 스레드 안전성: 생성한 스레드에서만 호출하며, 콜백 안에서는 절대 호출하지 않습니다.