fix: Use poll() for connect timeout on UNIX to avoid FD_SETSIZE limit #800
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.
Fixes #751
Problem
On UNIX systems, ConnectFDTimeout() uses select() to wait for a non-blocking connect to complete. However, select() has a hard limit of FD_SETSIZE (typically 1024) for file descriptors. When an application has many open connections and the socket fd is >= 1024, using FD_SET() causes undefined behavior, typically resulting in memory corruption or a crash.
Solution
Replace select() with poll() on UNIX platforms. poll() has no such fd limit since it uses an array of pollfd structures rather than a fixed-size bitmask.
Windows continues to use select() because its fd_set implementation is not bitmask-based and does not have this limitation.