PHP 8.5.0 Alpha 1 available for testing

stream_socket_accept

(PHP 5, PHP 7, PHP 8)

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

Descripción

stream_socket_accept(resource $socket, ?float $timeout = null, string &$peer_name = null): resource|false

Acepta una conexión en un socket creado previamente con stream_socket_server().

Parámetros

socket

El socket servidor desde el cual aceptar una conexión.

timeout

Reemplaza el tiempo de espera predeterminado del socket. Este tiempo debe ser proporcionado en segundos. Por omisión, se utiliza default_socket_timeout.

peer_name

El nombre (dirección) del cliente conectado, si se proporciona y si está disponible para el transporte seleccionado.

Nota:

Asimismo puede ser determinado más tarde, utilizando la función stream_socket_get_name().

Valores devueltos

Devuelve un flujo hacia la conexión socket aceptada o false en caso de error.

Historial de cambios

Versión Descripción
8.0.0 timeout ahora es nullable.

Notas

Advertencia

Esta función no debe ser utilizada con sockets servidor UDP. En su lugar, utilice las funciones stream_socket_recvfrom() y stream_socket_sendto().

Ver también

add a note

User Contributed Notes 2 notes

up
5
Andy at txtNation dot com
13 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
5
leleu256NOSPAM at hotmail dot com
20 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);
}
}
?>
To Top