+ r = ioctl(fd, FIONREAD, &buflen);
+ if (r < 0 || buflen <= 0)
+ buflen = sizeof(DHCPPacket) + DHCP_MIN_OPTIONS_SIZE;
+
+ packet = malloc0(buflen);
+ if (!packet)
+ return -ENOMEM;
+
+ iov.iov_base = packet;
+ iov.iov_len = buflen;
+
+ len = recvmsg(fd, &msg, 0);
+ if (len < 0) {
+ log_dhcp_client(client, "could not receive message from raw "
+ "socket: %s", strerror(errno));