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;
}
}