This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC3200 UDP数据接收问题



//打开UDP socket:
int WIFI_OpenUdpSocket(unsigned short Port)
{
int iStatus;
int iAddrSize;

//打开发送socket:
SockID = sl_Socket(SL_AF_INET,SL_SOCK_DGRAM, 0);
if( SockID < 0 )
{
// error
ASSERT_ON_ERROR(SOCKET_CREATE_ERROR);
}

//绑定本地端口:
sLocalAddr.sin_family = SL_AF_INET;
sLocalAddr.sin_port = sl_Htons(Port);
sLocalAddr.sin_addr.s_addr = 0;
iAddrSize = sizeof(SlSockAddrIn_t);
iStatus = sl_Bind(SockID, (SlSockAddr_t *)&sLocalAddr, iAddrSize);
if( iStatus < 0 )
{
// error
sl_Close(SockID);
ASSERT_ON_ERROR(BIND_ERROR);
}

return SUCCESS;
}

//UDP接收数据:
int WIFI_UdpRecieve(char *buf, int Len, int Timeout)
{
int iStatus = -1;
SlSockAddrIn_t sAddr;
int iAddrSize;

//设置接收超时:
struct SlTimeval_t timeVal;
timeVal.tv_sec = Timeout; // Seconds
timeVal.tv_usec = 0; // Microseconds. 10000 microseconds resolution
sl_SetSockOpt(SockID,SL_SOL_SOCKET,SL_SO_RCVTIMEO, (_u8 *)&timeVal, sizeof(timeVal));


iStatus = sl_RecvFrom(SockID, buf, Len, 0,
( SlSockAddr_t *)&sAddr, (SlSocklen_t*)&iAddrSize );

上面代码设计意图是,一次性创建一个socket,绑定本地端口,SockID是全局变量,供以后接收数据函数使用,

问题如下:

1)sl_RecvFrom始终返回-2

2)如果合并上面两个函数,就是把sl_RecvFrom直接放在WIFI_OpenUdpSocket函数里面,是可以接收数据的,难道每次接收都要打开sock,bind,recv这样连续操作吗?