An update. There is a bug in the raw socket code I posted. It does not try hard enough to make sure that the packet is for us. So it can, and will, end up thinking a different ack is ours. I found this trying to connect to Rogers.
If you go to the github (https://github.com/smaclennan/sdhcp) and look at udprecv, I now check the transaction id and the mac address. There are other changes, but this is the only one that really matters. I think it is fixed, but it will take another day before I know for sure. It seems that Rogers does not reply to renewals. They make you go to the rebind state and then ack. Since I have a 48 hour lease, it will take 7/8 of 48 or 42 hours to get a result :( But, I did send a renew and got back an ack for a different computer and successfully ignored it. I also have sdhcp running on the laptop I am using right now and with a 2 hour lease it has been running since Saturday with all renewals working. So I believe the checks are correct. This is one of the few times I wish I had a windows box. It would be interesting to see if Rogers will renew a windows request. I have seen in the past where windows dhcp servers interacted badly with Linux clients. Cheers, Sean