alexcrichton / curl-rust

Rust bindings to libcurl
MIT License
1.02k stars 233 forks source link

Disable compiling with poll() on macOS #393

Closed sagebind closed 3 years ago

sagebind commented 3 years ago

I've noticed recently that when using the bundled curl version on macOS, very occasionally curl will get "stuck" in the TCP connection phase when using the multi interface. Apparently this is caused by the poll() implementation not behaving quite as the POSIX standard says it should on some macOS versions. (Curl uses poll()/select() to check if a socket has finished connecting without blocking, even if you are not using those functions to poll read/write readiness.)

This originally was a problem just for macOS 10.12, but after a recent update it seems like this regression might have come back in 10.15. It is more reliable to just disable poll() completely on macOS, which the official build configuration does here: https://github.com/curl/curl/blob/1e19eceb50d6d8b9c9b37e2f8e1259b2f311c82a/m4/curl-functions.m4#L4999-L5010

See also https://github.com/curl/curl/issues/1057 when this was originally reported way back in the day.