pdcomm_gem_spool_respond
함수
수신한 S2F43, S2F59, S6F23 요청에 응답합니다(장비).
PdcommStatus pdcomm_gem_spool_respond(PdcommTcpEndpoint *endpoint, PdcommGemResult *result)result는 이 엔드포인트, 세대(generation), 선택(selection)에서 나온, 아직 응답하지 않은 #PDCOMM_GEM_SPOOL_RECEIVED 1차 메시지여야 하며, 그 수신 응답 슬롯이 아직 유효해야 합니다. GEM은 Communicating 상태여야 하고 스풀은 동기화되어 있어야 합니다. 이 호출은 응답을 준비하고, 스풀 변경이 있으면 설치한 뒤에야 응답을 큐에 넣습니다.
- **S2F43**는 카탈로그를 기준으로 검사합니다. 선택이 유효하지 않으면 고정된 상세 S2F44 거부(RSPACK 1과 STRACK 1 스트림 허용 안 됨, 2 알 수 없는 스트림, 3 알 수 없는 펑션, 4 2차 펑션)를 보내며 아무것도 바꾸지 않습니다. 선택이 유효하면 현재 선택을 교체하고 정책은 유지하며, S2F44 수락을 보내기 전에 설치합니다.
- **S2F59**에는 현재 선택을 담은 S2F60으로 응답합니다.
- **S6F23**에는 전송 또는 전달 중이면 RSDA 1(사용 중), 스풀이 비어 있으면 2(스풀된 데이터 없음), 그 밖에는 0(수락)으로 응답합니다. 수락된 삭제(purge)는 S6F24를 보내기 전에 설치됩니다. 수락된 전송은 S6F24가 송신 큐에 들어간 뒤에야 전송 실행을 시작합니다.
형식이 잘못된 요청은 일부만 적용되는 일이 없습니다. 설치된 응답은 송신 실패 후에도 남습니다. 다시 호출하면 다시 설치하지 않고 보관된 응답만 다시 보냅니다. #PDCOMM_SPOOL_UNCONFIRMED 뒤에는 응답이 보관되지만, pdcomm_gem_spool_confirm_reply()가 불확실성을 받아들일 때까지 보내지 않습니다.
매개변수
| 이름 | 설명 |
|---|---|
endpoint | 스풀이 있고 Synchronized이면서 Communicating 상태인 장비 엔드포인트입니다. |
result | pdcomm_gem_handle_event()가 만든 스풀 요청 결과입니다. 이 결과의 reply_sent, acknowledgement, 처리 필드가 갱신됩니다. |
반환값
응답을 큐에 넣었으면 #PDCOMM_OK를 반환합니다. 디렉터리 동기화가 확인되지 않은 채 변경을 설치하고 응답을 보내지 않았으면 #PDCOMM_SPOOL_UNCONFIRMED를 반환합니다. 결과가 다른 엔드포인트, 세대, 선택에 속하거나, 이미 응답했거나, 수신 슬롯이 사라졌으면 #PDCOMM_STALE_TOKEN을 반환합니다. 결과가 스풀 요청이 아니거나, GEM이 Communicating 상태가 아니거나, 스풀이 동기화되지 않았으면 #PDCOMM_INVALID_STATE를 반환합니다. 준비된 TCP 이벤트(staged event)가 대기 중이거나, 송신 큐가 가득 찼거나, 진행 중인 전달이 있는데 삭제나 재구성을 하려 하면 #PDCOMM_BACKPRESSURE를 반환합니다. 형식이 잘못된 요청이면 #PDCOMM_INVALID_DATA를 반환합니다. 인수가 NULL이면 #PDCOMM_INVALID_ARGUMENT를 반환합니다. #PDCOMM_IO_ERROR 같은 영속화(persistence) 오류를 반환할 수 있으며, 이때는 아무것도 설치되지 않았으므로 다시 시도할 수 있습니다. 그 밖에 #PDCOMM_LIMIT_EXCEEDED, #PDCOMM_ALLOCATION_FAILED, #PDCOMM_POISONED를 반환합니다.
참고
- 성공한 확인 응답은 로컬 증거일 뿐입니다. 호스트는 이것으로 원격 측의 영구 저장 여부를 추론할 수 없습니다.