inhabitedtype / faraday

Serialization library built for speed and memory efficiency
Other
134 stars 20 forks source link

faraday-async limit iovecs to iovec max #75

Open ChrisWills opened 2 years ago

ChrisWills commented 2 years ago

I discovered that when using faraday-async while trying to serve large files with httpaf, the writev() syscall would fail with EINVAL because iovcnt was greater than IOV_MAX on my system (Linux).

Lwt works just fine without this patch because [Lwt_unix.writev] does this automatically while [Bigstring_unix.writev] which ultimately gets called on the Async side is more naive and defaults to just slamming whatever iovecs array you give it into writev(). I tried calling [Bigstring_unx.writev] with the optional count argument but that didn't seem to work while this patch did.

A better solution might be to patch [Bigstring_unix.writev] to be smarter about this mirroring the Lwt approach.

ChrisWills commented 2 years ago

The httpaf example code that I used to reproduce and debug this can be found here: https://github.com/ChrisWills/httpaf/commit/75328b4d4452290302c77fe77c910087b263663d