Skip to content

C server poll handling bug (no QUIC payload) #15

@Mygod

Description

@Mygod

Summary: The C server (slipstream/src/slipstream_sockloop.c) emits an NXDOMAIN response when picoquic_prepare_packet_ex returns send_length == 0 for a poll. That silently converts a valid poll into a negative DNS response, and the client still clears the in-flight poll ID, masking stalled QUIC progress. Under RTT/idle stretches this leads to bogus NXDOMAINs and makes backlog diagnosis harder.

Reference: In slipstream_sockloop.c, the server path always encodes/sends the DNS response regardless of send_length. The DNS encoder defaults to NameError when the payload is empty. The Rust server now replies with NOERROR+empty payload in this case to drain the poll without lying.

Suggested fix: In the C server, if send_length == 0 and no explicit rcode is set, send NOERROR with an empty payload (or skip sending) instead of relying on the encoder's NameError default. This keeps polls clearing without emitting spurious NXDOMAIN responses and aligns behavior with the Rust implementation.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions