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 sl_bind报错的问题



程序大致如下,现在出现的问题是在完成长连接之后,多次的收发数据,大概几百次左右sl_Send就会返回负值,报ERR_PRINT(SEND_ERROR);3次后跳出while,程序重新建立socket,这一次还重新能跑回sl_Send那,收发一次成功之后,会再出现sl_Send返回负值,跳出while,再重新建立socket就会在sl_bind上一直报错,ERR_PRINT(BIND_ERROR);我看过它的返回值iStatus是-99,也就是SL_EADDRNOTAVAIL这个错误。我整个程序就这里使用了g_GateWayInfo.TCP_iport这个端口,为什么会出现EADDRNOTAVAIL的错误呢?然后我现在要怎么解决这个问题?

while(1){

sLocalAddr.sin_family = SL_AF_INET;

sLocalAddr.sin_port = sl_Htons((unsigned short)g_GateWayInfo.TCP_iport);

sLocalAddr.sin_addr.s_addr = 0;

iAddrSize = sizeof(SlSockAddrIn_t);

g_TcpSockID = sl_Socket(SL_AF_INET,SL_SOCK_STREAM, 0);

if( g_TcpSockID < 0 ) {

ERR_PRINT(SOCKET_CREATE_ERROR);

}

else{

iStatus = sl_Bind(g_TcpSockID, (SlSockAddr_t *)&sLocalAddr, iAddrSize);

    if( iStatus < 0 ) {

sl_Close(g_TcpSockID);

ERR_PRINT(BIND_ERROR);

}

else{

iStatus = sl_Listen(g_TcpSockID, 0);

if( iStatus < 0 ){

sl_Close(g_TcpSockID);

ERR_PRINT(LISTEN_ERROR);

}

else{

g_TcpAcceptSockID = SL_EAGAIN;

g_TcpAcceptSockID = sl_Accept(g_TcpSockID, ( struct SlSockAddr_t *)&sAddr,

(SlSocklen_t*)&iAddrSize);

if( g_TcpAcceptSockID == SL_EAGAIN ) {

MAP_UtilsDelay(10000);

}

else if( g_TcpAcceptSockID < 0 ) {

sl_Close(g_TcpAcceptSockID);

sl_Close(g_TcpSockID);

ERR_PRINT(ACCEPT_ERROR);

}

else{

while(1){

GateWayDataRevAndProcess(&GateWayTcpRecvBuf,g_TcpAcceptSockID);

iStatus = sl_Send(g_TcpAcceptSockID, (char *)&GateWaySendBuf, sTestBufLen, 0 );

if( iStatus < 0 ) {

g_SendCnt++;

ERR_PRINT(SEND_ERROR);

if(g_SendCnt > 3){

g_SendCnt = 0;

sl_Close(g_TcpAcceptSockID);

break;

     }

}

}

}

}

}

}