]> git.meshlink.io Git - catta/blob - avahi-core/fdutil.c
Split avahi-common/util.h into
[catta] / avahi-core / fdutil.c
1 /* $Id$ */
2
3 /***
4   This file is part of avahi.
5  
6   avahi is free software; you can redistribute it and/or modify it
7   under the terms of the GNU Lesser General Public License as
8   published by the Free Software Foundation; either version 2.1 of the
9   License, or (at your option) any later version.
10  
11   avahi is distributed in the hope that it will be useful, but WITHOUT
12   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13   or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
14   Public License for more details.
15  
16   You should have received a copy of the GNU Lesser General Public
17   License along with avahi; if not, write to the Free Software
18   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
19   USA.
20 ***/
21
22 #ifdef HAVE_CONFIG_H
23 #include <config.h>
24 #endif
25
26 #include <unistd.h>
27 #include <fcntl.h>
28 #include <assert.h>
29
30 #include "fdutil.h"
31
32 int avahi_set_cloexec(int fd) {
33     int n;
34
35     assert(fd >= 0);
36     
37     if ((n = fcntl(fd, F_GETFD)) < 0)
38         return -1;
39
40     if (n & FD_CLOEXEC)
41         return 0;
42
43     return fcntl(fd, F_SETFD, n|FD_CLOEXEC);
44 }
45
46 int avahi_set_nonblock(int fd) {
47     int n;
48     
49     assert(fd >= 0);
50
51     if ((n = fcntl(fd, F_GETFL)) < 0)
52         return -1;
53
54     if (n & O_NONBLOCK)
55         return 0;
56
57     return fcntl(fd, F_SETFL, n|O_NONBLOCK);
58 }
59
60 int avahi_wait_for_write(int fd) {
61     fd_set fds;
62     int r;
63     
64     FD_ZERO(&fds);
65     FD_SET(fd, &fds);
66     
67     if ((r = select(fd+1, NULL, &fds, NULL, NULL)) < 0)
68         return -1;
69     
70     assert(r > 0);
71
72     return 0;
73 }