当前位置: 技术问答>linux和unix
socket阻塞的问题
来源: 互联网 发布时间:2017-01-06
本文导语: 各位大虾,小弟在调试8688的wifi过程当中发现,连接ap时发送psk密码的命令会延时很长时间。然后一路跟踪,发现在wpa_supplicant的代码中有这么一段: if (send(ctrl->s, _cmd, _cmd_len, 0) s, &rfds); res = select(ctrl->s + 1, &rf...
各位大虾,小弟在调试8688的wifi过程当中发现,连接ap时发送psk密码的命令会延时很长时间。然后一路跟踪,发现在wpa_supplicant的代码中有这么一段:
if (send(ctrl->s, _cmd, _cmd_len, 0) s, &rfds);
res = select(ctrl->s + 1, &rfds, NULL, NULL, &tv);//阻塞发生在这里 if (FD_ISSET(ctrl->s, &rfds)) {
res = recv(ctrl->s, reply, *reply_len, 0);
我想请问大侠们,这个阻塞的原因是什么呀?如何继续跟踪问题呢?谢谢!!
if (send(ctrl->s, _cmd, _cmd_len, 0) s, &rfds);
res = select(ctrl->s + 1, &rfds, NULL, NULL, &tv);//阻塞发生在这里 if (FD_ISSET(ctrl->s, &rfds)) {
res = recv(ctrl->s, reply, *reply_len, 0);
我想请问大侠们,这个阻塞的原因是什么呀?如何继续跟踪问题呢?谢谢!!
|
select模型是异步的,理论上不会出现这种问题。
|
这里select应该没有问题得啊 关键socket 的另一方相应的时间,你用其他设备测试过没有呢?
|
这里的select是判断是否有数据可读,没有数据时会阻塞
至于为什么没有数据,就不知道了
至于为什么没有数据,就不知道了
|
人家不理你,你收不到数据呗,
|
那你查一下,为什么没有给你的socket发送数据啊!
|
1. 别人不理你
2. 是不是Android这个宏起作用了,把时间搞的短点
#ifdef ANDROID
tv.tv_sec = 10;
#else
tv.tv_sec = 2;
2. 是不是Android这个宏起作用了,把时间搞的短点
#ifdef ANDROID
tv.tv_sec = 10;
#else
tv.tv_sec = 2;
|
res = select(ctrl->s + 1, &rfds, NULL, NULL, &tv);
你这里使用了tv,指示当没有文件描述符可用时要等待tv指定的时间,即
tv.tv_sec, 你可以 tv.tv_sec = 0;
这样不管文件描述符是否有变化,都立刻返回
你这里使用了tv,指示当没有文件描述符可用时要等待tv指定的时间,即
tv.tv_sec, 你可以 tv.tv_sec = 0;
这样不管文件描述符是否有变化,都立刻返回
|
按照你的代码,android 下面, select 如果没有读文件就需,就需要等待 10s