2013-09-22 57 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客户端断开]的