Annotation of embedaddon/quagga/lib/network.c, revision 1.1
1.1 ! misho 1: /*
! 2: * Network library.
! 3: * Copyright (C) 1997 Kunihiro Ishiguro
! 4: *
! 5: * This file is part of GNU Zebra.
! 6: *
! 7: * GNU Zebra is free software; you can redistribute it and/or modify it
! 8: * under the terms of the GNU General Public License as published by the
! 9: * Free Software Foundation; either version 2, or (at your option) any
! 10: * later version.
! 11: *
! 12: * GNU Zebra is distributed in the hope that it will be useful, but
! 13: * WITHOUT ANY WARRANTY; without even the implied warranty of
! 14: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
! 15: * General Public License for more details.
! 16: *
! 17: * You should have received a copy of the GNU General Public License
! 18: * along with GNU Zebra; see the file COPYING. If not, write to the Free
! 19: * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! 20: * 02111-1307, USA.
! 21: */
! 22:
! 23: #include <zebra.h>
! 24: #include "log.h"
! 25: #include "network.h"
! 26:
! 27: /* Read nbytes from fd and store into ptr. */
! 28: int
! 29: readn (int fd, u_char *ptr, int nbytes)
! 30: {
! 31: int nleft;
! 32: int nread;
! 33:
! 34: nleft = nbytes;
! 35:
! 36: while (nleft > 0)
! 37: {
! 38: nread = read (fd, ptr, nleft);
! 39:
! 40: if (nread < 0)
! 41: return (nread);
! 42: else
! 43: if (nread == 0)
! 44: break;
! 45:
! 46: nleft -= nread;
! 47: ptr += nread;
! 48: }
! 49:
! 50: return nbytes - nleft;
! 51: }
! 52:
! 53: /* Write nbytes from ptr to fd. */
! 54: int
! 55: writen(int fd, const u_char *ptr, int nbytes)
! 56: {
! 57: int nleft;
! 58: int nwritten;
! 59:
! 60: nleft = nbytes;
! 61:
! 62: while (nleft > 0)
! 63: {
! 64: nwritten = write(fd, ptr, nleft);
! 65:
! 66: if (nwritten <= 0)
! 67: return (nwritten);
! 68:
! 69: nleft -= nwritten;
! 70: ptr += nwritten;
! 71: }
! 72: return nbytes - nleft;
! 73: }
! 74:
! 75: int
! 76: set_nonblocking(int fd)
! 77: {
! 78: int flags;
! 79:
! 80: /* According to the Single UNIX Spec, the return value for F_GETFL should
! 81: never be negative. */
! 82: if ((flags = fcntl(fd, F_GETFL)) < 0)
! 83: {
! 84: zlog_warn("fcntl(F_GETFL) failed for fd %d: %s",
! 85: fd, safe_strerror(errno));
! 86: return -1;
! 87: }
! 88: if (fcntl(fd, F_SETFL, (flags | O_NONBLOCK)) < 0)
! 89: {
! 90: zlog_warn("fcntl failed setting fd %d non-blocking: %s",
! 91: fd, safe_strerror(errno));
! 92: return -1;
! 93: }
! 94: return 0;
! 95: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>