2013-09-22 4 views
1

Я пытаюсь построить сервер с PIC24F.Microchip TCPIP не работает

Это кусок кода я isuing:

switch(TCPServerState) { 
      case SM_HOME: 
       // Allocate a socket for this server to listen and accept connections on 
       socket.Socket = TCPOpen(0, TCP_OPEN_SERVER, SERVER_PORT, TCP_PURPOSE_GENERIC_TCP_SERVER); 
       if(socket.Socket != INVALID_SOCKET) { 
        TCPServerState = SM_LISTENING; 
       } 
       break; 
      case SM_LISTENING: 
       // See if anyone is connected to us 
       //if(TCPIsConnected(socket.Socket)) { 
       if(!TCPWasReset(socket.Socket)){ 
        if(socket.Connected == 0) { 
         socket.Connected = 1; 
         printf("Socket is CONNECTED: %d\n", socket.Socket); 
        } 
        uint16_t avaible = TCPIsGetReady(socket.Socket); 
        // Some stuff 
       } 
       else if(socket.Connected == 1){ 
        printf("Socket RESET: %d\n", socket.Socket); 
        TCPServerState = SM_CLOSING; 
       } 
       break; 
      case SM_CLOSING: 
       // Close the socket connection. 
       socket.Connected = 0; 
       TCPClose(socket.Socket); 
       TCPServerState = SM_HOME; 
       printf("Socket is CLOSED: %d\n", socket.Socket); 
       break; 
     } 

Все работает отлично, если я закрою сокет клиента правильно, но если я отключить сетевой кабель я не в состоянии обнаружить отключение и мой код делает не закрывайте сокет, потому что TCPWasReset все еще FALSE (или TCPIsConnected по-прежнему TRUE).

Итак, как я могу обнаружить отключение сетевого кабеля (без добавления программного обеспечения keep_alive)?

Благодаря

+0

возможно дубликат [TCP клиента обнаруживать Disconnect] (http://stackoverflow.com/questions/283375/detecting-tcp-client-disconnect) – EJP

+0

Нет это стек микрочип TCPIP связанный с этим вопрос. – blow

ответ

1

Проверьте несколько пунктов:

  • Вызов TickInit(); до StackInit();
  • Выберите правильный источник TIMER1 часов для вашего приложения - внутренние часы или внешних часы (T1CON.TCS)

    В противном случае, просто использовать отладчик оставайся в живых логики в TCP.C, который должен по умолчанию 10 секунд в последней библиотеке Microchip для приложений TCP/IP стек 5.42.08. не

Смежные вопросы