#40674 [Opn]: socket_bind on interface wont see broadcasts to 255.255.255.255

From: Date: Thu, 01 Mar 2007 17:38:01 +0000
Subject: #40674 [Opn]: socket_bind on interface wont see broadcasts to 255.255.255.255
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-109761@lists.php.net to get a copy of this message
ID: 40674 User updated by: matth at mystictrd dot com Reported By: matth at mystictrd dot com Status: Open Bug Type: Sockets related Operating System: Debian 3.1 PHP Version: 5.2.1 New Comment: Ignore my previous workaround example, it did not work as expected. Previous Comments: ------------------------------------------------------------------------ [2007-03-01 17:25:57] matth at mystictrd dot com The reason why is if you take a normal DHCP server you can typically listen on multiple interfaces. If one wanted to know what interface is receiving the data you would think to bind on the interfaces IP address. But since you cannot see that type of packet binding to an IP like that you must bind to 0 or 0.0.0.0 which doesn't help with knowing what interface recieved the data since the data does not contain information about interface mac/ip destination from the client. I'm not positive if this is a PHP issue or not but I believe you can do it in C/C++ and that you should be able to do it with PHP. A work around I'm experimenting with goes as: <?php $interface_ip = "10.66.66.1"; $interface_port = 67; //listens for dhcp requests $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); //you must bind to 0.0.0.0 to actually see anything socket_bind($socket, 0, 67); while(1) { if($src = @socket_recvfrom($socket, $data, 9999, 0, $interface_ip, $interface_port)) { echo "data!\n"; } } ?> ------------------------------------------------------------------------ [2007-03-01 09:01:09] tony2001@php.net And why do you think it's PHP related? ------------------------------------------------------------------------ [2007-03-01 00:41:33] matth at mystictrd dot com Description: ------------ A SOCK_DGRAM SOL_UDP socket using socket_bind to an IP address associated with an interface will not see UDP broadcasts destined to 255.255.255.255. I do not know if this is intended but you can see them when listening on 0.0.0.0 Reproduce code: --------------- <?php //listens for dhcp requests $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); //you must bind to 0.0.0.0 to actually see anything socket_bind($socket, "10.66.66.1", 67); while(1) { if($src = @socket_recv($socket, $data, 9999, 0)) { echo "data!\n"; } } ?> Expected result: ---------------- When a DHCP request is made we should see "data!" echoed. Actual result: -------------- Nothing was read on the interface - it can only see localhost or direct packets sent to it (destination interface IP address). ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=40674&edit=1

« previous php.bugs (#109761) next »