Indeed, there isn't really a clean shutdown mechanism right now. I guess it
hasn't come up as a priority because in most use cases we just haven't
really cared if there's a TCP RST triggered under the hood... since we're
already killing the connection, we ignore that error anyway.

I suppose what we should do is, in the case that we receive a clean EOF,
inhibit the sending of an abort message back, just send EOF back.

-Kenton

On Thu, Sep 21, 2023 at 6:09 PM 'Alex' via Cap'n Proto <
[email protected]> wrote:

> Hi all,
>
> I am designing an application (in C++) where, upon invocation of a
> particular RPC call, both the server and the client agree to cleanly
> disconnect from one another. By "cleanly", I mean that both the server
> and the client send a TCP FIN/ACK and nothing more (e.g. no RSTs).
> Unfortunately, in the current design the receipt of a FIN will cause
> AsyncIoMessageStream::tryReadMessage() to abort, whereupon it will
> throw KJ_EXCEPTION(DISCONNECTED, "Peer disconnected.")[0]. This
> exception is eventually written to the client socket, and if the client
> is already gone, there will be one or more RSTs in response:
>
> C -> S: "Goodbye" (RPC call)
> C -> S: "I have nothing more to say" (TCP FIN)
>
> (the client does not expect the server to say anything more and closes
> the socket)
>
> S -> C: "Exception! You disconnected from me" (RPC message)
> C -> S: "Error: Connection reset by peer" (TCP RST)
>
> Given that both the server and client have agreed to shut down the
> connection, this is not an exceptional circumstance. Therefore, an
> exception should not be thrown.
>
> Unfortunately, there does not seem to be a way to indicate to the
> RpcSystem that the DISCONNECTED exception ought to be suppressed. Is
> there something I am missing? I appreciate any assistance.
>
> Regards,
> Alex
>
> [0]
> https://github.com/capnproto/capnproto/blob/761aeb17563a59f43b3fe9bae93df83c6bd57d06/c%2B%2B/src/capnp/rpc.c%2B%2B#L2775
>
> --
> You received this message because you are subscribed to the Google Groups
> "Cap'n Proto" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/capnproto/20230921190853.115b911d%40centromere.net
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"Cap'n Proto" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/capnproto/CAJouXQncgKYxvr_LUj4F2dJJRjDLcS%2BPPLYLYKhPkvkF0XOp3g%40mail.gmail.com.

Reply via email to