PHP Conference Nagoya 2025

stream_socket_accept

(PHP 5, PHP 7, PHP 8)

stream_socket_acceptAccept a connection on a socket created by stream_socket_server()

Опис

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

Accept a connection on a socket previously created by stream_socket_server().

Параметри

socket

The server socket to accept a connection from.

timeout

Override the default socket accept timeout. Time should be given in seconds. By default, default_socket_timeout is used.

peer_name

Will be set to the name (address) of the client which connected, if included and available from the selected transport.

Зауваження:

Can also be determined later using stream_socket_get_name().

Значення, що повертаються

Returns a stream to the accepted socket connection або false в разі помилки.

Журнал змін

Версія Опис
8.0.0 timeout is now nullable.

Примітки

Увага

This function should not be used with UDP server sockets. Instead, use stream_socket_recvfrom() and stream_socket_sendto().

Прогляньте також

add a note

User Contributed Notes 2 notes

up
6
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);
}
}
?>
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
}
}
}
}
?>
To Top