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.
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.