|
socket_recvfrom
Receives data from a socket whether or not it is connection-oriented
(PHP 4 >= 4.0.7, PHP 5)
The socket_recvfrom() function receives
len bytes of data in buf from
name on port port (if the
socket is not of type
The name and port must be
passed by reference. If the socket is not connection-oriented,
name will be set to the internet protocol address of
the remote host or the path to the UNIX socket. If the socket is
connection-oriented, name is Parameters
Return Valuessocket_recvfrom() returns the number of bytes received, or -1 if there was an error. The actual error code can be retrieved by calling socket_last_error(). This error code may be passed to socket_strerror() to get a textual explanation of the error. ExamplesExample 2296. socket_recvfrom() example<?php This example will initiate an UDP socket on port 1223 of 127.0.0.1 and print at most 12 characters received from a remote host. Code Examples / Notes » socket_recvfromtsuna
This function is very handy when dealing with UDP connections, because it enables you to know who's the client who connected to your socket. Bear in mind that UDP doesn't care about the source of the connection, the packets may be annonymous or even faked. No check is required. If you want to listen on an UDP socket and answer to the client, read my comment on socket_listen() -> http://www.php.net/manual/en/function.socket-listen.php jaggerwang
I'm confused about the rerturn value of socket_recvfrom(), it said -1 when failed, but when I call like this: if (($len = @socket_recvfrom($sock, $result, 32, 0, $ip, $port)) == -1) { if ($this->_debug) { echo "socket_read() failed: " . socket_strerror(socket_last_error()) . "\n"; } return false; } variable $len = false, when I change the buffer length from 32 to 4096, it becomes right. ryan_at_ryanfisher_dot_com
DNS RELAY USING UDP SOCKETS <?php while(TRUE) { $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); if($socket === FALSE) { echo 'Socket_create failed: '.socket_strerror(socket_last_error())."\n"; } if(!socket_bind($socketD, "0.0.0.0", 53)) { socket_close($socketD); echo 'socket_bind failed: '.socket_strerror(socket_last_error())."\n"; } socket_recvfrom($socket,$buf,65535,0,$clientIP,$clientPort); $stz = bin2hex($buf); $tx = ""; for($i=0;$i<(strlen($stz)-26-10)/2;$i++) { $e = "00"; $e[0] = $stz[$i*2+26]; $e[1] = $stz[$i*2+27]; $f = hexdec($e); if($f > 0 && $f < 32) $tx .= "."; else $tx .= sprintf("%c",$f); } echo "$clientIP <".$tx.">\n"; $fp = fsockopen("udp://72.174.110.4",53,$errno,$errstr); if (!$fp) { echo "ERROR: $errno - $errstr<br />\n"; } else { fwrite($fp,$buf); $ret = $buf; $ret = fread($fp,667); fclose($fp); } } socket_send($socket,$ret,667,0); } ?> |
Change Languagesocket_accept socket_bind socket_clear_error socket_close socket_connect socket_create_listen socket_create_pair socket_create socket_get_option socket_getpeername socket_getsockname socket_last_error socket_listen socket_read socket_recv socket_recvfrom socket_select socket_send socket_sendto socket_set_block socket_set_nonblock socket_set_option socket_shutdown socket_strerror socket_write |