I want to create a socket for accessing IPv4 packets from data link layer. From unix network programming V1,

socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP))

1)I am implementing a dhcp client, is this the correct way of doing that? (means without accessing data link layer, i cannot receive reply from dhcp server) or is there any other easier way? also, since this socket will receive all IPv4 packets destined for my system, how should I distinguish dhcp reply packet from other packets?

2)please suggest me a good link/tuorial for network programming with data link layer access. In the above book, it is not detailed description.

This is my code:: http://codepad.org/WdzbdHZC