chiark
/
gitweb
/
~ian
/
secnet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fds: Make many fds nonblocking
[secnet.git]
/
tun.c
diff --git
a/tun.c
b/tun.c
index 6ecde61794a3e3ea2821f6ebe185003c6ea07b4c..2c84ed0dace4d51a35c16071a7926e59859159be 100644
(file)
--- a/
tun.c
+++ b/
tun.c
@@
-118,6
+118,7
@@
static void tun_afterpoll(void *sst, struct pollfd *fds, int nfds)
buffer_init(st->buff,calculate_max_start_pad());
l=read(st->fd, st->buff->start, buf_remaining_space(st->buff));
if (l<0) {
buffer_init(st->buff,calculate_max_start_pad());
l=read(st->fd, st->buff->start, buf_remaining_space(st->buff));
if (l<0) {
+ if (errno==EINTR || iswouldblock(errno)) return;
fatal_perror("tun_afterpoll: read()");
}
if (l==0) {
fatal_perror("tun_afterpoll: read()");
}
if (l==0) {
@@
-353,6
+354,7
@@
static void tun_phase_hook(void *sst, uint32_t newphase)
our networks. */
setcloexec(st->fd);
our networks. */
setcloexec(st->fd);
+ setnonblock(st->fd);
hostaddr=ipaddr_to_string(st->nl.local_address);
secnetaddr=ipaddr_to_string(st->nl.secnet_address);
hostaddr=ipaddr_to_string(st->nl.local_address);
secnetaddr=ipaddr_to_string(st->nl.secnet_address);