socket_send

(PHP 4 >= 4.1.0, PHP 5)

socket_sendEnvía información a un socket conectado

Descripción

int socket_send ( resource $socket , string $buf , int $len , int $flags )

La función socket_send() envía len bytes al socket socket desde buf.

Parámetros

socket

Un recurso socket válido creado con socket_create() o socket_accept().

buf

Un buffer que contiene la información que será enviada al host remoto.

len

El número de bytes que serán enviados al host remoto desde buf.

flags

El valor de flags puede ser cualquier combinación de las siguientes banderas, unidas con el operador binario OR (|).

Valores posibles de flags
MSG_OOB Enviar información OOB (fuera de banda).
MSG_EOR Indicar una marca de registro. La información enviada completa el registro.
MSG_EOF Cerra la parte enviadora del socket e incluir una notificación apropiada de éste al final de la información enviada. La información enviada completa la transacción.
MSG_DONTROUTE Evitar la ruta, usar la interfaz directa.

Valores devueltos

socket_send() devuelve el número de bytes enviados, o FALSE en caso de error.

Ver también

add a note add a note

User Contributed Notes 2 notes

up
-1
jo at edarta dot be
6 years ago
In php-5.2.0, there's no MSG_EOF anymore. This is not even needed if you make sure you handle writes and close of sockets correctly.
up
-2
KingOfDos
8 years ago
I changed the Magic Packet function to this. I beleave that an function may not return any value, only an true/false (in the most way's).
<?PHP
function wol_magic_packet($mac,$addr='255.255.255.255') {
   
//Requirements__________________________
    //    You need to load the php_sockets.dll (in case of Windows, don't
    //    know @ linux, compile with --socket-support i beleave ).
    //    Otherwise he cannot find the socket_create function
    //Usage________________________________
    //    $addr:
    //        You will send and broadcast tho this addres.
    //        Normaly you need to use the 255.255.255.255 adres, so i made it as default. So you don't need
    //        to do anything with this.
    //    $mac:
    //        You will WAKE-UP this WOL-enabled computer, you need to add the MAC-addres here.
    //
    //Return________________________________
    //    TRUE:    When socked was created succesvolly and the message has been send.
    //    FALSE:    Something went wrong
    //
    //Example_1_____________________________
    //    When the message has been send you will see the message "Done...."
    //
    //    if ( wol_magic_packet ( '00:00:00:00:00:00' ) )
    //        echo 'Done...';
    //    else
    //        echo 'Error while sending';
    //
    //Example_2_____________________________
    //    To loop more computers:
    //
    //    $arr = array(
    //        '00:00:00:00:00:00',
    //        '00:00:00:00:00:00'
    //    );
    //    foreach($arr as $this_id => $this_mac)
    //        if (! wol_magic_packet ( $this_mac ))
    //            echo 'Error while sending to ['. $this_mac .']<br />'."\r\n";
    //___________________________________________
   
    //Check if it's an real MAC-addres and split it into an array
   
if (!preg_match("/([A-F0-9]{2}[-:]){5}[A-F0-9]{2}/",$mac,$maccheck))
        return
false;
   
$addr_byte = preg_split("/[-:]/",$maccheck[0]);
   
   
//Creating hardware adress
   
$hw_addr = '';
    for (
$a=0; $a < 6; $a++)//Changing mac adres from HEXEDECIMAL to DECIMAL
       
$hw_addr .= chr(hexdec($addr_byte[$a]));
   
   
//Create package data
   
$msg = str_repeat(chr(255),6);
    for (
$a = 1; $a <= 16; $a++)
       
$msg .= $hw_addr;

   
//Sending data
   
if ( //If
       
function_exists('socket_create') AND //socket_create exists
       
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP) AND //Can create the socket
       
$sock_data = socket_connect($sock, $addr, 2050) //Can connect to the socket
   
) {  //Then
       
$sock_data = socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, 1); //Set
       
$sock_data = socket_write($sock, $msg, strlen($msg)); //Send data
       
socket_close($sock); //Close socket
       
return true;
    } else
//Esle? :P
       
return false;
}
?>
To Top