feat(tcp): a failed send or receive says which errno it failed with
Send() and the receives threw a bare std::runtime_error with the strerror text, so a caller that reports the cause the way Python does - "the connection broke ([Errno 104] Connection reset by peer)", which a language model reads in Crafter.Review's SQL helper output - could not tell the code. They throw SocketErrorException now, as a failed connect already does: kind System, the errno, and the same message, still a std::runtime_error. A receive timeout stays SocketTimeoutException and a closed peer SocketClosedException. ShouldReportIoErrors: a peer that resets the connection (SO_LINGER 0) fails the next receive with ECONNRESET and a send into it with EPIPE or ECONNRESET. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
f9a45c143e
commit
16da0a1979
5 changed files with 124 additions and 7 deletions
|
|
@ -45,8 +45,8 @@ namespace Crafter {
|
|||
Resolver,
|
||||
};
|
||||
|
||||
// A resolve, a socket() or a connect that failed, with the code it failed
|
||||
// with. what() is the text ClientTCP has always thrown, and catching
|
||||
// A resolve, a socket(), a connect, a send or a receive that failed, with
|
||||
// the code it failed with. what() is the text ClientTCP has always thrown, and catching
|
||||
// std::runtime_error still catches it; the code is for callers that
|
||||
// report the cause in their own words — a Python-style
|
||||
// "[Errno 111] Connection refused", say — and would otherwise have to
|
||||
|
|
|
|||
Loading…
Reference in a new issue