|
442 | 442 | (when (procedure? error-reporter)
|
443 | 443 | (guard (e (else #f)) (error-reporter event e))))
|
444 | 444 |
|
| 445 | + ;; selector returns list of `(socket timeout . data) |
445 | 446 | (define (->on-read-data sock) `(,@(cddr sock) #f))
|
446 | 447 | (define (->timeout-data sock)
|
447 | 448 | (let-values (((on-read socket timeout) (apply values (cddr sock))))
|
448 | 449 | (let ((e (make-selector-timeout-condition socket timeout)))
|
449 | 450 | (list on-read socket timeout e))))
|
450 | 451 |
|
451 | 452 | (define (selector-waiter)
|
452 |
| - (let wait-selector () |
453 |
| - (guard (e (else (on-error 'selector e) #f)) |
454 |
| - (unless (socket-selector-closed? selector) |
455 |
| - (let-values (((socks timedouts) (socket-selector-wait! selector))) |
456 |
| - (actor-send-message! on-read-actor (map ->on-read-data socks)) |
457 |
| - (actor-send-message! on-read-actor (map ->timeout-data timedouts)) |
458 |
| - (wait-selector)))))) |
| 453 | + (guard (e (else (on-error 'selector e) #f)) |
| 454 | + (unless (socket-selector-closed? selector) |
| 455 | + (let-values (((socks timedouts) (socket-selector-wait! selector))) |
| 456 | + (actor-send-message! on-read-actor (map ->on-read-data socks)) |
| 457 | + (actor-send-message! on-read-actor (map ->timeout-data timedouts)) |
| 458 | + (selector-waiter))))) |
459 | 459 |
|
460 | 460 | (define (dispatch-socket receiver sender)
|
461 | 461 | (define (call-on-read e)
|
462 |
| - (let-values (((on-read sock timeout e) (apply values e))) |
463 |
| - (unless (socket-closed? sock) |
464 |
| - (on-read sock e |
465 |
| - (case-lambda |
466 |
| - (() (push-socket sock on-read timeout)) |
467 |
| - ((timeout) (push-socket sock on-read timeout))))))) |
| 462 | + (guard (e (else (on-error 'on-read e) #t)) |
| 463 | + (let-values (((on-read sock timeout e) (apply values e))) |
| 464 | + (unless (socket-closed? sock) |
| 465 | + (on-read sock e |
| 466 | + (case-lambda |
| 467 | + (() (push-socket sock on-read timeout)) |
| 468 | + ((timeout) |
| 469 | + (push-socket sock on-read (make-timeout timeout))))))))) |
468 | 470 | (let loop ((e* (receiver)))
|
469 | 471 | (when e*
|
470 |
| - (guard (e (else (on-error 'on-read e) #t)) |
471 |
| - (for-each call-on-read e*)) |
| 472 | + (for-each call-on-read e*) |
472 | 473 | (loop (receiver)))))
|
473 | 474 |
|
474 | 475 | (define socket-poll-thread
|
|
520 | 521 | (make-irritants-condition timeout)))
|
521 | 522 |
|
522 | 523 | (define (name-factory prefix) (lambda () (gensym prefix)))
|
523 |
| -(define socket-poll-name-factory (name-factory "socket-poll-")) |
524 | 524 | (define on-read-name-factory (name-factory "on-read-"))
|
525 |
| -(define (get-timeout t0 t1) |
526 |
| - (cond ((and t0 t1) (if (time<? t0 t1) t0 t1)) |
527 |
| - (t0) |
528 |
| - (t1) |
529 |
| - (else #f))) |
| 525 | + |
530 | 526 | )
|
0 commit comments