]> git.ozlabs.org Git - ccan-lca-2011.git/blob - ccan/oserver/oserver.h
f71f3e2881182b7d4d9848cc8ca2f0d7a05dbd19
[ccan-lca-2011.git] / ccan / oserver / oserver.h
1 #ifndef CCAN_OSERVER_H
2 #define CCAN_OSERVER_H
3 #include <stdbool.h>
4
5 /**
6  * oserver_setup - get a listening filedescriptor for an oserver
7  * @port: port to use (usually OSERVER_PORT)
8  * Opens a socket and binds it to @port, then sets it up to listen
9  * for connections and returns it.
10  *
11  * Example:
12  *      int serverfd;
13  *
14  *      serverfd = oserver_setup(OSERVER_PORT);
15  *      if (serverfd < 0)
16  *              err(1, "Failed to set up server");
17  */
18 int oserver_setup(unsigned short port);
19
20 /**
21  * oserver_serve - serve an oserver client via a file descriptor
22  * @fd: the file descriptor (usually a connected socket)
23  *
24  * This returns false (with errno set) on failure.
25  *
26  * Example:
27  *      #include <sys/types.h>
28  *      #include <sys/socket.h>
29  *      ...
30  *              int clientfd;
31  *      ...
32  *              clientfd = accept(serverfd, NULL, NULL);
33  *              if (clientfd < 0)
34  *                      err(1, "Accepting connection from client");
35  *              if (fork() == 0)
36  *                      exit(oserver_serve(clientfd) ? 0 : 1);
37  *              else
38  *                      close(clientfd);
39  */
40 bool oserver_serve(int fd);
41
42 #define OSERVER_PORT 2727
43 #endif /* CCAN_OSERVER_H */