2013-09-22 59 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

可能重複(http://stackoverflow.com/questions/283375/detecting-tcp-client-disconnect) – EJP

+0

不,這是一個微芯片TCPIP協議棧的相關問題。 – blow

回答

1

檢查的幾個項目:

  • 呼叫TickInit();之前StackInit();
  • 爲應用選擇了正確的TIMER1時鐘源 - 內部或外部時鐘(T1CON.TCS)

    否則,只使用一個調試器在TCP.C存活的邏輯,這應該默認爲10秒在最新的Microchip Library for Applications TCP/IP堆棧5.42.08中。 [檢測TCP客戶端斷開]的