# socket_recv
* * * * *
说明:
>从已连接的socket接收数据
语法:
~~~
int socket_recv ( resource $socket , string &$buf , int $len , int $flags )
~~~
参数:
| 参数 | 描述 |
| --- | --- |
| socket | 必须是一个由 socket_create() 创建的socket资源|
| buf | 从socket中获取的数据将被保存在由 buf 制定的变量中。 如果有错误发生,如链接被重置,数据不可用等等, buf 将被设为 NULL|
|len| 长度最多为 len 字节的数据将被接收|
|flags| flags 的值可以为下列任意flag的组合。使用按位或运算符(|)来 组合不同的flag|
:-: 可用的 flags 值
| Flag | 描述 |
| --- | --- |
| MSG_OOB | 处理超出边界的数据 |
| MSG_PEEK | 从接受队列的起始位置接收数据,但不将他们从接受队列中移除。 |
| MSG_WAITALL | 在接收到至少 len 字节的数据之前,造成一个阻塞,并暂停脚本运行(block)。但是, 如果接收到中断信号,或远程服务器断开连接,该函数将返回少于 len 字节的数据。 |
| MSG_DONTWAIT | 如果制定了该flag,函数将不会造成阻塞,即使在全局设置中指定了阻塞设置。 |
返回值:
| 成功 | 失败 |
| --- | --- |
| 返回一个数字,表示接收到的字节数 | false |
返回失败,错误代码会传入 socket_last_error() ,将此参数传入 socket_strerror() 可以得到错误的文字说明。
技术细节:
PHP版本:PHP 4 >= 4.1.0, PHP 5, PHP 7
实例:
~~~
error_reporting(E_ALL);
echo "<h2>TCP/IP Connection</h2>\n";
/* 获取www 服务端口*/
$service_port = getservbyname('www', 'tcp');
/* 获取ip地址 */
$address = gethostbyname('www.baidu.com');
/* Create a TCP/IP socket. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
} else {
echo "OK.\n";
}
echo "Attempting to connect to '$address' on port '$service_port'...";
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
} else {
echo "OK.\n";
}
$in = "HEAD / HTTP/1.1\r\n";
$in .= "Host: www.baidu.com\r\n";
$in .= "Connection: keep-alive\r\n\r\n";
$out = '';
echo "发送http头请求...";
socket_write($socket, $in, strlen($in));
echo "OK.\n";
echo "Reading response:\n\n";
$buf = 'This is my buffer.';
if (false !== ($bytes = socket_recv($socket, $buf, 2048, MSG_WAITALL))) {
echo "Read $bytes bytes from socket_recv(). Closing socket...";
} else {
echo "socket_recv() failed; reason: " . socket_strerror(socket_last_error($socket)) . "\n";
}
socket_close($socket);
echo $buf . "\n";
echo "OK.\n\n";
~~~
资料来源:
http://php.net/manual/zh/function.socket-recv.php
- 前言
- 函数参考
- Socket 函数
- socket_accept
- socket_bind
- socket_clear_error
- socket_close
- socket_connect
- socket_create_listen
- socket_create_pair
- socket_create
- socket_getpeername
- socket_getsockname
- socket_last_error
- socket_listen
- socket_read
- socket_recv
- socket_select
- socket_send
- socket_set_block
- socket_set_nonblock
- SplQueue
- 魔术方法
- 魔术常量
- 杂项
- backlog的用处
- new self()和new static()的区别
- PHP变量的生命周期
- PHP抽象类
- 对象接口
- PHP中的常用关键字
- 常量
- 内存泄露
- global 与 $GLOBAL
- 简单说明CGI和动态请求是什么
- 设计模式
- 单例模式
- 工厂模式
- 适配器模式
- 策略模式
- 观察者模式
- 控制反转IoC简介
- session
- use_trans_sid
- auto_start
- session_id
- cookie_secure
- 面试
- 数据库相关
- 语句相关
- 索引相关
- 字段相关
- PHP相关
- 字符串相关
- 函数相关
- 运算符优先级相关
- 错误相关
- redis相关
- 10个常见的Redis面试"刁难"问题
- mysql
- MySQL中的锁
- MySQL存储引擎MyISAM 和 InnoDB的区别
- MySQL半同步复制
- explain 命令详解
- 索引
- 数据库事务
- MySQL和B树的那些事
- git
- github----向开源框架提交pr的过程
- 推荐博客
- linux
- 命令
- free
- 高并发
- 抢购/秒杀功能
- 算法
- 一致性Hash算法