2013-09-22 3 views
1

저는 PIC24F로 서버를 구축하려고합니다. 마이크로 칩 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(); before StackInit(); 10 초 기본합니다 TCP.C의 킵 얼라이브 논리에 디버거를 사용

    그렇지 않으면 내부 클럭 또는 외부 클럭 (T1CON.TCS) -

  • 는 응용 프로그램에 대한 올바른 TIMER1 클럭 소스를 선택합니다 최신 마이크로 칩 라이브러리 응용 TCP/IP 스택 5.42.08. [감지 TCP 클라이언트 연결 끊기]의

관련 문제