#define CCAN_OSERVER_H
#include <ccan/compiler/compiler.h>
-void NORETURN oserver_serve(int fd);
+/**
+ * oserver_setup - get a listening filedescriptor for an oserver
+ *
+ * Opens a socket and binds it to OSERVER_PORT, then sets it up to listen
+ * for connections and returns it.
+ *
+ * Example:
+ * int serverfd;
+ *
+ * serverfd = oserver_setup();
+ * if (serverfd < 0)
+ * err(1, "Failed to set up server");
+ */
int oserver_setup(void);
+/**
+ * oserver_serve - serve an oserver client via a file descriptor
+ * @fd: the file descriptor (usually a connected socket)
+ *
+ * This does not return, but exits with status 0 if served OK.
+ *
+ * Example:
+ * #include <sys/types.h>
+ * #include <sys/socket.h>
+ * ...
+ * int clientfd;
+ * ...
+ * clientfd = accept(serverfd, NULL, NULL);
+ * if (clientfd < 0)
+ * err(1, "Accepting connection from client");
+ * if (fork() == 0)
+ * oserver_serve(clientfd);
+ * else
+ * close(clientfd);
+ */
+void NORETURN oserver_serve(int fd);
+
#define OSERVER_PORT 2727
#endif /* CCAN_OSERVER_H */