PHP Conference Japan 2024

stream_socket_accept

(PHP 5, PHP 7, PHP 8)

stream_socket_acceptAccept a connection on a socket created by stream_socket_server()

Description

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().

Parameters

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.

Note:

Can also be determined later using stream_socket_get_name().

Return Values

Returns a stream to the accepted socket connection or false on failure.

Changelog

Version Description
8.0.0 timeout is now nullable.

Notes

Warning

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

See Also

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