From 0938d544ed12cb8d9e01bf5a2fb6558a18679b76 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Thu, 14 Aug 2025 04:13:17 +0930 Subject: [PATCH] gossipwith: add flag to insist that we receive all messages. Signed-off-by: Rusty Russell --- devtools/gossipwith.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/devtools/gossipwith.c b/devtools/gossipwith.c index c6f427f54..f506787cd 100644 --- a/devtools/gossipwith.c +++ b/devtools/gossipwith.c @@ -30,6 +30,7 @@ static bool no_init = false; static bool handle_pings = false; static bool hex = false; static bool explicit_network = false; +static bool no_early_close = false; static int timeout_after = -1; static u8 *features; @@ -154,6 +155,8 @@ static u8 *sync_crypto_read(const tal_t *ctx, int peer_fd, struct crypto_state * if (!read_all(peer_fd, hdr, sizeof(hdr))) { status_debug("Failed reading header: %s", strerror(errno)); + if (no_early_close) + exit(1); exit(0); } @@ -237,8 +240,12 @@ static struct io_plan *handshake_success(struct io_conn *conn, u8 *msg; if (poll(pollfd, ARRAY_SIZE(pollfd), - timeout_after < 0 ? -1 : timeout_after * 1000) == 0) - return 0; + timeout_after < 0 ? -1 : timeout_after * 1000) == 0) { + /* Timeout */ + if (no_early_close) + exit(1); + exit(0); + } /* We always to stdin first if we can */ if (pollfd[0].revents & POLLIN) { @@ -288,6 +295,8 @@ static struct io_plan *handshake_success(struct io_conn *conn, err(1, "failed to shutdown write to peer: %s", strerror(errno)); while (sync_crypto_read(NULL, peer_fd, cs)); + if (max_messages != 0 && no_early_close) + exit(1); exit(0); } @@ -368,6 +377,8 @@ int main(int argc, char *argv[]) "Select the network parameters (bitcoin, testnet, signet," " regtest, liquid, liquid-regtest, litecoin or" " litecoin-testnet)"); + opt_register_noarg("--must-get-max-messages", opt_set_bool, &no_early_close, + "Fail with exit code 1 unless we reach maximum messages"); opt_register_noarg("--help|-h", opt_usage_and_exit, "id@addr[:port] [hex-msg-tosend...]\n" "Connect to a lightning peer and relay gossip messages from it", @@ -436,5 +447,6 @@ int main(int argc, char *argv[]) initiator_handshake(conn, &us, &them, &addr, NULL, NORMAL_SOCKET, handshake_success, argv+2); - exit(0); + /* Unreachable */ + abort(); }