socket_create_listen

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

socket_create_listen Öffnet einen Socket, um Verbindungen über einem gegebenen Port aufzubauen

Beschreibung

socket_create_listen(int $port, int $backlog = 128): Socket|false

socket_create_listen() erzeugt eine neue Socket-Instanz vom Typ AF_INET, der an allen lokalen Schnittstellen eines gegebenen Ports auf neue Verbindungen wartet.

Diese Funktion soll die Erzeugung eines neuen Sockets erleichtern, der nur auf neue Verbindungsanforderungen wartet, um sie zu akzeptieren.

Parameter-Liste

port

Der Port, den alle Schnittstellen abhören.

backlog

Der Parameter backlog gibt an, wie groß die Warteschlange mit wartenden Verbindungen maximal werden darf. SOMAXCONN kann als backlog übergeben werden. Mehr Informationen hierzu finden Sie bei socket_listen().

Rückgabewerte

socket_create_listen() gibt bei Erfolg eine neue Socket-Instanz zurück oder false, falls ein Fehler aufgetreten ist. Der Fehlercode kann mit der Funktion socket_last_error() abgefragt werden. Dieser Fehlercode kann an die Funktion socket_strerror() übergeben werden, um eine textuelle Beschreibung des Fehlers zu erhalten.

Changelog

Version Beschreibung
8.0.0 Bei Erfolg gibt diese Funktion nun eine Socket-Instanz zurück; zuvor wurde eine Ressource zurückgegeben.

Anmerkungen

Hinweis:

Falls Sie einen Socket erzeugen möchten, der nur bestimmte Schnittstellen abhört, müssen Sie socket_create(), socket_bind() und socket_listen() verwenden.

Siehe auch

add a note add a note

User Contributed Notes 4 notes

up
8
jdittmer at ppp0 dot net
20 years ago
If you specify no port number, or 0, a random free port will be chosen.
To use ports for ipc between client/server on the same machine you can use (minus error checking)

server.php:
<?php
$sock
= socket_create_listen(0);
socket_getsockname($sock, $addr, $port);
print
"Server Listening on $addr:$port\n";
$fp = fopen($port_file, 'w');
fwrite($fp, $port);
fclose($fp);
while(
$c = socket_accept($sock)) {
  
/* do something useful */
  
socket_getpeername($c, $raddr, $rport);
   print
"Received Connection from $raddr:$rport\n";
}
socket_close($sock);
?>

client.php:
<?php
$fp
= fopen($port_file, 'r');
$port = fgets($fp, 1024);
fclose($fp);
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($sock, '127.0.0.1', $port);
socket_close($sock);
?>
up
4
sysspoof at ng-lab dot org
16 years ago
Please note that port 1 to and with 1024 on linux and bsd system require root privileges. So it is recommended to choose a higher port for your own application.
up
2
basim at baassiri dot com
20 years ago
Remember that ports are only valid from 1 - 65535

[editor's note: typo fixed, thanks abryant at apple dot com]
up
-15
aeolianmeson at ifacfchi dot blitzeclipse dot com
16 years ago
I believe that on some systems this may not bind to some or all public interfaces.

On my Windows system, I could not connect on the public interface using this, but could when I made the individual calls to create, bind, and listen.

Dustin Oprea
To Top