Fix IPC transport bug: Use write_all to send data over socket #648
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Data is sent over the IPC socket using
.write()
on aUnixStream
. On success this method returns the number of bytes written as integer. This number is not handled however, the result is only checked for success.Documentation for
write()
(highlighted important parts):This seems to rarely be an issue with "normal" usage of
web3-rs
, since the messages sent over the socket are relatively small, a few hundred bytes at maximum. This seems to always fully succeed.Just recently however, I started sending larger requests to my Ethereum node via an IPC socket and began hitting a bug where the node would randomly close the connection due to JSON parsing errors. After some debugging, it turns out that when sending large messages, they might not be sent in full due to not handling the return value of
write()
.This PR fixes this bug by replacing
.write()
with.write_all()
: