php socket编程 - 为什么退出socket_accept($ sock)=== false

时间:2015-10-18 07:01:35

标签: php sockets

我在简单的服务器端套接字编程上阅读this example。我无法理解这个逻辑:

if (($msgsock = socket_accept($sock)) === false) {
    echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
    break;
}

从这里开始:

do {
    if (($msgsock = socket_accept($sock)) === false) {
        echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
        break;
    }
    /* Send instructions. */
    $msg = "\nWelcome to the PHP Test Server. \n" .
        "To quit, type 'quit'. To shut down the server type 'shutdown'.\n";
    socket_write($msgsock, $msg, strlen($msg));

为什么要打破循环?我们不应该等待连接吗?

1 个答案:

答案 0 :(得分:1)

调用accept可能由于多种原因而失败,例如,如果它被信号中断或者套接字未处于侦听状态。根据错误,您可能希望执行不同的操作,但最简单的方法是停止尝试接受连接并退出程序。