我一直在测试PHP套接字监听,并遇到了上述问题.我的测试监听器工作正常,但如果客户端在没有告诉服务器的情况下断开连接,则脚本会进入无限循环,直到新客户端连接为止.问题似乎在线,$ready = socket_select($read, $write = NULL, $except = NULL, $tv_sec = NULL);因为它应该停止等待连接在这里,而是它跳过等待并直接循环.
任何指针将不胜感激.
码:
#!/usr/bin/php -q
<?php
$debug = true;
function e($str) {
global $debug;
if($debug) { echo($str . "\n"); }
}
e("Starting...");
error_reporting(1);
ini_set('display_errors', '1');
e("Creating master socket...");
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$max_clients = 10;
e("Setting socket options...");
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
e("Binding socket...");
socket_bind($socket, "192.168.1.38", 20000);
e("Listening...");
socket_listen($socket, $max_clients);
$clients = array('0' => array('socket' => $socket));
while(TRUE) {
e("Beginning of WHILE");
$read[0] = $socket;
for($i=1; …Run Code Online (Sandbox Code Playgroud)