Annotation of embedaddon/quagga/lib/network.c, revision 1.1.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>