projects
/
project
/
odhcpd.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
2441f96
)
odhcpd: managed PD wait for 250ms initial period
author
Steven Barth
<steven@midlink.org>
Sun, 6 Apr 2014 14:27:27 +0000
(16:27 +0200)
committer
Steven Barth
<steven@midlink.org>
Sun, 6 Apr 2014 14:27:27 +0000
(16:27 +0200)
src/dhcpv6-ia.c
patch
|
blob
|
history
diff --git
a/src/dhcpv6-ia.c
b/src/dhcpv6-ia.c
index
767a546
..
844dfd3
100644
(file)
--- a/
src/dhcpv6-ia.c
+++ b/
src/dhcpv6-ia.c
@@
-22,6
+22,7
@@
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
+#include <poll.h>
#include <alloca.h>
#include <resolv.h>
#include <limits.h>
#include <alloca.h>
#include <resolv.h>
#include <limits.h>
@@
-464,6
+465,14
@@
static bool assign_pd(struct interface *iface, struct dhcpv6_assignment *assign)
assign->managed_size = -1;
assign->valid_until = odhcpd_time() + 15;
list_add(&assign->head, &iface->ia_assignments);
assign->managed_size = -1;
assign->valid_until = odhcpd_time() + 15;
list_add(&assign->head, &iface->ia_assignments);
+
+ // Wait initial period of up to 250ms for immediate assignment
+ struct pollfd pfd = { .fd = fd, .events = POLLIN };
+ poll(&pfd, 1, 250);
+ managed_handle_pd_data(&assign->managed_sock.stream, 0);
+
+ if (fcntl(fd, F_GETFL) >= 0 && assign->managed_size > 0)
+ return true;
}
return false;
}
return false;