PHP 5.4.31 Released

stream_socket_accept

(PHP 5)

stream_socket_acceptAccepte une connexion sur un socket créé par stream_socket_server()

Description

resource stream_socket_accept ( resource $server_socket [, float $timeout = ini_get("default_socket_timeout") [, string &$peername ]] )

Accepte une connexion sur un socket créé précédemment avec stream_socket_server().

Liste de paramètres

server_socket

Le socket serveur depuis lequel accepter une connexion.

timeout

Remplace le délai d'expiration par défaut du socket. Ce délai doit être donné en secondes.

peername

Le nom (adresse) du client connecté, si fourni et si disponible pour le transport sélectionné.

Note:

Peut également être déterminé plus tard, en utilisant la fonction stream_socket_get_name().

Valeurs de retour

Retourne un flux vers la connexion socket acceptée ou FALSE si une erreur survient.

Notes

Avertissement

Cette fonction ne doit pas être utilisée avec les sockets serveur UDP. À la place, utilisez les fonctions stream_socket_recvfrom() et stream_socket_sendto().

Voir aussi

add a note add a note

User Contributed Notes 4 notes

up
1
Andy at txtNation dot com
2 years ago
To check if there's a new connection waiting, without blocking, or (when using non-blocking mode) without notices), you can use stream_accept (as opposed to socket_select).

<?php

   
class GenericClass {

        protected
$resSocket=null;

        function
acceptConnections() {

           
# check that we still have a resource
           
           
if(is_resource($this->resSocket)) {
           
               
$arrRead=array($this->resSocket);
               
               
$arrWrite=array();
               
               
/** @warning Passing $arrRead,$arrWrite by reference */
               
if(stream_select($arrRead,$arrWrite,$arrWrite,0)) {
           
                   
$resConnection=stream_socket_accept($this->resSocket,0);

                   
# ... other stuff here
               
}
            }
        }
    }
?>
up
1
mickael dot bailly at free dot fr
8 years ago
this function, compared to the function socket_accept, got an extra argument "timeout".
To make this function wait indefinitelly to incoming connections, just as in socket_accept, set timeout to -1. It works for me with PHP 5.0.4.
up
1
leleu256NOSPAM at hotmail dot com
9 years ago
This code could be very helpfull...

The following code is for the "server". It listen for a message until CTRL-C

<?php
while (true)
{
// disconnected every 5 seconds...
receive_message('127.0.0.1','85',5);
}

function
receive_message($ipServer,$portNumber,$nbSecondsIdle)
{
 
// creating the socket...
 
$socket = stream_socket_server('tcp://'.$ipServer.':'.$portNumber, $errno, $errstr);
  if (!
$socket)
  {
    echo
"$errstr ($errno)<br />\n";
  }
  else
   {
   
// while there is connection, i'll receive it... if I didn't receive a message within $nbSecondsIdle seconds, the following function will stop.
   
while ($conn = @stream_socket_accept($socket,$nbSecondsIdle))
    {
    
$message= fread($conn, 1024);
     echo
'I have received that : '.$message;
    
fputs ($conn, "OK\n");
    
fclose ($conn);
    }
   
fclose($socket);
  }
}
?>

The following code is for the "client". It send a message, and read the respons...

<?php

send_message
('127.0.0.1','85','Message to send...');

function
send_message($ipServer,$portServer,$message)
{
 
$fp = stream_socket_client("tcp://$ipServer:$portServer", $errno, $errstr);
  if (!
$fp)
  {
     echo
"ERREUR : $errno - $errstr<br />\n";
  }
  else
  {
    
fwrite($fp,"$message\n");
    
$response fread($fp, 4);
     if (
$response != "OK\n")
        {echo
'The command couldn\'t be executed...\ncause :'.$response;}
     else
        {echo
'Execution successfull...';}
    
fclose($fp);
  }
}
?>
up
-1
fred dot hakeem dot smith at muslimamerica dot bob dot net
6 years ago
To whom it may concern, and it may concern you greatly, stream_set_blocking has no effect on stream_socket_accept.
If you want it to return right away, connection or not, use 0 for the timeout parameter.
To Top