aboutsummaryrefslogtreecommitdiff
path: root/networking
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-12-10 11:16:47 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-12-10 11:16:47 +0000
commit517413f9affae582f5e824ef45805662d676be6a (patch)
tree624ef48c2de51f7c458b3c2c0b9f17fff0af8da5 /networking
parente53738558f2f1aa8cd536545479ab98b0df808c5 (diff)
downloadbusybox-w32-517413f9affae582f5e824ef45805662d676be6a.tar.gz
busybox-w32-517413f9affae582f5e824ef45805662d676be6a.tar.bz2
busybox-w32-517413f9affae582f5e824ef45805662d676be6a.zip
bb_info_msg: make it do atomic, unbuffered writes
udhcpc: fix a problem where we don't open listening socket fast enough function old new delta bb_info_msg 70 126 +56 change_listen_mode 37 78 +41 udhcp_listen_socket 151 124 -27 udhcpc_main 2344 2285 -59
Diffstat (limited to 'networking')
-rw-r--r--networking/udhcp/dhcpc.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c
index e2e5b0a82..115cddbf0 100644
--- a/networking/udhcp/dhcpc.c
+++ b/networking/udhcp/dhcpc.c
@@ -43,11 +43,17 @@ static void change_listen_mode(int new_mode)
43{ 43{
44 DEBUG("entering %s listen mode", 44 DEBUG("entering %s listen mode",
45 new_mode ? (new_mode == 1 ? "kernel" : "raw") : "none"); 45 new_mode ? (new_mode == 1 ? "kernel" : "raw") : "none");
46
47 listen_mode = new_mode;
46 if (sockfd >= 0) { 48 if (sockfd >= 0) {
47 close(sockfd); 49 close(sockfd);
48 sockfd = -1; 50 sockfd = -1;
49 } 51 }
50 listen_mode = new_mode; 52 if (new_mode == LISTEN_KERNEL)
53 sockfd = udhcp_listen_socket(/*INADDR_ANY,*/ CLIENT_PORT, client_config.interface);
54 else if (new_mode != LISTEN_NONE)
55 sockfd = udhcp_raw_socket(client_config.ifindex);
56 /* else LISTEN_NONE: sockfd stay closed */
51} 57}
52 58
53 59
@@ -320,12 +326,15 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
320 for (;;) { 326 for (;;) {
321 unsigned timestamp_before_wait; 327 unsigned timestamp_before_wait;
322 328
323 if (listen_mode != LISTEN_NONE && sockfd < 0) { 329 //bb_error_msg("sockfd:%d, listen_mode:%d", sockfd, listen_mode);
324 if (listen_mode == LISTEN_KERNEL) 330
325 sockfd = udhcp_listen_socket(/*INADDR_ANY,*/ CLIENT_PORT, client_config.interface); 331 /* Was opening raw or udp socket here
326 else 332 * if (listen_mode != LISTEN_NONE && sockfd < 0),
327 sockfd = udhcp_raw_socket(client_config.ifindex); 333 * but on fast network renew responses return faster
328 } 334 * than we open sockets. Thus this code is moved
335 * to change_listen_mode(). Thus we open listen socket
336 * BEFORE we send renew request (see "case BOUND:"). */
337
329 max_fd = udhcp_sp_fd_set(&rfds, sockfd); 338 max_fd = udhcp_sp_fd_set(&rfds, sockfd);
330 339
331 tv.tv_sec = timeout - already_waited_sec; 340 tv.tv_sec = timeout - already_waited_sec;