先贴出我接收函数的源码如下:
static void NS_UDPDNSReceiveData( CGPSApp *pMe )
{
INAddr ipVal;
INPort portVal;
int nRead;
MEMSET( pMe->g_naviRealTraffic.pReceiveBuf, 0, DATABUF_LENGTH );
nRead = ISOCKET_RecvFrom( pMe->pISocket, pMe->g_naviRealTraffic.pReceiveBuf, DATABUF_LENGTH, ISOCKET_FLAG_SENDTO_URGENT | ISOCKET_FLAG_SENDTO_WAKEUP,
&ipVal, &portVal );
if ( nRead == AEE_NET_ERROR )
{
NS_ReleaseObj( pMe->pISocket ); //关闭套接字
}
else if ( nRead == 0 )
{
NS_ReleaseObj( pMe->pISocket );
}
else if ( nRead == AEE_NET_WOULDBLOCK )
{
ISOCKET_Readable( pMe->pISocket, (PFNNOTIFY)NS_UDPDNSReceiveData, pMe );
}
else
{
NavLog( "NS_UDPDNSReceiveData Success!!! \n" );
}
}
现在遇到的问题是:ISOCKET_RecvFrom返回AEE_NET_WOULDBLOCK后,我调用ISOCKET_Readable,然后设置ISOCKET_Readable的回调参数重新接收。。。但是我调试的时候返回AEE_NET_WOULDBLOCK后,整个NS_UDPDNSReceiveData就结束了,而不是再次的接收啊???
很急很急,忘做过类似问题的帮忙分析下。。。。
想请教一个问题:UDP的话,只要创建了套接字,然后只管发送接收数据就行,不用绑定连接吧?
------解决方案--------------------------------------------------------
在写之前需要Bind,写成功读取的时候,不需要要绑定。遇到Block是,需要回调读取。
------解决方案--------------------------------------------------------
改为nRead = ISOCKET_RecvFrom( pMe->pISocket, pMe->g_naviRealTraffic.pReceiveBuf, DATABUF_LENGTH, 0,
&ipVal, &portVal );在recvfrom时flag不可以使用。