PHP 套接字链接,能否设置时间?

mingky 2012-05-25 11:22:35

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$IP=$row['IP'];
$connection = socket_connect($socket, $IP, 2012);

貌似默认是30秒,要是连不上的话等的时间太长了,能否设置其只有10秒?
...全文
99 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2012-05-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

引用 1 楼 的回复:

在线手册的用户注释区其实有很多有用的参考,你可以在 http://php.net/manual/en/function.socket-get-option.php 里搜索 timeout,因为这个问题很普遍,所以肯定会有。
如果你懒的动手,摘录一段代码给你

SO_SNDTIMEO Reports the timeout value specifying ……
[/Quote]
当然没用,那是send timeout, 不是connect timeout.

设置socket为非阻塞,然后调用connect,检查返回值与errno,如果errno == EINPROGRESS,那么使用select 监听socket写事件, 设置select 10秒超时。

select返回:
1,socket可写,那么getsockopt SO_ERROR获取错误,没错误则连接完成。
2,select超时返回,那么关闭socket。

因为PHP是C写的,接口和源生API基本一样,变变名字而已:

1,dio_fcntl 是 fcntl的别名,用来设置非阻塞, 但是在socket目录下已经直接提供了用来修改socket阻塞/非阻塞的接口:
socket_ set_ block
socket_ set_ nonblock
2,socket的相关函数你已经使用了。
3,select也是有php实现的,socket_select
4,getsockopt我查了之后,也是有实现的,上面同学也用到了:socket_get_option

cysolo 2012-05-26
  • 打赏
  • 举报
回复
可以这样,把连接的php代码放到单独的一个文件中,用AJAX访问,结果放到一个div中
mingky 2012-05-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

在线手册的用户注释区其实有很多有用的参考,你可以在 http://php.net/manual/en/function.socket-get-option.php 里搜索 timeout,因为这个问题很普遍,所以肯定会有。
如果你懒的动手,摘录一段代码给你

SO_SNDTIMEO Reports the timeout value specifying the amount of ti……
[/Quote]
我试过,感觉没效果啊,还是得等老长时间
改一下昵称 2012-05-25
  • 打赏
  • 举报
回复
在线手册的用户注释区其实有很多有用的参考,你可以在 http://php.net/manual/en/function.socket-get-option.php 里搜索 timeout,因为这个问题很普遍,所以肯定会有。
如果你懒的动手,摘录一段代码给你

SO_SNDTIMEO Reports the timeout value specifying the amount of time that an output function blocks because flow control prevents data from being sent. array. The array will contain two keys: sec which is the seconds part on the timeout value and usec which is the microsecond part of the timeout value.
To set a socket timeout value (assuming you've set it blocking) use:

socket_set_option(
$socket,
SOL_SOCKET, // socket level
SO_SNDTIMEO, // timeout option
array(
"sec"=>10, // Timeout in seconds
"usec"=>0 // I assume timeout in microseconds
)
);

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧