한국어 | English
05. Errors¶
이 category는 core의 result-enum-family 표에 대응하는 이 레퍼런스의 대응 문서다 —
공유 exception 기반과, 모든 submit/request/recv/event/close/bind/connect/config
실패 API(Sockets/Messaging/Eventing/Core category)가 던지는 7개 typed exception을
문서화한다. 정확한 signature는
Contracts/Errors/가
소유한다.
Typed exception family¶
각 API family는 단일 공유 exception 타입이 아니라 nested ErrorCode enum을 담은
자신만의 typed exception을 던진다 — caller는 구체적 타입(또는 공유
ZlinkException 기반)을 잡아 .Result로 분기한다.
| Exception | 던지는 곳 | ErrorCode 값 |
|---|---|---|
ZlinkSubmitException |
send/publish/request-submit API(모든 socket-type category) | Backpressured(1, 정상 제어 흐름), NotConnected(2), NotFound(3), Terminated(4), InvalidHandle(5), InvalidArgument(6), NotSupported(7), InvalidState(8), ThreadViolation(9), OutOfMemory(10), SeqExhausted(11), InternalError(12), NotAdmitted(13, 정상 제어 흐름 — target은 도달 가능했지만 admission 정책이 거부) |
ZlinkRequestException |
Submit() 또는 Async() terminal request 실패 |
TimedOut(101), NotFound(102), Terminated(103), ProtocolError(104), InternalError(105), Rejected(106), Conflict(107), Busy(108), NotConnected(109), InvalidArgument(110), InvalidState(111), NotSupported(112), Backpressured(113) |
ZlinkRecvException |
recv-family API(Sockets/Eventing category) | NoData(201), Busy(202), Terminated(203), InvalidHandle(204), NotSupported(205), InternalError(206) |
ZlinkHandlerException |
유지되는 result family; 현행 public completion/event 전달에는 등록형 handler가 없음 | InvalidArgument(301), Busy(302), NotSupported(303), Deadlock(304), InvalidHandle(305), InternalError(306) |
ZlinkCloseException |
Close()/Dispose 경로(Sockets/Eventing category), IContext.Shutdown()(Core category) |
Busy(401), Shutdown(402), InvalidHandle(403), InternalError(404) |
ZlinkBindException |
ISocket.Bind(...)(Sockets category) |
InvalidArgument(501), AddrInUse(502), NotSupported(503), InvalidHandle(504), InternalError(505) |
ZlinkConnectException |
IConnectableSocket.Connect/Unbind/Disconnect/DisconnectRid(Sockets category) |
InvalidArgument(601), NotSupported(602), InvalidHandle(603), InternalError(604), NotFound(605), Conflict(606), Busy(607) |
ZlinkConfigException |
모든 socket/context option getter/setter(Sockets/Core category) | InvalidHandle(701), InvalidArgument(702), NotSupported(703), InternalError(704), InvalidState(705), NotFound(706), Conflict(707), BufferTooSmall(708), Busy(709) |
각 값 family가 실제로 뜻하는 것. ZlinkSubmitException의 Backpressured/
NotConnected/NotFound/NotAdmitted는 예외적 실패가 아니라 정상적인 실행
흐름이다 — non-Ok submit 결과를 전부 같게 취급하는 caller는 "재시도가 합리적"과
"이대로 제출하면 절대 성공하지 않음"의 구분을 잃는다. ZlinkConfigException의
BufferTooSmall은 caller가 제공한 output 용량이 첫 완결된 값을 담을 수 없다는
뜻이다 — 호출은 아무것도 소비하지 않으므로 더 큰 buffer로 재시도해도 안전하다.
InvalidState는 stale handle이나 닫힌 수신·연결 상태를 다룬다. Handler
result family는 남아 있지만 현행 public send/request terminal과 pull-event
표면은 이를 생성하지 않는다.
ZlinkException¶
위 모든 typed exception이 상속하는 abstract 기반.
try
{
dealer.Send().Message(Message.From("payload")).Submit();
}
catch (ZlinkSubmitException ex) when (ex.Result == ZlinkSubmitException.ErrorCode.Backpressured)
{
// 정상 제어 흐름이지 실제 실패가 아니다
}
Options.
| Member | 의미 |
|---|---|
ZlinkException(int code) / ZlinkException(int code, int nativeErrno) |
protected 생성자만 존재 — public 진입점은 각 typed exception 자신의 ErrorCode를 받는 생성자다(Ok는 절대 안 됨, 아래 참고) |
Code |
int, 실패를 분류하는 zlink result code |
NativeErrno |
int, 밑에 깔린 native errno, 없으면 0 |
Completion result. 해당 없음 — 이건 exception 계층 자체다. 모든 typed
exception의 public 생성자는 ValidatePublicErrorCode<TErrorCode>를 통해 성공값
Ok를 거부하며, caller가 Ok로 생성하려 하면 ArgumentOutOfRangeException을
던진다. native errno도 함께 받는 생성자 overload는 internal runtime 변환용일
뿐 public 표면이 아니다.
선택 기준. 구체적 typed exception(ZlinkSubmitException 등)을 잡아
ErrorCode 타입의 .Result로 분기하거나, exception 타입 전체에 걸쳐 .Code/
.NativeErrno만 일반적으로 필요할 땐 공유 ZlinkException 기반을 잡는다.
no-data와 일시적 back-pressure는 절대 일반 exception으로 보고되지 않는다 —
대신 Sockets/Messaging category의 bool 반환 Recv/Submit 관례를 참고한다.
SubmitResult¶
ZlinkSubmitException.ErrorCode와 같은 값을 갖는 public enum으로, native result
code가 typed exception이나 bool 반환으로 바뀌기 전 내부적으로 매핑하는 데
쓰인다.
Options. ZlinkSubmitException.ErrorCode(위)와 같은 값 집합.
Completion result. 해당 없음 — Contracts/의 어떤 public API도 SubmitResult를
직접 반환·수신하지 않는다. 모든 public submit 표면(Messaging/Sockets category)은
실패를 이 enum이 아니라 bool 또는 ZlinkSubmitException으로 보고한다.
선택 기준. 오늘 시점 application 코드에서는 해당 사항 없음 — public 타입으로
존재하지만 어떤 public contract member로도 도달하지 않는다. 이걸
ZlinkSubmitException.ErrorCode로 병합해야 할지 아니면 실제로 도달 가능하게
만들어야 할지는 스펙 차원의 질문이며 이 레퍼런스의 범위 밖이다.
Contracts/Errors/와
.NET 바인딩 스펙에서 전체 근거를 확인한다.