1

When attempting to send transactions to the TPU from a Rust client using a TpuClient connection, I am encountering the following error:

panicked at 'QuicLazyInitializedEndpoint::create_endpoint bind_in_range: Custom { kind: Other, error: "No available UDP ports in (8000, 10000)" }

Any insight as to what is happening here? From what I can gather, RPCs compete for a limited number of QUIC connections on the validators. Would this potentially suggest that there was high demand during this specific slot and so a connection was not able to be made? Any other ideas? And any ideas on how to get around this?

1 Answer 1

2

Your client is trying to send to the old TPU port, which used to accept UDP. Now you must configure your client to use QUIC.

That code has changed a lot recently, so the easiest thing might be to update your crates to version 1.14, which defaults to using QUIC everywhere.

9
  • I am still getting the same error despite using crate version 1.14. It is pointing to this line of code: docs.rs/solana-client/latest/src/solana_client/nonblocking/… The error is occuring when this function is called: solana_net_utils::bind_in_range, which is defined here: docs.rs/solana-net-utils/latest/src/solana_net_utils/…. It looks like that always returns a UdpSocket. I guess QUIC is still using UDP sockets then right? Any other thoughts on what might be occurring here?
    – guillermo
    Commented Jan 12, 2023 at 17:13
  • Yeah correct, it's using a UDP socket under the hood, so this points to an issue in your testing machine, since it's failing to bind to a port. Do you have networking privileges on that machine?
    – Jon C
    Commented Jan 12, 2023 at 20:33
  • Yeah this error doesn't occur immediately, it usually occurs after a while. My guess was that as I am connecting from an RPC that isn't a staked validator, I am getting booted out of the 500 available QUIC ports due to high demand for connections.
    – guillermo
    Commented Jan 13, 2023 at 1:07
  • You may be creating too many TPU clients in that case. Have you tried creating one and then reusing that for the whole of your run?
    – Jon C
    Commented Jan 13, 2023 at 13:07
  • Yeah I just create one TPU client and use it across various threads as needed.
    – guillermo
    Commented Jan 13, 2023 at 17:12

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.