Jetzt hab ich das mal selbst nachgelesen. Und ich kann mir nur zustimmen, es muss auch ein FIN vom Server kommen
Also schnell in in stack.c, in Zeile 1010 hinzugefügt:
Das wird nun natürlich auch brav gesendet und der Client antwortet dann nochmals protokollgemäß mit einem ACK. Jetzt wäre die Verbindung eigentlich korrekt beendet.
Aber da taucht das nächste Problem auf. Sendet der Client sein letzes ACK, wird daraufhin fälschlicherweise ein neuer Eintrag angelegt und der telnetd sendet erneut.
Zur Lösung des Problems habe ich einfach in stack.c :
EDIT:
ab Zeile 971:
Code: Alles auswählen
if (index >= MAX_TCP_ENTRY) //Eintrag nicht gefunden
{
DEBUG("TCP Eintrag nicht gefunden\r\n");
//tcp_entry_add (eth_buffer);// <---------------------------------------
if(tcp->TCP_HdrFlags & FIN_FLAG || tcp->TCP_HdrFlags & RST_FLAG)
{
tcp_entry_add (eth_buffer); // <---------------------------------------
result32 = htons32(tcp_entry[index].seq_counter) + 1;
tcp_entry[index].seq_counter = htons32(result32);
if (tcp_entry[index].status & FIN_FLAG)
{
tcp_entry[index].status = ACK_FLAG;
create_new_tcp_packet(0,index);
}
tcp_index_del(index);
DEBUG("TCP-Stack Eintrag gelöscht! STACK:%i\r\n",index);
return;
}
return;
}