pdcomm_gem_program_grant
함수
S7F1 공정 프로그램 적재 문의(process program load inquire)를 보냅니다.
PdcommStatus pdcomm_gem_program_grant(PdcommTcpEndpoint *endpoint, const PdcommSecsItem *id, uint32_t length, PdcommTcpToken *out_token)본문이 length바이트인 프로그램을 보내도 되는지 상대에게 허가를 요청합니다. S7F2 허가(PPGNT)는 #PDCOMM_GEM_PROGRAM_GRANT_RECEIVED 결과로 도착합니다.
모든 송신 프로그램 요청에는 프로그램 저장소와 GEM Communicating 상태가 필요합니다. 요청은 공유 대기 슬롯 32개 중 하나를 차지하고, 일반적인 TCP 토큰, 취소, T3 동작을 따릅니다. 또한 요청의 PPID만큼 max_pending_ids와 max_pending_identifier_bytes 예산을 차감하며, 호스트이면 공유 예산인 PdcommGemHostOptions::max_pending_ids도 차감합니다. 성공은 요청이 큐에 들어갔다는 뜻이며, 허가되었거나 확인 응답을 받았거나 응답을 받았다는 뜻은 아닙니다.
매개변수
| 이름 | 설명 |
|---|---|
endpoint | 프로그램 저장소가 있고 Communicating 상태인 GEM 엔드포인트입니다. |
id | PPID 항목: 비어 있지 않은 ASCII 또는 Binary입니다. |
length | LENGTH: PPBODY 페이로드 크기(바이트)입니다. |
out_token | 요청 토큰을 받습니다. 먼저 0으로 초기화되므로 실패하면 항상 0입니다. NULL이 아니어야 합니다. |
반환값
요청이 큐에 들어가면 #PDCOMM_OK를 반환합니다. 인수가 NULL이거나 PPID가 비어 있지 않은 ASCII 또는 Binary 항목이 아니면 #PDCOMM_INVALID_ARGUMENT를 반환합니다. 프로그램 저장소가 구성되지 않았거나 GEM이 Communicating 상태가 아니면 #PDCOMM_INVALID_STATE를 반환합니다. 준비된 TCP 이벤트(staged event)가 대기 중이거나, 빈 대기 슬롯이 없거나, 송신 큐가 가득 차면 #PDCOMM_BACKPRESSURE를 반환합니다. PPID가 120바이트보다 길거나, 메시지가 GEM 항목 한도를 넘거나, 대기 PPID 예산을 넘으면 #PDCOMM_LIMIT_EXCEEDED를 반환합니다. 그 밖에 #PDCOMM_ALLOCATION_FAILED, TCP 상태 코드, #PDCOMM_POISONED를 반환할 수 있습니다.