File: stream-socket-server.xml

package info (click to toggle)
phpdoc 20050512-1
  • links: PTS
  • area: non-free
  • in suites: sarge
  • size: 36,592 kB
  • ctags: 1,501
  • sloc: xml: 376,768; php: 6,708; cpp: 500; makefile: 293; perl: 161; sh: 151; awk: 28
file content (150 lines) | stat: -rw-r--r-- 5,449 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.17 $ -->
  <refentry id="function.stream-socket-server">
   <refnamediv>
    <refname>stream_socket_server</refname>
    <refpurpose>
     Create an Internet or Unix domain server socket
    </refpurpose> 
   </refnamediv>
   <refsect1>
    <title>Description</title>
     <methodsynopsis>
      <type>resource</type><methodname>stream_socket_server</methodname>
      <methodparam><type>string</type><parameter>local_socket</parameter></methodparam>
      <methodparam choice="opt"><type>int</type><parameter role="reference">errno</parameter></methodparam>
      <methodparam choice="opt"><type>string</type><parameter role="reference">errstr</parameter></methodparam>
      <methodparam choice="opt"><type>int</type><parameter>flags</parameter></methodparam>
      <methodparam choice="opt"><type>resource</type><parameter>context</parameter></methodparam>
     </methodsynopsis>
    <para>
     Creates a stream or datagram socket on the specified 
     <parameter>local_socket</parameter>.  The type of socket created
     is determined by the transport specified using standard URL formatting:
     <literal>transport://target</literal>.  For Internet Domain sockets
     (AF_INET) such as TCP and UDP, the <literal>target</literal> portion
     of the <parameter>remote_socket</parameter> parameter should consist of
     a hostname or IP address followed by a colon and a port number.  For Unix
     domain sockets, the <parameter>target</parameter> portion should point
     to the socket file on the filesystem.

     <parameter>flags</parameter> is a bitmask field which may be set to any
     combination of socket creation flags.  The default value of flags is
     <constant>STREAM_SERVER_BIND</constant> | <constant>STREAM_SERVER_LISTEN</constant>.
    </para>
    <note>
     <para>
      For UDP sockets, you must use <constant>STREAM_SERVER_BIND</constant> as
      the <parameter>flags</parameter> parameter.
     </para>
    </note>
    <para>
     This function only creates a socket, to begin accepting connections
     use <function>stream_socket_accept</function>.
    </para>
    <para>
     If the call fails, it will return &false; and if the optional
     <parameter>errno</parameter> and <parameter>errstr</parameter>
     arguments are present they will be set to indicate the actual
     system level error that occurred in the system-level
     <literal>socket()</literal>, <literal>bind()</literal>, and
     <literal>listen()</literal> calls. If the value returned in
     <parameter>errno</parameter> is <literal>0</literal> and the
     function returned &false;, it is an indication that the error
     occurred before the <literal>bind()</literal> call. This is
     most likely due to a problem initializing the socket. Note that
     the <parameter>errno</parameter> and
     <parameter>errstr</parameter> arguments will always be passed by
     reference.
    </para>
    <para>
     Depending on the environment, Unix domain sockets may not be available.  
     A list of available transports can be retrieved using 
     <function>stream_get_transports</function>. See
     <xref linkend="transports"/> for a list of bulitin transports.
    </para>
    <para>
     <example>
      <title>Using 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>
     The example below shows how to act as a time server which can respond
     to time queries as shown in an example on <function>stream_socket_client</function>.
     <note>
      <simpara>
       Most systems require root access to create a server socket on a port
       below 1024.
      </simpara>
     </note>
     <example>
      <title>Using 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>
    &ipv6.brackets;
    <para>
     See also <function>stream_socket_client</function>, 
     <function>stream_set_blocking</function>,
     <function>stream_set_timeout</function>, 
     <function>fgets</function>,
     <function>fgetss</function>, <function>fwrite</function>,
     <function>fclose</function>, <function>feof</function>, and
     the <link linkend="ref.curl">Curl extension</link>.
    </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:"../../../../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
-->