21#ifndef LELY_IO_INTERN_HANDLE_H_
22#define LELY_IO_INTERN_HANDLE_H_
39#elif !LELY_NO_THREADS && _WIN32
139#define io_handle_lock(handle)
146#define io_handle_unlock(handle)
void io_handle_fini(struct io_handle *handle)
Finalizes an I/O device handle by invoking its fini method, if available.
void io_handle_destroy(struct io_handle *handle)
Destroys an I/O device handle.
void io_handle_free(struct io_handle *handle)
Frees an I/O device handle.
struct io_handle * io_handle_alloc(const struct io_handle_vtab *vtab)
Allocates a new I/O device handle from a virtual table.
void io_handle_unlock(struct io_handle *handle)
Unlocks a locked I/O device handle.
void io_handle_lock(struct io_handle *handle)
Locks an unlocked I/O device handle, so the flags (and other device-specific fields) can safely be ac...
int64_t io_off_t
A file offset type.
This is the internal header file of the Windows-specific I/O declarations.
This header file is part of the C11 and POSIX compatibility library; it includes <stdatomic....
An opaque network address type.
The virtual table of an I/O device handle.
int(* flush)(struct io_handle *handle)
A pointer to the flush method.
void(* fini)(struct io_handle *handle)
A pointer to the fini method.
int(* flags)(struct io_handle *handle, int flags)
A pointer to the static flags method.
ssize_t(* send)(struct io_handle *handle, const void *buf, size_t nbytes, const io_addr_t *addr, int flags)
A pointer to the send method.
ssize_t(* pread)(struct io_handle *handle, void *buf, size_t nbytes, io_off_t offset)
A pointer to the pread method.
int(* purge)(struct io_handle *handle, int flags)
A pointer to the purge method.
ssize_t(* write)(struct io_handle *handle, const void *buf, size_t nbytes)
A pointer to the write method.
size_t size
The size (in bytes) of the handle struct.
ssize_t(* read)(struct io_handle *handle, void *buf, size_t nbytes)
A pointer to the read method.
int type
The type of the device (one of IO_TYPE_CAN, IO_TYPE_FILE, IO_TYPE_PIPE, IO_TYPE_SERIAL or IO_TYPE_SOC...
io_off_t(* seek)(struct io_handle *handle, io_off_t offset, int whence)
A pointer to the seek method.
int(* connect)(struct io_handle *handle, const io_addr_t *addr)
A pointer to the connect method.
ssize_t(* pwrite)(struct io_handle *handle, const void *buf, size_t nbytes, io_off_t offset)
A pointer to the pwrite method.
ssize_t(* recv)(struct io_handle *handle, void *buf, size_t nbytes, io_addr_t *addr, int flags)
A pointer to the recv method.
int fd
The native file descriptor.
atomic_size_t ref
The reference count.
int flags
The I/O device flags (any combination of IO_FLAG_NO_CLOSE and IO_FLAG_NONBLOCK).
mtx_t mtx
The mutex protecting flags (and other device-specific fields).
const struct io_handle_vtab * vtab
A pointer to the virtual table.
This header file is part of the C11 and POSIX compatibility library; it includes <threads....
pthread_mutex_t mtx_t
A complete object type that holds an identifier for a mutex.