/* @configure_input@ */ /* ** Copyright 1998-2004 University of Illinois Board of Trustees ** Copyright 1998-2004 Mark D. Roth ** All rights reserved. ** ** @NETIO_PREFIX@_netio.h - header file for network I/O module ** ** Mark D. Roth */ #ifndef @NETIO_PREFIX@_NETIO_H #define @NETIO_PREFIX@_NETIO_H #include #include #include #include #include /* typedef for NETIO handle */ typedef struct netio NETIO; /* typedef for send/recv hook */ typedef void (*netio_hookfunc_t)(char *, void *, void *); extern const int netio_is_thread_safe; /***** handle.c **************************************************************/ /* values for netio_new() flags bitmask */ #define NETIO_CONNECT_DNS_RR 1 /* grok round-robin DNS entries */ /* ** @NETIO_PREFIX@_netio_new() - create a new netio handle ** Arguments: ** pointer to netio handle ** Returns: ** 0 success ** -1 (and sets errno) error */ int @NETIO_PREFIX@_netio_vnew(NETIO **, size_t, char *, time_t, unsigned short, va_list); int @NETIO_PREFIX@_netio_new(NETIO **, size_t, char *, time_t, unsigned short, ...); char *@NETIO_PREFIX@_netio_get_host(NETIO *); int @NETIO_PREFIX@_netio_fd(NETIO *); int @NETIO_PREFIX@_netio_local_addr(NETIO *, struct sockaddr *, socklen_t *addrlen, char *, size_t); int @NETIO_PREFIX@_netio_remote_addr(NETIO *, struct sockaddr *, socklen_t *addrlen, char *, size_t); /* ** @NETIO_PREFIX@_netio_free() - free netio handle */ int @NETIO_PREFIX@_netio_free(NETIO *); /***** listen.c **************************************************************/ /* ** netio_listen() - create a NETIO handle to listen on a port */ int @NETIO_PREFIX@_netio_listen(NETIO **, char *, int); /* ** netio_accept() - accept an incoming connection */ int @NETIO_PREFIX@_netio_accept(NETIO *, size_t, time_t, NETIO **); /***** send.c ****************************************************************/ /* ** netio_write() - send a block of data */ ssize_t @NETIO_PREFIX@_netio_write(NETIO *, time_t, char *, size_t, unsigned int); /* values for netio_write() flags bitmask */ #define NETIO_WRITE_OOB 1 /* send with MSG_OOB flag */ /* ** @NETIO_PREFIX@_netio_write_line() - send a command */ ssize_t @NETIO_PREFIX@_netio_write_line(NETIO *, time_t, char *, ...); ssize_t @NETIO_PREFIX@_netio_vwrite_line(NETIO *, time_t, char *, va_list); /***** recv.c ****************************************************************/ /* ** @NETIO_PREFIX@_netio_read() - read a block of data ** Arguments: ** netio handle ** timeout ** buffer to save line to ** size of buffer ** Returns: ** size of line returned success ** 0 EOF ** -1 (and sets errno) error */ ssize_t @NETIO_PREFIX@_netio_read(NETIO *, time_t, char *, size_t); /* ** @NETIO_PREFIX@_netio_read_line() - read next line ** Arguments: ** netio handle ** timeout ** buffer to save line to ** size of buffer ** Returns: ** size of line returned success ** 0 EOF ** -1 (and sets errno) error */ ssize_t @NETIO_PREFIX@_netio_read_line(NETIO *, time_t, char *, size_t); /***** options.c *************************************************************/ /* netio options */ enum netio_options { NETIO_OPT_DEFAULT_SERVICE = 1, /* default service name */ NETIO_OPT_DEFAULT_PORT, /* default port number */ NETIO_OPT_SEND_HOOK, /* send hook */ NETIO_OPT_RECV_HOOK, /* receive hook */ NETIO_OPT_HOOK_HANDLE, /* send/recv hook handle ptr */ NETIO_OPT_HOOK_DATA /* send/recv hook data ptr */ }; /* ** netio_get_options() - get options from the NETIO handle */ void @NETIO_PREFIX@_netio_get_options(NETIO *, ...); /* ** netio_set_options() - set options in the NETIO handle */ void @NETIO_PREFIX@_netio_set_options(NETIO *, ...); /***** timeout.c *************************************************************/ /* ** netio_eof() - check whether the remote host has closed the connection */ int @NETIO_PREFIX@_netio_eof(NETIO *); #endif /* ! @NETIO_PREFIX@_NETIO_H */