之所以有这个疑问是因为我的网络开发都是在例程的基础上进行的(这个例程是采用c代码进行配置而非XGCONF工具),初始化这些工作都已经完成,我只是做了些许修改,一直以来连接、数据收发都正常,最近需要加个检测网络断开的功能,要求在网线断开后一定时间内可以检测并恢复连接,我的方法是假设若一定时间内没有数据传送就认为网络已断开,于是需要在当前数据发送任务中对send函数设置超时,具体设置如下:
struct timeval sndTOut;
sndTOut.tv_sec=0;
sndTOut.tv_usec=10*1000;
if(0==setsockopt(clientSocket,SOL_SOCKET,SO_SNDTIMEO,&sndTOut,sizeof(sndTOut)))
printf("Set Send Timeout 10ms! \n");
运行后显示设置成功,但是拔掉网线后,send函数却一直处于阻塞状态,设置的超时无效。我猜测是不是跟这个配置中的定时器有关系,NDK中的函数涉及到超时设置的,他的时间基准是不是都建立在这个初始化时候创建的定时器上,但是我在例程中找不到创建这个定时器的相关代码,所以我怀疑可能是初始配置中没有创建这个定时器,导致超时设置无效。盼高人指点迷津!
Nancy Wang:
NDK的socket timeout是基于BIOS system tick time,检查一下.cfg文件中应该有关于tick time的配置。
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
Clock.timerId = 1;
e2e.ti.com/…/269179
这个帖子也可以参考一下。
e2e.ti.com/…/496848
user5338487:
回复 Nancy Wang:
非常感谢您的指导!我的工程中没有用到clock模块,所以没有配置过它,请问这是不是意味着所有的超时设置都不起作用?还是说系统时钟会按照默认配置自动生成。
Nancy Wang:
回复 user5338487:
您用的例程上有配置吗?没有配置应该是不会自动生成的。
user5338487:
回复 Nancy Wang:
您好!我把系统时钟周期配置为1ms,调用Clock_getTicks()查看时钟计数一直在增长,在任务中调用Sleep()函数都正常,但是send的超时还是没有效果,还是一直阻塞。