PHP 5.5.15 is released

socket_send

(PHP 4 >= 4.1.0, PHP 5)

socket_sendEnvoie des données à un socket connecté

Description

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

La fonction socket_send() envoie len octets au socket socket depuis le buffer buf.

Liste de paramètres

socket

Une ressource de socket valide, créée par la fonction socket_create() ou la fonction socket_accept().

buf

Un buffer contenant les données qui seront envoyées sur l'hôte distant.

len

Le nombre d'octets qui doivent être envoyés à l'hôte distant depuis le buffer buf.

flags

La valeur du paramètre flags peut être une combinaison des drapeaux suivants, joints par un OU binaire (|).

Valeurs possibles pour flags
MSG_OOB Traite les données OOB (out-of-band).
MSG_EOR Indique un marqueur d'enregistrement. Les données envoyées complètent l'enregistrement.
MSG_EOF Termine l'envoi via le socket et inclue une notification appropriée à la fin des données envoyées. Les données envoyées complètent la transaction.
MSG_DONTROUTE Ignore le routage, utilise une interface directe.

Valeurs de retour

Retourne le nombre d'octets envoyés, ou FALSE si une erreur survient.

Voir aussi

  • socket_sendto() - Envoie un message à un socket, qu'il soit connecté ou pas

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