微芯片TCPIP保持活力不起作用
我正在尝试用PIC24F构建一个服务器 这是我正在使用的一段代码:微芯片TCPIP保持活力不起作用,tcp,keep-alive,microchip,Tcp,Keep Alive,Microchip,我正在尝试用PIC24F构建一个服务器 这是我正在使用的一段代码: 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
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实现)
谢谢检查一些项目:
- 调用TickInit();在StackInit()之前强>
- 为您的应用程序选择正确的计时器1时钟源-内部时钟或外部时钟(T1CON.TCS) 否则,只需在TCP.C中的keepalive逻辑上使用调试器,在最新的Microchip Library for Applications TCP/IP stack 5.42.08中,该调试器应默认为10秒
- 调用TickInit();在StackInit()之前强>
- 为您的应用程序选择正确的计时器1时钟源-内部时钟或外部时钟(T1CON.TCS) 否则,只需在TCP.C中的keepalive逻辑上使用调试器,在最新的Microchip Library for Applications TCP/IP stack 5.42.08中,该调试器应默认为10秒