伙伴们:
使用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 */
代码有问题?