diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2014-01-09 19:58:19 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2014-01-09 19:58:19 +0100 |
commit | 3ea93e853e44fd7e227688cb96f5f847817862c0 (patch) | |
tree | 36c9360a7171012d5767ff5b23430ac1f9359e1d | |
parent | 89deb22f9745e145fdbb4fbe985cfa9e20e90024 (diff) | |
download | busybox-w32-3ea93e853e44fd7e227688cb96f5f847817862c0.tar.gz busybox-w32-3ea93e853e44fd7e227688cb96f5f847817862c0.tar.bz2 busybox-w32-3ea93e853e44fd7e227688cb96f5f847817862c0.zip |
networking: explain isrv_run() API
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | networking/isrv.h | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/networking/isrv.h b/networking/isrv.h index 4c7e01dd1..a42fd4100 100644 --- a/networking/isrv.h +++ b/networking/isrv.h | |||
@@ -23,7 +23,32 @@ int isrv_register_fd(isrv_state_t *state, int peer, int fd); | |||
23 | void isrv_close_fd(isrv_state_t *state, int fd); | 23 | void isrv_close_fd(isrv_state_t *state, int fd); |
24 | int isrv_register_peer(isrv_state_t *state, void *param); | 24 | int isrv_register_peer(isrv_state_t *state, void *param); |
25 | 25 | ||
26 | /* driver */ | 26 | /* Driver: |
27 | * | ||
28 | * Select on listen_fd for <linger_timeout> (or forever if 0). | ||
29 | * | ||
30 | * If we time out and we have no peers, exit. | ||
31 | * If we have peers, call do_timeout(peer_param), | ||
32 | * if it returns !0, peer is removed. | ||
33 | * | ||
34 | * If listen_fd is active, accept new connection ("peer"), | ||
35 | * call new_peer() on it, and if it returns 1, | ||
36 | * and add it to fds to select on. | ||
37 | * Now, select will wait for <timeout>, not <linger_timeout> | ||
38 | * (as long as we we have more than zero clients). | ||
39 | * | ||
40 | * If a peer's fd is active, we call do_rd() on it if read | ||
41 | * mask bit was set, | ||
42 | * and then do_wr() if write mask bit was also set. | ||
43 | * If either returns !0, peer is removed. | ||
44 | * Reaching this place also resets timeout counter for this peer. | ||
45 | * | ||
46 | * Note that peer must indicate that he wants to be selected | ||
47 | * for read and/or write using isrv_want_rd()/isrv_want_wr() | ||
48 | * [can be called in new_peer() or in do_rd()/do_wr()]. | ||
49 | * If it never wants to be selected for write, do_wr() | ||
50 | * will never be called (can be NULL). | ||
51 | */ | ||
27 | void isrv_run( | 52 | void isrv_run( |
28 | int listen_fd, | 53 | int listen_fd, |
29 | int (*new_peer)(isrv_state_t *state, int fd), | 54 | int (*new_peer)(isrv_state_t *state, int fd), |