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.

TMS320C6748: NDK的send函数在另外一个线程工作一段时间会自动掉线,并且pc客服端ping不同服务器

Part Number: TMS320C6748

各位大佬,小弟遇到如下的问题,麻烦大佬们解惑。这个是我在官方的TCP例程上面修改的程序的一个tcp例程,把发送放在了另外一个线程里面,刚开始PC客服端能够正常接收和发送数据给dsp服务器,但是这样连续工作过半分钟左右吧,就会自动掉线,并且pc客服端ping不同服务器,我修改过ndk里面的接收和发送缓冲区大小,并没有改变这一情况

void tcp_test_fun(UArg a0, UArg a1)//发送线程
{
     while(1)
     {
         if(kkkk==99)
         {
             SOCKET s = tcp_socket; // 从全局套接字TcpSocket获取套接字s的副本
             Task_sleep(1);
             if(Semaphore_getCount(sem) == 0);
             Semaphore_pend(sem, BIOS_WAIT_FOREVER);
             System_flush();
             if(mmmm==99)
             {
                 fdOpenSession(TaskSelf());
                 send(s, &Title, 1, 0);
                 recvncfree(hBuffer);
                fdCloseSession(TaskSelf());
                 mmmm=0;
             }
             Semaphore_post(sem);
             System_flush();
             // 休眠以允许低优先级任务执行
             Task_sleep(1);
//             kkkk=0;
         }
     }

}
/****************************************************************************/
/*                                                                          */
/*              回调函数 TCP Server Daemon                                  */
/*                                                                          */
/****************************************************************************/
int TcpTest(SOCKET s, UINT32 unused)//tcp的回调函数
{

    struct timeval to;
    int i;
    char *pBuf;

    // 配置超时时间 5s
    to.tv_sec  = 3600*24;
    to.tv_usec = 0;
    setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, &to, sizeof(to));
    setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &to, sizeof(to));
    // 发送一个固定字符串 长度 38
    System_flush();
    kkkk=99;

    for(;;)
    {
        i = (int)recvnc(s, (void **)&pBuf, 0, &hBuffer);
        // 回传接收到的数据
        if(i > 0)
        {
            tcp_socket=s;
            Title=Title+1;
            mmmm=99;
//            kkkk=99;
//                 if(mmmm==0)
//                 {
//                     if(send(tcp_socket, Title, 5, 0 ) < 0)
//                          break;
//                     mmmm=99;
//                 }
            System_flush();
            recvncfree(hBuffer);
        }
        else
        {
            break;
        }
    }
    fdClose(s);

    return(0);
}