#ifndef CCAN_OSERVER_H
#define CCAN_OSERVER_H
-#include <ccan/compiler/compiler.h>
+#include <stdbool.h>
+#include <ccan/tevent/tevent.h>
-void NORETURN oserver_serve(int fd);
-int oserver_setup(void);
+/**
+ * oserver_setup - set up an oserver
+ * @ev: tevent context to use.
+ * @port: port to use (usually OSERVER_PORT)
+ *
+ * Opens a socket and binds it to @port, then sets it up to listen
+ * for connections. talloc_free() the pointer returned to shut it down
+ * (its parent is the tevent_context).
+ *
+ * Example:
+ * struct oserver *oserver;
+ * struct tevent_context *ev;
+ *
+ * ev = tevent_context_init(NULL);
+ * oserver = oserver_setup(ev, OSERVER_PORT);
+ * if (!oserver)
+ * err(1, "Failed to set up server");
+ *
+ * while (tevent_loop_wait(ev) == 0);
+ * err(1, "Event loop failed");
+ */
+struct oserver *oserver_setup(struct tevent_context *ev, unsigned short port);
#define OSERVER_PORT 2727
#endif /* CCAN_OSERVER_H */