Commit e9c46b3
committed
fix(TCPServer): use poll() instead of select() to remove FD_SETSIZE limit
select() cannot watch file descriptors whose number is >= FD_SETSIZE (1024
on glibc). When the hosting process holds many descriptors (e.g. a JVM such
as MATLAB's), accepted socket FDs exceed that limit; the previous code either
rejected the connection (the set_size_exceeded guard added for select()) or
risked the "bit out of range" fd_set crash.
Replace the select()/fd_set machinery in TCPServer with poll() (WSAPoll() on
Windows), which has no FD_SETSIZE limitation. The pollfd set is rebuilt each
spin() from the listen socket plus client_fds_ (already tracked), so the
masterfds_/tempfds_/maxfd_ members and the FD_SET/FD_CLR/FD_ZERO/FD_ISSET and
set_size_exceeded code are removed entirely.
tests: add two TCPServer regression tests
- services_client_with_high_fd_number (POSIX): consumes low FDs so the
accepted client FD exceeds FD_SETSIZE, then asserts connect, bidirectional
data and disconnect all work. Fails on select(), passes on poll().
- receives_from_many_concurrent_clients: many clients send simultaneously;
asserts the server observes activity on every client FD (guards the poll()
revents loop).1 parent b940273 commit e9c46b3
3 files changed
Lines changed: 168 additions & 59 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
223 | 223 | | |
224 | 224 | | |
225 | 225 | | |
226 | | - | |
227 | | - | |
228 | | - | |
229 | | - | |
230 | 226 | | |
231 | 227 | | |
232 | 228 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
| 37 | + | |
37 | 38 | | |
38 | 39 | | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
39 | 43 | | |
40 | 44 | | |
41 | 45 | | |
42 | 46 | | |
43 | 47 | | |
44 | 48 | | |
45 | | - | |
| 49 | + | |
46 | 50 | | |
47 | 51 | | |
48 | 52 | | |
| |||
74 | 78 | | |
75 | 79 | | |
76 | 80 | | |
77 | | - | |
78 | | - | |
79 | | - | |
80 | 81 | | |
81 | 82 | | |
82 | 83 | | |
| |||
179 | 180 | | |
180 | 181 | | |
181 | 182 | | |
182 | | - | |
183 | | - | |
184 | | - | |
185 | 183 | | |
186 | 184 | | |
187 | 185 | | |
| |||
220 | 218 | | |
221 | 219 | | |
222 | 220 | | |
223 | | - | |
224 | | - | |
225 | | - | |
226 | | - | |
227 | | - | |
228 | | - | |
229 | | - | |
230 | | - | |
231 | | - | |
232 | | - | |
233 | | - | |
234 | | - | |
235 | | - | |
236 | | - | |
237 | | - | |
238 | 221 | | |
239 | 222 | | |
240 | 223 | | |
241 | 224 | | |
242 | 225 | | |
243 | 226 | | |
244 | 227 | | |
245 | | - | |
246 | | - | |
247 | | - | |
248 | | - | |
249 | | - | |
250 | 228 | | |
251 | 229 | | |
252 | 230 | | |
| |||
268 | 246 | | |
269 | 247 | | |
270 | 248 | | |
271 | | - | |
272 | | - | |
273 | | - | |
274 | | - | |
275 | | - | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
276 | 262 | | |
277 | | - | |
278 | | - | |
279 | | - | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
280 | 271 | | |
281 | | - | |
| 272 | + | |
282 | 273 | | |
283 | 274 | | |
284 | 275 | | |
285 | 276 | | |
286 | | - | |
| 277 | + | |
287 | 278 | | |
288 | 279 | | |
289 | 280 | | |
290 | 281 | | |
291 | | - | |
| 282 | + | |
292 | 283 | | |
293 | 284 | | |
294 | 285 | | |
| |||
297 | 288 | | |
298 | 289 | | |
299 | 290 | | |
| 291 | + | |
| 292 | + | |
300 | 293 | | |
301 | | - | |
302 | | - | |
| 294 | + | |
303 | 295 | | |
304 | | - | |
305 | | - | |
306 | | - | |
307 | | - | |
308 | | - | |
| 296 | + | |
| 297 | + | |
309 | 298 | | |
310 | 299 | | |
311 | 300 | | |
| |||
331 | 320 | | |
332 | 321 | | |
333 | 322 | | |
334 | | - | |
335 | 323 | | |
336 | 324 | | |
337 | 325 | | |
| |||
341 | 329 | | |
342 | 330 | | |
343 | 331 | | |
344 | | - | |
345 | | - | |
346 | | - | |
347 | | - | |
348 | | - | |
349 | | - | |
350 | | - | |
351 | | - | |
352 | | - | |
353 | 332 | | |
354 | 333 | | |
355 | 334 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
| 37 | + | |
37 | 38 | | |
38 | 39 | | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
39 | 45 | | |
40 | 46 | | |
41 | 47 | | |
| |||
497 | 503 | | |
498 | 504 | | |
499 | 505 | | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
| 525 | + | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
| 530 | + | |
| 531 | + | |
| 532 | + | |
| 533 | + | |
| 534 | + | |
| 535 | + | |
| 536 | + | |
| 537 | + | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
| 566 | + | |
| 567 | + | |
| 568 | + | |
| 569 | + | |
| 570 | + | |
| 571 | + | |
| 572 | + | |
| 573 | + | |
| 574 | + | |
| 575 | + | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
| 591 | + | |
| 592 | + | |
| 593 | + | |
| 594 | + | |
| 595 | + | |
| 596 | + | |
| 597 | + | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
| 603 | + | |
| 604 | + | |
| 605 | + | |
| 606 | + | |
| 607 | + | |
| 608 | + | |
| 609 | + | |
| 610 | + | |
| 611 | + | |
| 612 | + | |
| 613 | + | |
| 614 | + | |
| 615 | + | |
| 616 | + | |
| 617 | + | |
| 618 | + | |
| 619 | + | |
| 620 | + | |
| 621 | + | |
| 622 | + | |
| 623 | + | |
| 624 | + | |
| 625 | + | |
| 626 | + | |
| 627 | + | |
| 628 | + | |
| 629 | + | |
| 630 | + | |
| 631 | + | |
| 632 | + | |
| 633 | + | |
500 | 634 | | |
501 | 635 | | |
502 | 636 | | |
| |||
0 commit comments