Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
231 changes: 231 additions & 0 deletions reference/stream/functions/stream-socket-server.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,231 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 525aa5f198d482c0d03be54ddee5af13b376ab99 Maintainer: lacatoire Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.stream-socket-server" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>stream_socket_server</refname>
<refpurpose>Erstellt einen Internet- oder Unix-Domain-Server-Socket</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type class="union"><type>resource</type><type>false</type></type><methodname>stream_socket_server</methodname>
<methodparam><type>string</type><parameter>address</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter role="reference">error_code</parameter><initializer>&null;</initializer></methodparam>
<methodparam choice="opt"><type>string</type><parameter role="reference">error_message</parameter><initializer>&null;</initializer></methodparam>
<methodparam choice="opt"><type>int</type><parameter>flags</parameter><initializer>STREAM_SERVER_BIND | STREAM_SERVER_LISTEN</initializer></methodparam>
<methodparam choice="opt"><type class="union"><type>resource</type><type>null</type></type><parameter>context</parameter><initializer>&null;</initializer></methodparam>
</methodsynopsis>
<para>
Erstellt einen Stream- oder Datagramm-Socket auf der angegebenen
<parameter>address</parameter>.
</para>
<para>
Diese Funktion erstellt lediglich einen Socket; um Verbindungen
anzunehmen, ist <function>stream_socket_accept</function> zu verwenden.
</para>
</refsect1>

<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>address</parameter></term>
<listitem>
<para>
Der Typ des erstellten Sockets wird durch den Transport bestimmt, der
mittels der Standard-URL-Formatierung angegeben wird: <literal>transport://target</literal>.
</para>
<para>
Für Internet-Domain-Sockets (<constant>AF_INET</constant>) wie TCP und UDP sollte der
<literal>target</literal>-Anteil des Parameters
<parameter>remote_socket</parameter> aus einem
Hostnamen oder einer IP-Adresse bestehen, gefolgt von einem Doppelpunkt und einer Portnummer. Für
Unix-Domain-Sockets sollte der <literal>target</literal>-Anteil auf
die Socket-Datei im Dateisystem verweisen.
</para>
<simpara>
Je nach Umgebung sind Unix-Domain-Sockets möglicherweise nicht verfügbar.
Eine Liste der verfügbaren Transporte kann mittels
<function>stream_get_transports</function> abgerufen werden. Siehe
<xref linkend="transports"/> für eine Liste der eingebauten Transporte.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>error_code</parameter></term>
<listitem>
<para>
Sind die optionalen Argumente <parameter>error_code</parameter> und <parameter>error_message</parameter>
vorhanden, werden sie so gesetzt, dass sie den tatsächlichen, auf Systemebene
aufgetretenen Fehler in den systemnahen Aufrufen <literal>socket()</literal>,
<literal>bind()</literal> und <literal>listen()</literal> angeben. Ist
der in <parameter>error_code</parameter> zurückgegebene Wert
<literal>0</literal> und gibt die Funktion &false; zurück, so ist dies ein
Hinweis darauf, dass der Fehler vor dem Aufruf von <literal>bind()</literal>
aufgetreten ist. Dies ist höchstwahrscheinlich auf ein Problem bei der Initialisierung des Sockets zurückzuführen.
Es ist zu beachten, dass die Argumente <parameter>error_code</parameter> und
<parameter>error_message</parameter> stets als Referenz übergeben werden.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>error_message</parameter></term>
<listitem>
<para>
Siehe die Beschreibung von <parameter>error_code</parameter>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>flags</parameter></term>
<listitem>
<para>
Ein Bitmaskenfeld, das auf eine beliebige Kombination von Socket-Erstellungs-Flags
gesetzt werden kann.
</para>
<note>
<para>
Für UDP-Sockets muss <constant>STREAM_SERVER_BIND</constant> als
Parameter <parameter>flags</parameter> verwendet werden.
</para>
</note>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>context</parameter></term>
<listitem>
<para>
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>

<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Gibt den erstellten Stream zurück oder &false; im Fehlerfall.
</para>
</refsect1>

<refsect1 role="changelog">
&reftitle.changelog;
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>8.0.0</entry>
<entry>
<parameter>context</parameter> ist jetzt nullbar.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</refsect1>

<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Verwendung von TCP-Server-Sockets</title>
<programlisting role="php">
<![CDATA[
<?php
$socket = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr);
if (!$socket) {
echo "$errstr ($errno)<br />\n";
} else {
while ($conn = stream_socket_accept($socket)) {
fwrite($conn, 'The local time is ' . date('n/j/Y g:i a') . "\n");
fclose($conn);
}
fclose($socket);
}
?>
]]>
</programlisting>
</example>
</para>
<para>
Das folgende Beispiel zeigt, wie man sich als Zeitserver verhält, der auf
Zeitabfragen antworten kann, wie sie in einem Beispiel von <function>stream_socket_client</function> gezeigt werden.
<note>
<simpara>
Die meisten Systeme erfordern Root-Zugriff, um einen Server-Socket auf einem Port
unterhalb von 1024 zu erstellen.
</simpara>
</note>
<example>
<title>Verwendung von UDP-Server-Sockets</title>
<programlisting role="php">
<![CDATA[
<?php
$socket = stream_socket_server("udp://127.0.0.1:1113", $errno, $errstr, STREAM_SERVER_BIND);
if (!$socket) {
die("$errstr ($errno)");
}

do {
$pkt = stream_socket_recvfrom($socket, 1, 0, $peer);
echo "$peer\n";
stream_socket_sendto($socket, date("D M j H:i:s Y\r\n"), 0, $peer);
} while ($pkt !== false);

?>

]]>
</programlisting>
</example>
</para>
</refsect1>

<refsect1 role="notes">
&reftitle.notes;
&ipv6.brackets;
</refsect1>

<refsect1 role="seealso">
&reftitle.seealso;
<simplelist>
<member><function>stream_socket_client</function></member>
<member><function>stream_set_blocking</function></member>
<member><function>stream_set_timeout</function></member>
<member><function>fgets</function></member>
<member><function>fgetss</function></member>
<member><function>fwrite</function></member>
<member><function>fclose</function></member>
<member><function>feof</function></member>
<member><link linkend="ref.curl">Curl-Erweiterung</link></member>
</simplelist>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
64 changes: 64 additions & 0 deletions reference/stream/functions/stream-wrapper-unregister.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 525aa5f198d482c0d03be54ddee5af13b376ab99 Maintainer: lacatoire Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.stream-wrapper-unregister" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>stream_wrapper_unregister</refname>
<refpurpose>Hebt die Registrierung eines URL-Wrappers auf</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>bool</type><methodname>stream_wrapper_unregister</methodname>
<methodparam><type>string</type><parameter>protocol</parameter></methodparam>
</methodsynopsis>
<simpara>
Ermöglicht das Deaktivieren eines bereits definierten Stream-Wrappers. Sobald der Wrapper
deaktiviert wurde, kann er mit einem benutzerdefinierten Wrapper mittels
<function>stream_wrapper_register</function> überschrieben oder später mit
<function>stream_wrapper_restore</function> wieder aktiviert werden.
</simpara>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>protocol</parameter></term>
<listitem>
<para>
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
&return.success;
</para>
</refsect1>
</refentry>


<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
Loading
Loading