CC3000 rec()阻塞问题
您好:
cc3000 在接收数据的时候,用的是阻塞,但是过了一段时间,server并没有发送数据,但是跳出了阻塞状态,这个问题是怎么回事儿?如何解决?
谢谢!
RECV的返回值是多少?
返回值是-57
返回值是-57
如果你的recv没有时间限制的话,那就是socket断掉了,可以抓一下空口的数据包看一下。
socket断掉的原因是一段时间没有数据的话,cc3000会自动断开连接吗?时间限制该如何设置那?
你把socket的那段代码贴上来看一下。
代码:
void connectSocket(long * Socket)
{
creatAndOpenSocket(Socket);
firstTimeConnected=NotFirstTimeConnect ;
SocketConnected=-1;
// the family is always AF_INET
tSocketAddr.sa_family = AF_INET;
// the destination port
tSocketAddr.sa_data[0] = (ClientPort)>>8;
tSocketAddr.sa_data[1] = (unsigned char)(ClientPort);
// the destination IP address
tSocketAddr.sa_data[2] = ServerIPaddress[0];
tSocketAddr.sa_data[3] = ServerIPaddress[1];
tSocketAddr.sa_data[4] = ServerIPaddress[2];
tSocketAddr.sa_data[5] = ServerIPaddress[3];
while(SocketConnected==-1)
{
SocketConnected=connect(*Socket,&tSocketAddr,sizeof(sockaddr));
if(SocketConnected==0)
{
turnLedOn(6);
}
else
{
turnLedOn(6);
__delay_cycles(600000);
turnLedOff(6);
__delay_cycles(600000);
}
}
}
void creatAndOpenSocket(long * Socket)
{
while ((ulCC3000DHCP == 0) || (ulCC3000Connected == 0))
{
__delay_cycles(1000);
}
long theSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
Socket=&theSocket;
}