/* netio/fget_netio_send.c.  Generated from netio_send.c.in by configure. */

/*
**  Copyright 2000-2004 University of Illinois Board of Trustees
**  Copyright 2000-2004 Mark D. Roth
**  All rights reserved.
**
**  fget_netio_write.c - NETIO data write code
**
**  Mark D. Roth <roth@feep.net>
*/

#include <fget_netio_internal.h>

#include <stdio.h>
#include <errno.h>
#include <sys/socket.h>

#ifdef STDC_HEADERS
# include <stdlib.h>
# include <string.h>
# include <stdarg.h>
#endif

#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif


ssize_t
fget_netio_write(NETIO *nio, time_t timeout,
			   char *buf, size_t bufsize, unsigned int flags)
{
	int i;
	ssize_t sz;

	i = fget_netio_wait(nio, 1, timeout);
	if (i == 1)
	{
		errno = ETIMEDOUT;
		return -1;
	}
	if (i == -1)
		return -1;

#ifdef DEBUG
	printf("    fget_netio_write(): calling write()...\n");
#endif

	if (BIT_ISSET(flags, NETIO_WRITE_OOB))
		sz = send(nio->n_fd, buf, bufsize, MSG_OOB);
	else
		sz = write(nio->n_fd, buf, bufsize);

#ifdef DEBUG
	printf("<== fget_netio_vwrite_line(): write() == %ld\n",
	       (long)sz);
#endif
	return sz;
}


/* variable-argument interface for netio_write_line() */
ssize_t
fget_netio_vwrite_line(NETIO *nio, time_t timeout,
				 char *fmt, va_list args)
{
	char buf[NETIOBUFSIZE];

	vsnprintf(buf, sizeof(buf), fmt, args);

#ifdef DEBUG
	printf("    fget_netio_vwrite_line(): writeing \"%s\"\n", buf);
#endif

	/* execute the write hook, if set */
	if (nio->n_sendhook != NULL)
		(*(nio->n_sendhook))(buf, nio->n_hook_handle, nio->n_hook_data);

	strlcat(buf, "\r\n", sizeof(buf));

	return fget_netio_write(nio, timeout, buf, strlen(buf), 0);
}


/* netio_write_line() - write a line over the network */
ssize_t
fget_netio_write_line(NETIO *nio, time_t timeout, char *fmt, ...)
{
	va_list args;
	ssize_t sz;

	va_start(args, fmt);
	sz = fget_netio_vwrite_line(nio, timeout, fmt, args);
	va_end(args);

	return sz;
}




syntax highlighted by Code2HTML, v. 0.9.1