CC3100 TCP Socket NonBlocking 报错
伙伴们:
使用CC3100 TCP Socket 作为Client,以非阻塞连接server,server端监听显示已经连接成功,但是CC3100函数调用结果返回为失败,返回值为SL_EALREADY,如果忽略该返回值,socket能够正常收发,但是现在不能忽略这个返回值。我改怎么办?贴出代码~
_i32 SimpleLink_BsdTcpClient(_u32 ipAddr,_u16 Port,_u16 *socketID)
{
SlSockAddrIn_t Addr;
SlSockNonblocking_t enableOption;
_u16 AddrSize = 0;
_i16 SockID = 0;
_i16 Status = 0;
Addr.sin_family = SL_AF_INET;
Addr.sin_port = sl_Htons((_u16)Port);
Addr.sin_addr.s_addr = sl_Htonl((_u32)ipAddr);
AddrSize = sizeof(SlSockAddrIn_t);
InitializeAppVariables();
SockID = sl_Socket(SL_AF_INET,SL_SOCK_STREAM, 0);
if( SockID < 0 )
{
CLI_Write(" [TCP Client] Create socket Error \n\r");
ASSERT_ON_ERROR(SockID);
}
enableOption.NonblockingEnabled = 1;
sl_SetSockOpt(SockID,SL_SOL_SOCKET,SL_SO_NONBLOCKING, (_u8 *)&enableOption,sizeof(enableOption)); // Enable/disable nonblocking mode
Status = sl_Connect(SockID, ( SlSockAddr_t *)&Addr, AddrSize);
// if( Status < 0 )
// {
// sl_Close(SockID);
// CLI_Write(" [TCP Client] TCP connection Error \n\r");
// ASSERT_ON_ERROR(Status);
// }
*socketID=SockID;
// Status = sl_Close(SockID);
ASSERT_ON_ERROR(Status);
return SL_SUCCESS;
}
sl_SetSockOpt 设置为非阻塞,Status = sl_Connect(SockID, ( SlSockAddr_t *)&Addr, AddrSize); 连接server,server显示连接成功,并且能够正常通信,但是
返回值Status=SL_EALREADY,该值在Sokcet.h中的意义:#define SL_EALREADY (-114) /* Non blocking connect in progress, try again */
代码有问题?
忘记说明了,以阻塞方式使用Socket 连接Server是没有问题的。
iStatus = -1; while( iStatus < 0 ) { iStatus = sl_Connect(iSockID, ( SlSockAddr_t *)&sAddr, iAddrSize); if( iStatus == SL_EALREADY) { MAP_UtilsDelay(10000); } }
但是我Socket已经连接成功了,并且能够正常收发数据,如果收忽略该错误按照上面流程重新连接,尽管成功还是SL_EALREADY错误。
我用的STM32F103,时钟72M,是不是哪里设置超时太短了?导致连接成功还是超时?
调用sl_connect每次返回的都是错误值吗?
还是第一次错误值,后面正常了
每次连接连接状态返回值都显示错误,但是能够正常通信。
每次连接都报这个错误
