stream_socket_server
创建 Internet 或 Unix 域服务器套接字
&reftitle.description;
resourcefalsestream_socket_server
stringaddress
interror_code&null;
stringerror_message&null;
intflagsSTREAM_SERVER_BIND | STREAM_SERVER_LISTEN
resourcenullcontext&null;
在指定 address 上创建 stream 或者数据包套接字(datagram socket)。
此函数仅创建套接字,并使用 stream_socket_accept 开始接受连接。
&reftitle.parameters;
address
传输器决定创建的套接字类型,其传输器由标准 URL 格式(transport://target)指定。
对于 Internet 域套接字(AF_INET),比如 TCP 和 UDP,
remote_socket 参数的 target
部分应由主机名或者 IP 地址,随后跟着冒号和端口号组成。
对于 Unix 域套接字, target 部分指向文件系统中的套接字文件。
环境的不同,可能会导致 Unix 域套接字无法使用。可以使用 stream_get_transports
检索可以使用的传输器列表。查看获取内置传输器列表。
error_code
如果指定了可选的 error_code 和 error_message
参数,它们将被设置为指出在系统级别进行 socket()、bind()、
listen() 调用时发生的真实系统级别错误。如果 error_code
返回的值为 0 且函数返回 &false;,则表明错误发生在 bind()
调用之前。请注意 error_code 和 error_message
始终通过引用传递。
error_message
参阅 error_code 描述。
flags
位掩码字段,可以设置为套接字创建 flag 的任意组合。
对于 UDP 套接字,你必须使用 STREAM_SERVER_BIND 作为
flags 参数。
context
&reftitle.returnvalues;
返回已创建的 stream,错误时返回 &false;。
&reftitle.changelog;
&Version;
&Description;
8.0.0
context 现在可为 null。
&reftitle.examples;
使用 TCP 服务器套接字
\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);
}
?>
]]>
下面的示例展示了如何充当时间服务器,可以响应时间查询,正如 stream_socket_client 上的示例。
大多数系统在低于 1024 的端口号上创建服务器套接字时需要 root 访问权限。
使用 UDP 服务器套接字
]]>
&reftitle.notes;
&ipv6.brackets;
&reftitle.seealso;
stream_socket_client
stream_set_blocking
stream_set_timeout
fgets
fgetss
fwrite
fclose
feof
Curl 扩展