【问题标题】:PHP - error when using socket_recvPHP - 使用 socket_recv 时出错
【发布时间】:2023-03-30 22:25:01
【问题描述】:

在此函数中运行 socket_recv 时出现套接字错误:

function readByteXByteSIBmsg() {
    $msg = "";
    $buf="";
    try {
     while( $ret=socket_recv($this->kpSocket,$buf,8192,0)){
        $msg.=$buf;
        if($ret<8192) break;
     }


    $this->deb_print("KpCore:readByteXByteSIBmsg:READ LOOP TERMINATED");
    } catch (Exception $e) {
        err_print("KPICore:readByteXByteSIBmsg:Exception on EVENT  HANDLER:RECEIVE:\n" . $e);
        $this->$KP_ERROR_ID = $this->ERR_SOCKET_TIMEOUT;
    }
    return $msg;
}

这是错误的文本:

PHP Warning:  socket_recv(): unable to read from socket [11]: Resource temporarily unavailable in /home/luca/Documenti/Tesi/M3 Agent Page/lib/KPICore.php on line 236

(第 236 行是调用 socket_recv 的行)

【问题讨论】:

    标签: php sockets


    【解决方案1】:

    错误是EAGAIN(或EWOULDBLOCK,有时是相同的错误),这意味着套接字是非阻塞的,目前没有什么可读取的。您可以在遇到该错误时忙于等待,直到您读取某些内容,或者您​​使用其他方法在尝试接收之前找出是否有数据要读取。

    【讨论】:

    • 已经有几年了,但我很好奇。我究竟应该如何使用“其他方法来确定是否有数据要读取”?
    • @i336_ select 浮现在脑海中。 :)
    • 哦。当然。是的,我最初并没有完全理解“哦,如果你得到EAGAIN,你就会回到select(),让它告诉你”这件事……呵呵。谢谢:)
    猜你喜欢
    • 2013-07-26
    • 1970-01-01
    • 2015-08-06
    • 2018-03-25
    • 2014-05-05
    • 2016-06-20
    • 2016-11-09
    • 1970-01-01
    • 2014-05-30
    相关资源
    最近更新 更多