TCP 服务器套接字
套接字创建
创建一个使用 TCP 的套接字。它与创建客户端套接字相同。
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
套接字绑定
将特定端口(参数 3)的给定网络(参数 2)的连接绑定到套接字。
第二个参数通常是 0.0.0.0
,它接受来自所有网络的连接。它也可以
socket_bind
错误的一个常见原因是指定的地址已经绑定到另一个进程 。通常会杀死其他进程(通常是手动以防止意外杀死关键进程),以便释放套接字。
socket_bind($socket, "0.0.0.0", 6667) or onSocketFailure("Failed to bind to 0.0.0.0:6667");
将套接字设置为侦听
使用 socket_listen
使套接字侦听传入的连接。第二个参数是允许在接受之前排队的最大连接数。
socket_listen($socket, 5);
处理连接
TCP 服务器实际上是处理子连接的服务器。socket_accept
创建一个新的子连接。
$conn = socket_accept($socket);
来自 socket_accept
的连接的数据传输与 TCP 客户端套接字的数据传输相同。
如果要关闭此连接,请直接致电 socket_close($conn);
。这不会影响原始 TCP 服务器套接字。
关闭服务器
另一方面,当不再使用服务器时,应调用 socket_close($socket);
。这也将释放 TCP 地址,允许其他进程绑定到该地址。