Hi,
if you got same problems like i have
@socket_write($xd, "Good Bye!\n\r");
@socket_shutdown($xd, 2);
@socket_close($xd);
wont'tx send "Good Bye!\n\r" to the opened socket.
but if you put a
usleep or something like echo "";
between write and shutdown its working.
socket_create_listen
(PHP 4 >= 4.0.7, PHP 5)
socket_create_listen — Öffnet einen Socket um Verbindungen über einem gegebenen Port aufzubauen
Beschreibung
socket_create_listen() erzeugt einen neuen Socket-Deskriptor vom Typ AF_INET, der an allen lokalen Schnittstellen eines gegebenen Ports auf neue Verbindungen wartet.
Diese Funktion soll die Erzeugung eines neuen Sockets, der nur auf neue Verbindungsanforderungen wartet und akzeptiert, erleichtern.
Parameter-Liste
- port
-
Der Port, den alle Schnittstellen abhören.
- backlog
-
Der Parameter backlog gibt an, wie gross 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 einen neuen Socket-Deskriptor 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.
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.
socket_create_listen
26-Aug-2008 11:42
26-Jun-2008 03:34
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
06-Mar-2008 11:03
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.
17-Jul-2004 04:42
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);
?>
