pdcomm_tcp_poll
함수
대기 중인 소켓 I/O와 HSMS 타이머 처리를 수행합니다.
PdcommStatus pdcomm_tcp_poll(PdcommTcpEndpoint *endpoint, size_t *progressed)한 번 호출할 때 최대 PdcommTcpOptions::poll_budget개의 내부 작업을 수행합니다. 내부 작업에는 연결 또는 수락, 프레임 읽기와 쓰기, 제어 메시지 응답, T3, T5, T6, T7, T8 타이머 만료 처리, 결과를 이벤트 큐로 옮기기가 있습니다. 결과는 pdcomm_tcp_next_event()로 가져옵니다. 연결 자체의 실패는 반환 상태 코드가 아니라 이벤트로 보고됩니다.
매개변수
| 이름 | 설명 |
|---|---|
endpoint | 유효한 엔드포인트입니다. |
progressed | 진행된 내부 작업의 개수를 받습니다. 이 값은 생성된 이벤트 개수가 아닙니다. NULL이 아니면 항상 먼저 0으로 설정됩니다. NULL이 아니어야 합니다. |
반환값
폴링 단계를 마치면 #PDCOMM_OK를 반환합니다. endpoint 또는 progressed가 NULL이면 #PDCOMM_INVALID_ARGUMENT를 반환합니다. 준비된 이벤트(staged event)가 있거나(pdcomm_tcp_next_event() 참고) 내부 큐가 더 이상 결과를 받을 수 없으면 #PDCOMM_BACKPRESSURE를 반환합니다. 연결 수락에 실패하면 #PDCOMM_IO_ERROR를 반환합니다. 타이머 기한이 오버플로하면 #PDCOMM_LIMIT_EXCEEDED를 반환합니다. 단조 시계(monotonic clock)가 거꾸로 가면 #PDCOMM_INTERNAL_ERROR를 반환합니다. #PDCOMM_POISONED를 반환할 수도 있습니다.
참고
- 연결 시도가 진행 중이면 이 호출은 최대 PdcommTcpOptions::connect_timeout_ms 동안 블로킹됩니다.
- 이벤트 큐가 비어 있다고 세션이 끝난 것은 아닙니다. 엔드포인트를 사용하는 동안에는 계속 폴링합니다.
- GEM 역할이 구성되어 있으면 이 호출은 GEM 상태도 갱신합니다.