summaryrefslogtreecommitdiff
path: root/libhw_generic/include/libhw/generic/net.h
diff options
context:
space:
mode:
Diffstat (limited to 'libhw_generic/include/libhw/generic/net.h')
-rw-r--r--libhw_generic/include/libhw/generic/net.h112
1 files changed, 47 insertions, 65 deletions
diff --git a/libhw_generic/include/libhw/generic/net.h b/libhw_generic/include/libhw/generic/net.h
index 8d81573..2703b26 100644
--- a/libhw_generic/include/libhw/generic/net.h
+++ b/libhw_generic/include/libhw/generic/net.h
@@ -13,16 +13,7 @@
#include <stdint.h> /* for uint{n}_t} */
#include <sys/types.h> /* for ssize_t */
-#if __unix__
-#include <sys/uio.h>
-#else
-struct iovec {
- void *iov_base;
- size_t iov_len;
-};
-#endif
-
-#include <libobj/obj.h>
+#include <libhw/generic/io.h>
/* Errnos *********************************************************************/
@@ -77,68 +68,59 @@ lo_interface net_stream_conn;
/** \
* The net_stream_conn returned from accept() may still be \
* valid after the listener is closed. \
- * \
- * Return 0 on success, -errno on error. \
*/ \
- LO_FUNC(int, close)
+ LO_NEST(io_closer)
LO_INTERFACE(net_stream_listener)
-#define net_stream_conn_LO_IFACE \
- /** \
- * Return bytes-read on success, 0 on EOF, -errno on error; a \
- * short read is *not* an error. \
- */ \
- LO_FUNC(ssize_t, read, void *buf, size_t count) \
- \
- /** \
- * Set a timestamp after which calls to read() will return \
- * NET_ETIMEDOUT. The timestamp is in nanoseconds on the \
- * system monotonic clock, which is usually (on pico-sdk and \
- * on the Linux kernel) nanoseconds-since-boot. \
- * \
- * A zero value disables the deadline. \
- * \
- * (2⁶⁴-1 nanoseconds is more than 500 years; there is little \
- * risk of this overflowing) \
- */ \
- LO_FUNC(void, set_read_deadline, uint64_t ns_since_boot) \
- \
- /** \
- * Return `count` on success, -errno on error; a short write *is* an \
- * error. \
- * \
- * Writes are *not* guaranteed to be atomic (as this would be \
- * expensive to implement), so if you have concurrent writers then you \
- * should arrange for a mutex to protect the connection. \
- */ \
- LO_FUNC(ssize_t, write, void *buf, size_t count) \
- \
- /** \
- * Return 0 on success, -errno on error. \
- */ \
- LO_FUNC(int, close, bool rd, bool wr)
+#define net_stream_conn_LO_IFACE \
+ LO_NEST(io_readwriter) \
+ LO_NEST(io_bidi_closer) \
+ \
+ /** \
+ * Set a timestamp after which calls to read() will return \
+ * NET_ETIMEDOUT. The timestamp is in nanoseconds on the \
+ * system monotonic clock, which is usually (on pico-sdk and \
+ * on the Linux kernel) nanoseconds-since-boot. \
+ * \
+ * A zero value disables the deadline. \
+ * \
+ * (2⁶⁴-1 nanoseconds is more than 500 years; there is little \
+ * risk of this overflowing) \
+ */ \
+ LO_FUNC(void, set_read_deadline, uint64_t ns_since_boot)
LO_INTERFACE(net_stream_conn)
/* Packets (e.g. UDP) *********************************************************/
-#define net_packet_conn_LO_IFACE \
- LO_FUNC(ssize_t, sendto, \
- void *buf, size_t len, \
- struct net_ip4_addr node, uint16_t port) \
- \
- /** \
- * @return The full length of the message, which may be more \
- * than the given `len` (as if the Linux MSG_TRUNC flag were \
- * given). \
- */ \
- LO_FUNC(ssize_t, recvfrom, \
- void *buf, size_t len, \
- struct net_ip4_addr *ret_node, uint16_t *ret_port) \
- \
- LO_FUNC(void, set_read_deadline, \
- uint64_t ns_since_boot) \
- \
- LO_FUNC(int, close)
+#define net_packet_conn_LO_IFACE \
+ LO_FUNC(ssize_t, sendto, \
+ void *buf, size_t len, \
+ struct net_ip4_addr node, uint16_t port) \
+ \
+ /** \
+ * @return The full length of the message, which may be more \
+ * than the given `len` (as if the Linux MSG_TRUNC flag were \
+ * given). \
+ */ \
+ LO_FUNC(ssize_t, recvfrom, \
+ void *buf, size_t len, \
+ struct net_ip4_addr *ret_node, uint16_t *ret_port) \
+ \
+ /** \
+ * Set a timestamp after which calls to recvfrom() will return \
+ * NET_ETIMEDOUT. The timestamp is in nanoseconds on the \
+ * system monotonic clock, which is usually (on pico-sdk and \
+ * on the Linux kernel) nanoseconds-since-boot. \
+ * \
+ * A zero value disables the deadline. \
+ * \
+ * (2⁶⁴-1 nanoseconds is more than 500 years; there is little \
+ * risk of this overflowing) \
+ */ \
+ LO_FUNC(void, set_recv_deadline, \
+ uint64_t ns_since_boot) \
+ \
+ LO_NEST(io_closer)
LO_INTERFACE(net_packet_conn)
/* Interfaces *****************************************************************/