From 5a84ba2361cecade0343b88f696b6a63454cc3c6 Mon Sep 17 00:00:00 2001 From: "Luke T. Shumaker" Date: Sun, 23 Feb 2025 09:24:31 -0700 Subject: Pull out libhw/generic/io.h, have it enforce iovecs everywhere --- libhw_generic/include/libhw/generic/net.h | 112 +++++++++++++----------------- 1 file changed, 47 insertions(+), 65 deletions(-) (limited to 'libhw_generic/include/libhw/generic/net.h') 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 /* for uint{n}_t} */ #include /* for ssize_t */ -#if __unix__ -#include -#else -struct iovec { - void *iov_base; - size_t iov_len; -}; -#endif - -#include +#include /* 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 *****************************************************************/ -- cgit v1.2.3-2-g168b