各位大神好:
我现在在使用C6678的网口传输数据,使用6678作服务器端,走TCP协议,NDK版本为2_21_02_43 ,初始化使用的是mcsdk里的client例程里初始化的方法,在使用ndk的recv函数时,出现了一下问题:
1.查看了 NDK库函数DaemonNew,其accept返回的Socket应该是阻塞的Socket,由于我的工程对任务时间有要求,因此使用setsocketopt函数对其超时时间做了限制,设置为2us,代码如下:
struct timeval to;
to.tv_sec = 0;
to.tv_usec = 2;
setsockopt( user_s[i], SOL_SOCKET, SO_RCVTIMEO, &to, sizeof( to ) );
while(1)
{
i=recv(s,(void *)0x80000000,1460,0);
if(i>0)
{
/*其他操作*/
}
}
之后我计算了一下recv的阻塞时间,大约是1ms,将tv_usec改为10还是1ms; 不知道原因为什么,想请教一下各位。
2.由于上述时间1ms太长,因此想使用非阻塞模型,将recv的flag改为MSG_DONTWAIT, 结果recv的返回值永远都是-1,内存区也没有数据,之后用setsockopt将accept的Socket改为非阻塞,recv的flag不论是0还是MSG_DONTWAIT都收不到数据,请问这是怎么回事?NDK不支持非阻塞模型么?