PHP socket_read报错问题

centos7,php5.6环境
现在遇到一个这样的问题.在同一个类中,有3个方法用到了下面代码($host和$port的值都是固定的).
当执行到第二个方法的socket_read()时候会报错,错误信息如下.
socket_read(): unable to read from socket [104]: Connection reset by peer in

$socket = $this->getSocket($host,$port);
        if(!$socket){
            echo "socket链接异常";
            return;
        }
        $res1 = socket_write($socket, $this->login, strlen($this->login));
        //此处$str内容各不相同.
        $res2 = socket_write($socket, $str, strlen($str));
        if(!$res1 || !$res2){
            echo "连接异常";
            return;
        }
                while (true) {
   //socket_read报错socket_read(): unable to read from socket [104]: Connection reset by peer in xxx
            $response = socket_read($socket, 1024);
        
            }

下面是getSocket()方法的代码

public function getSocket($host,$port)
    {
    //已声明static::$mySocket = null;
        if(!self::$mySocket){
            self::$mySocket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
            if(!self::$mySocket){
                return false;
            }
            socket_set_option(self::$mySocket,SOL_SOCKET,SO_RCVTIMEO,array("sec"=>1, "usec"=>0 ) );
            socket_set_option(self::$mySocket,SOL_SOCKET,SO_SNDTIMEO,array("sec"=>1, "usec"=>0 ) );
            $result = socket_connect(self::$mySocket, $host,$port);
            if (!$result) {
            self::$mySocket = null;
                return false;
            }
        }
        return self::$mySocket;
    }

但是当我把getSocket方法改成下面这样就不会报错.
是因为每次socket_write之前都需要从新执行socket_create和socket_connect吗?
麻烦各位大佬看下,非常感谢!

 public function getSocket($host,$port)
    {
        $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
        if(!$socket){
            return false;
        }
        socket_set_option($socket,SOL_SOCKET,SO_RCVTIMEO,array("sec"=>1, "usec"=>0 ) );
        socket_set_option($socket,SOL_SOCKET,SO_SNDTIMEO,array("sec"=>1, "usec"=>0 ) );
        $result = socket_connect($socket, $host,$port);
        if (!$result) {
            return false;
        }else{
            return $socket;
        }
    }
阅读 3k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题