dhcpc.c is not using discover_retries while in REQUESTING state. The code assumes a value of 3. Instead, it should use the -t parameter provided on command line. The following diff could address this issue: 1505c1505 < if (packet_num < 3) { --- > if (!discover_retries || packet_num <= discover_retries) { Note "<=" is used so that discover_retries value of 1 will work, since packet_num is also incremented within state INIT_SELECTING.