各位好,我是用官方的client例程来调试的,NDK启动函数里创建了以下几个服务:
hEcho = DaemonNew( SOCK_STREAMNC, 0, 7, dtask_tcp_proc,//dtask_tcp_echo,
OS_TASKPRINORM, OS_TASKSTKNORM, 0, 3 );
hEchoUdp = DaemonNew( SOCK_DGRAM, 0, 7, dtask_udp_proc,//dtask_udp_echo,
OS_TASKPRINORM, OS_TASKSTKHIGH, 0, 1 );//OS_TASKSTKNORM,换成更大的堆栈大小
hData = DaemonNew( SOCK_STREAM, 0, 1000, dtask_tcp_datasrv,
OS_TASKPRINORM, OS_TASKSTKNORM, 0, 3 );
hNull = DaemonNew( SOCK_STREAMNC, 0, 1001, dtask_tcp_nullsrv,
OS_TASKPRINORM, OS_TASKSTKNORM, 0, 3 );
hOob = DaemonNew( SOCK_STREAMNC, 0, 999, dtask_tcp_oobsrv,
OS_TASKPRINORM, OS_TASKSTKNORM, 0, 3 );
对于上面创建的第一个tcp的回调函数dtask_tcp_echo,里面设置了socket的参数,然后收到数据,再发送出去,最后会fdClose( s )掉这个socket。
to.tv_sec = 5;
to.tv_usec = 0;
setsockopt( s, SOL_SOCKET, SO_SNDTIMEO, &to, sizeof( to ) );
setsockopt( s, SOL_SOCKET, SO_RCVTIMEO, &to, sizeof( to ) );
…
fdClose( s );
我在上位机用网络助手发送数据,发现进行网络连接后,会进入到这个回调函数,如果在5s内部发数,这个函数运行完成就会关闭socket,连接就断开了。收到数,发完,5s后内没数据了,也会断开。
现在我的问题是,我想要tcp一直处于连接状态,于是我把fdclose断开了,确实上位机显示一直在连接状态,但是因为这个回调函数是只有在对tcp创建连接的时候才会进来,那之后我再发送数据,我就进不来这个回调函数了,就没有办法接收数据了。我想请问一下,应该怎么处理?这个回调函数可以改动成只要收到数据就进入嘛?或者是我得另外创建一个线程专门监听这个socket?
Shine:
请关注下面e2e上的回复。
e2e.ti.com/…/886464