Homepage

  • Projekte
  • Shop
  • Forum
Erweiterte Suche
  • Schnellzugriff
    • Unbeantwortete Themen
    • Aktive Themen
    • Suche
  • FAQ
  • Anmelden
  • Registrieren
  • Foren-Übersicht
  • Suche

Frage zu telnetd

Ethernet Mega32 Experimentierboard
Antworten
  • Druckansicht
Erweiterte Suche
3 Beiträge • Seite 1 von 1
Thomas
Beiträge: 655
Registriert: 01.03.2004, 00:41:10

Frage zu telnetd

  • Zitieren

Beitrag von Thomas » 22.02.2009, 21:18:08

Hi,
wenn ich die Verbindung zu telnetd beende, bleibt diese leider im Status FIN-WAIT-2 stecken.

Der telnetd-Server Antwortet auf ein FIN mit ACK. Aber sollte dann nicht auch noch ein FIN vom Server kommen, damit die Verbindung clientseitig den Status FIN-WAIT-2 verlassen kann?

Danke,
Thomas
Nach oben

Thomas
Beiträge: 655
Registriert: 01.03.2004, 00:41:10

Re: Frage zu telnetd

  • Zitieren

Beitrag von Thomas » 22.02.2009, 23:49:34

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:

Code: Alles auswählen

tcp_entry[index].status =  ACK_FLAG | FIN_FLAG;
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;
	}
Nach oben

Thomas
Beiträge: 655
Registriert: 01.03.2004, 00:41:10

Re: Frage zu telnetd

  • Zitieren

Beitrag von Thomas » 25.02.2009, 19:37:36

Hat Uli in den Quellen korrigiert...
Nach oben

Antworten
  • Druckansicht

3 Beiträge • Seite 1 von 1

Zurück zu „ETH_M32_EX“



  • Foren-Übersicht
  • Alle Zeiten sind UTC+01:00
  • Alle Cookies löschen

Powered by phpBB® Forum Software © phpBB Limited

Deutsche Übersetzung durch phpBB.de

Datenschutz | Nutzungsbedingungen

 

 

sitemap  |    |  datenschutz   |  impressum