Part Number:OMAP-L138
尊敬的工程师的您好
在使用NIMU_emacExampleClient_lcdkOMAPL138ARMBiosExampleProject网络例程时遇到一个问题想向您们请教,将该例程移植到一个多任务的sys/bios上运行,例程运行正常,回调函数逻辑如下所示:
为了保持长连接,我将回调函数中的timeVal.tv_sec参数赋值为-1,这使得recvnc函数在没有收到数据时一直阻塞,无法进入到后续的发送,我想请问一下如果要在保持长连接并且未收到任何数据的情况下实现主动发送某一个数据,要如何更改我的回调函数,期待您的回复!
Nancy Wang:
保持长连接可以试一下使用keepalive。
www.ti.com/…/spru524k.pdf
,
Dan Jackey:
使用keepalive保持长连接相当于把timeVal.tv_sec置为72000s(两个小时),就相当于说如果没有收到数据,按照例程的逻辑会在recnc函数处等待2个小时断开连接,只有收到数据才能进入到发送,目前我主要想请教的是在没有收到数据的情况下,我主动向外发送数据需要如何更改,我试过将判断接收的语句屏蔽直接发送,用抓包工具看了发现发送并没有成功
,
Nancy Wang:
尝试改成非阻塞模式试一下,如果返回值错误(-1),再主动发送。
,
Dan Jackey:
保证长连接使用KEEPALIVE,非阻塞模式使用SO_BLOCKING,设置如上图所示,设置后跑程序用网络助手去链接发现刚连接上就断了,这样看非阻塞模式和长连接是矛盾的吗?
,
Nancy Wang:
这两者不矛盾。再抓包看看。