source: MondoRescue/branches/3.3/mindi-busybox/networking/isrv.h@ 3734

Last change on this file since 3734 was 3621, checked in by Bruno Cornec, 10 years ago

New 3?3 banch for incorporation of latest busybox 1.25. Changing minor version to handle potential incompatibilities.

  • Property svn:eol-style set to native
File size: 1.9 KB
Line 
1/* vi: set sw=4 ts=4: */
2/*
3 * Generic non-forking server infrastructure.
4 * Intended to make writing telnetd-type servers easier.
5 *
6 * Copyright (C) 2007 Denys Vlasenko
7 *
8 * Licensed under GPLv2, see file LICENSE in this source tree.
9 */
10
11PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
12
13/* opaque structure */
14struct isrv_state_t;
15typedef struct isrv_state_t isrv_state_t;
16
17/* callbacks */
18void isrv_want_rd(isrv_state_t *state, int fd);
19void isrv_want_wr(isrv_state_t *state, int fd);
20void isrv_dont_want_rd(isrv_state_t *state, int fd);
21void isrv_dont_want_wr(isrv_state_t *state, int fd);
22int isrv_register_fd(isrv_state_t *state, int peer, int fd);
23void isrv_close_fd(isrv_state_t *state, int fd);
24int isrv_register_peer(isrv_state_t *state, void *param);
25
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 0,
36 * add it to fds to select on.
37 * Now, select will wait for <timeout>, not <linger_timeout>
38 * (as long as we have more than zero peers).
39 *
40 * If a peer's fd is active, we call do_rd() on it if read
41 * bit was set, and then do_wr() if write bit was also set.
42 * If either returns !0, peer is removed.
43 * Reaching this place also resets timeout counter for this peer.
44 *
45 * Note that peer must indicate that he wants to be selected
46 * for read and/or write using isrv_want_rd()/isrv_want_wr()
47 * [can be called in new_peer() or in do_rd()/do_wr()].
48 * If it never wants to be selected for write, do_wr()
49 * will never be called (can be NULL).
50 */
51void isrv_run(
52 int listen_fd,
53 int (*new_peer)(isrv_state_t *state, int fd),
54 int (*do_rd)(int fd, void **),
55 int (*do_wr)(int fd, void **),
56 int (*do_timeout)(void **),
57 int timeout,
58 int linger_timeout
59);
60
61POP_SAVED_FUNCTION_VISIBILITY
Note: See TracBrowser for help on using the repository browser.