One caveat: with low level functions like this you are getting the bytes from each packet as it comes in. Poor example: if a packet is fragmented you may get 31 then 33 bytes instead of 64 bytes. You may need to recombine data in a buffer in a higher level function.
It has necer been the point to make my own webserver and the size is not importent. It's about getting the best data flow. You can make a pull if you like.
Consider creating an Async WiFi Client class and testing this project on it.
Here's an example for ESP8266. Note it's just a thin wrapper around ESPAsyncTCP: https://github.com/me-no-dev/ESPAsyncTCP/blob/master/examples/ClientServer/Client/Client.ino
And here's AsyncTCP for ESP32: https://github.com/me-no-dev/AsyncTCP
One caveat: with low level functions like this you are getting the bytes from each packet as it comes in. Poor example: if a packet is fragmented you may get 31 then 33 bytes instead of 64 bytes. You may need to recombine data in a buffer in a higher level function.