#include <unistd.h>
#include <stdint.h>
#include <stdbool.h>
+// TODO: Windows
+#include <sys/time.h>
#ifndef UTCP_INTERNAL
struct utcp {
struct utcp_connection;
#endif
+#define UTCP_SHUT_RD 0
+#define UTCP_SHUT_WR 1
+#define UTCP_SHUT_RDWR 2
+
typedef bool (*utcp_pre_accept_t)(struct utcp *utcp, uint16_t port);
typedef void (*utcp_accept_t)(struct utcp_connection *utcp_connection, uint16_t port);
extern int utcp_close(struct utcp_connection *connection);
extern int utcp_abort(struct utcp_connection *connection);
extern int utcp_shutdown(struct utcp_connection *connection, int how);
-extern int utcp_timeout(struct utcp *utcp);
+extern struct timeval utcp_timeout(struct utcp *utcp);
extern void utcp_set_recv_cb(struct utcp_connection *connection, utcp_recv_t recv);
extern void utcp_set_poll_cb(struct utcp_connection *connection, utcp_poll_t poll);
+extern void utcp_set_accept_cb(struct utcp *utcp, utcp_accept_t accept, utcp_pre_accept_t pre_accept);
+extern bool utcp_is_active(struct utcp *utcp);
// Global socket options
extern size_t utcp_get_sndbuf(struct utcp_connection *connection);
extern void utcp_set_sndbuf(struct utcp_connection *connection, size_t size);
-
extern size_t utcp_get_sndbuf_free(struct utcp_connection *connection);
+extern size_t utcp_get_rcvbuf(struct utcp_connection *connection);
+extern void utcp_set_rcvbuf(struct utcp_connection *connection, size_t size);
+extern size_t utcp_get_rcvbuf_free(struct utcp_connection *connection);
+
extern bool utcp_get_nodelay(struct utcp_connection *connection);
extern void utcp_set_nodelay(struct utcp_connection *connection, bool nodelay);