Web3JS Socket/Connection Issues
Dealing with Socket/Connection issues in Web3JS
Last updated
Was this helpful?
Dealing with Socket/Connection issues in Web3JS
Last updated
Was this helpful?
Socket connection issues are encountered while using the library to communicate with RPCs
The errors you’ve faced might be like the following
These errors are caused by NodeJS. It uses too many local ports to communicate with the server. At some point, this hits a limit and existing connections are broken and new ones are not allowed causing the errors. You can check the number of ports used by your Node process via the following command on UNIX based systems.
We’ve been in touch with Anza Labs and the maintainers of `@solana/web3.js` and have confirmed that this issue is not with web3.js.
A fix to these issues is to limit the number of ports NodeJS can use. This can be done easily from your JS code. We've set the number of allowed ports to 100 in our tests and performed over 2 million asynchronous getMultipleAccounts
calls with 1000 addresses in each call. All of these calls resolved in ~2mins. You are free to set the number as you see fit.
What is an ideal connection count for you?
Configuring undici
We’re continuously working on this issue. Improvements and progress will be added to this document.
These errors originate from the library; Not by web3.js or your RPC. This library is NodeJS’ implementation of the `fetch` function used to make API calls. Following are some references to this issue w.r.t. `undici`
Each established connection needs a TLS handshake. More details . Establishing connection is time a consuming process and in this case is unnecessary since existing connections can be reused. It'll also be comparatively less load on the RPC as well. We recommend setting the connection limit to 50. You can monitor the number of connections using the command mentioned above in the Causesection. And, if you feel like all connections are always in use and your application can benefit from more connections then you can increase the limit.
Using for API calls instead of `undici`. The `@solana/web3.js` library allows you to specify a custom fetch function in the connection object. You can use Axios there. Here’s an example
Here's a full example on using axios with web3.js
Using the runtime. Bun is a new JS runtime. As per our tests, these issues aren’t encountered at all via Bun. Please note that bun is quite new and may cause other problems.
Using the new version of . Anza Labs is developing a new and improved version of the library which, as of this writing, is in technical preview. It uses the `undici` library and the errors are less frequent in it. If encountered, with the configuration mentioned in [1] they should be resolved. Do note that the library is not compatible with the current version, meaning that it’ll be a ground up rewrite of your codebase.
If you're using SDKs like which uses underneath, or some other libraries, you may encounter errors like ERR_STREAM_PREMATURE_CLOSE
which have this same underlying issue and limiting the number of connections for NodeJS has resolved the issue for our customers. The number of connections for libraries like node-fetch
and others can be limited by providing an http(s).Agent
configuration. For example
We've proposed that the @solana/web3.js
library have a default configurable connection limit. You can follow an upvote the discussion on .