/* netio/fget_netio.h.  Generated from netio.h.in by configure. */

/*
**  Copyright 1998-2004 University of Illinois Board of Trustees
**  Copyright 1998-2004 Mark D. Roth
**  All rights reserved.
**
**  fget_netio.h - header file for network I/O module
**
**  Mark D. Roth <roth@feep.net>
*/

#ifndef fget_NETIO_H
#define fget_NETIO_H

#include <stdarg.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/param.h>
#include <netdb.h>


/* 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 */

/*
** fget_netio_new() - create a new netio handle
** Arguments:
**	pointer to netio handle
** Returns:
**	0			success
**	-1 (and sets errno)	error
*/
int fget_netio_vnew(NETIO **, size_t, char *, time_t,
			      unsigned short, va_list);
int fget_netio_new(NETIO **, size_t, char *, time_t,
			     unsigned short, ...);

char *fget_netio_get_host(NETIO *);

int fget_netio_fd(NETIO *);

int fget_netio_local_addr(NETIO *,
				    struct sockaddr *, socklen_t *addrlen,
				    char *, size_t);

int fget_netio_remote_addr(NETIO *,
				     struct sockaddr *, socklen_t *addrlen,
				     char *, size_t);

/*
** fget_netio_free() - free netio handle
*/
int fget_netio_free(NETIO *);


/***** listen.c **************************************************************/

/*
** netio_listen() - create a NETIO handle to listen on a port
*/
int fget_netio_listen(NETIO **, char *, int);

/*
** netio_accept() - accept an incoming connection
*/
int fget_netio_accept(NETIO *, size_t, time_t, NETIO **);


/***** send.c ****************************************************************/

/*
** netio_write() - send a block of data
*/
ssize_t fget_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 */

/*
** fget_netio_write_line() - send a command
*/
ssize_t fget_netio_write_line(NETIO *, time_t, char *, ...);
ssize_t fget_netio_vwrite_line(NETIO *, time_t, char *, va_list);


/***** recv.c ****************************************************************/

/*
** fget_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 fget_netio_read(NETIO *, time_t, char *, size_t);


/*
** fget_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 fget_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 fget_netio_get_options(NETIO *, ...);

/*
** netio_set_options() - set options in the NETIO handle
*/
void fget_netio_set_options(NETIO *, ...);


/***** timeout.c *************************************************************/

/*
** netio_eof() - check whether the remote host has closed the connection
*/
int fget_netio_eof(NETIO *);


#endif /* ! fget_NETIO_H */




syntax highlighted by Code2HTML, v. 0.9.1