php socket read 阻塞,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;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值