stream_socket_accept

(PHP 5, PHP 7, PHP 8)

stream_socket_acceptAcepta una conexión sobre un socket creado por stream_socket_server()

Descripción

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

Acepta una conexión sobre un socket creado previamente por stream_socket_server().

Parámetros

server_socket

El socket del servidor desde donde aceptar una conexión.

timeout

Sobreescribe el tiemo de espera aceptado por defecto del socket. Esto debería darse en segundos.

peername

Se establecerá al nombre (dirección) del cliente que se conectó, si está incluido y disponible desde el transporte seleccionado.

Nota:

También se puede determinar después usando stream_socket_get_name().

Valores devueltos

Devuelve un flujo a la conexión del socket aceptado o false en caso de error.

Notas

Advertencia

Esta función no debería usarse con sockets de servidor UDP. En su lugar, use stream_socket_recvfrom() y stream_socket_sendto().

Ver también

add a note

User Contributed Notes 2 notes

up
6
leleu256NOSPAM at hotmail dot com
19 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
5
Andy at txtNation dot com
12 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
}
}
}
}
?>
To Top