Hallo,
ich steuere einen W5100 Ethernet-Controller mit einem AT91SAM7X256 an.
Ich kann ohne Probleme seine Register schreiben und lesen. Der W5100
reagiert auch richtig auf ARPs und Pings. Aber wenn eine TCP-Verbindung
eingehen will, bricht er immer ab.
In Wireshark kann ich immer sehen, dass mein Recher ein TCP-Paket mit
einem SYN-Flag schickt und das Board in der Antwort das RST-Flag gesetzt
hat.
Der Code meines TCP-Servers sieht so aus:
Hallo,
wenn in TCP auf ein SYN mit einem RST geantwortet wird deutet das darauf
hin auf den Port kein Listener sich befindet. Lauscht dein Server auf
einem Port. Ich sehe leider nicht die Initialisierung dafür. HTTP-Server
lauschen z.B. auf Port 80. Schau mal in Wikipedia unter TCP und HTTP
nach.
CA Dirk
Nein. Das Netzwerk arbeitet schpon richtig. Was ich meinte ist, wo sagst
du deinem Server auf welchen TCP-Port er reagieren soll. Das ist
wichtig, das TCP nach dem Portprinzip arbeitet. Von diesen Port wird
meistens auch das Protokoll abgeleitet, wie in deinem Fall HTTP für
Webserver.
Du müsstest in diesem Fall also erst mal festlegen auf welchen TCP-Port
er Verbindungen annehmen soll. Und dann kannst du abfragen ob auf diesen
Port eine neue Verbindung eingegangen ist und diese dann ensprechend
bearbeiten.
CA Dirk
Danke für eure Zeit.
Die erste Initialisierung habe ich da jetzt nicht hingeschrieben, aber
sie sieht genauso aus, wie der Code beim Neueinrichen, also wie bei case
SOCK_CLOSED:
1
socket(ch,Sn_MR_TCP,80,0x00);
2
listen(ch);
Also: TCP, Port 80, listen
Und diese Errata bezieht sich anscheinend nur auf UDP.
Ich bin nochmal alle Registerbeschreibungen durchgegangen. Im
Socket-Mode-Register habe ich dann noch ein Bit gesetzt, was "Use No
Delayed ACK" heißt. Jetzt habe ich schon mal zwei bis drei
Drei-Wege-Handshakes und erst danach die RSTs.
Vielleicht machten aber auch andere Tasks in diesem OS Ärger. Kann es
sein, dass der Wiznet einfach ein RST zurückschickt, wenn die Daten nach
x ms nicht aus dem RX-Buffer gelesen wurden?
Hi,
ich hab ein ähnliches Problem,
bei mir werden Daten zum Easy-TCP/IP-Server gesendet, und die kommen
auch zu 70% an. Aber ab und zu geht das Wiznet-Teil gleich in
Close_Wait-Stellung wenn das Paket reinkommt. Ich hab auch die
Vermutung, dass man in einer bestimmten Zeit den Buffer auslesen muss.
Sonst bricht das Wiznet die Verbindung ab.
Hast du vielleicht diesbezüglich etwas herausgefunden?