Set a timeout on socket_read

前端 未结 4 1896
忘掉有多难
忘掉有多难 2021-01-01 17:08

I was wondering how can I set a timeout on a socket_read call? The first time it calls socket_read, it waits till data is sent, and if no data is s

相关标签:
4条回答
  • 2021-01-01 17:45

    Have you tried socket_set_option with SO_RCVTIMEO

    Timeout value for input operations.

    0 讨论(0)
  • 2021-01-01 17:49

    I did a socket_listen and then I made a manual timeout with time()+2 and a while loop with nonblock set and socket_read() inside. Seems to be working ok. Any alternatives?

    UPDATE: I found that setting the socket as nonblocking and then using socket_listen provided the timeout I needed.

    0 讨论(0)
  • 2021-01-01 17:49
    $read_socket = socket_select($read, $write  = NULL, $except = NULL, 10); // 10 - Timeout
    if($read_socket === FALSE)
        $this->End();
    elseif($read_socket === 0)
        return FALSE;
    
    $pdu_ = socket_read($this->session, 102400);
    if($read_socket && !strlen($pdu_))
        $this->End();
    
    0 讨论(0)
  • 2021-01-01 17:50

    this set 5 sec timeout of the socket.

    socket_set_option($socket,SOL_SOCKET, SO_RCVTIMEO, array("sec"=>5, "usec"=>0));
    
    0 讨论(0)
提交回复
热议问题