clinuxsocketsnetwork-programmingposix

Is it always required to bind a socket?


Well, my question may look like a basic stuff, but I am new to network programming side. I wish to know:

  1. Is it always required to bind a socket in order to receive message from that? I saw a sniffer code (raw socket) one in which directly it is invoking recvfrom and another piece of code in which it is invoking bind and then a receive.

  2. What is the difference between the AF_* and PF_* family? Is the later related to POSIX? Which is the one recommended ?


Solution

  • No, you don't need to bind().

    If you're using a TCP or UDP socket where you are planning to either connect() or send a packet to a destination with sendto(), the kernel will automatically bind the socket to a suitable port number when you try to connect() or send(). This is generally the preferred way. bind()ing client sockets is considered harmful.

    The same is also true of AF_UNIX sockets - the client side does not need to bind, and should not do so normally.