当前位置: 代码迷 >> Brew >> brew udp通讯 ISOCKET_RecvFrom有关问题
  详细解决方案

brew udp通讯 ISOCKET_RecvFrom有关问题

热度:9984   发布时间:2013-02-26 00:00:00.0
brew udp通讯 ISOCKET_RecvFrom问题
先贴出我接收函数的源码如下:
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不可以使用。
  相关解决方案