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