Why do we need SocketOptions.SO_BROADCAST to enable broadcast?

sockets

Solution

"Socket semantics require that an application set the SO_BROADCAST option on before attempting to send a datagram to a base or broadcast address. This protects the application from accidentally sending a datagram to many systems."

Source

Problem

If we want to broadcast information from a socket, we need to enable `SocketOptions.SO_BROADCAST`. However, I don't understand why that is necessary. My understanding is we set the packet with a broadcast address, just the same way as set a unicast address. Then we just need to send it through a regular socket. If its a UDP socket, then a UDP header will be added to that packet, and then an IP header containing the receiver's IP address (in this case is the broadcast address in the form of `192.168.255.255`), and then a MAC address `(FF:FF:FF:FF)` is added. I think the router will get the packet and perform the broadcast. I don't understand why we need to set the socket attribute to `SO_BROADCAST`.

Original source