Hallo, ich hänge gerade ein bißchen an den Innereien von OpenMCP und möchte mich mal umhören, bevor ich das Rad mangels Wahrnehmung neu erfinde... :( Ich möchte unter OpenMCP (Pollin AVR-NetIO mit ATmega644) die NetBIOS Namensauflösung implementieren. Speicher ist momentan nicht das Problem, sondern das API. Ich habe einen UDP-Server (UDP_ListenOnPort()). Dieser prüft zyklisch, ob neue Daten angekommen sind (UDP_GetByteInBuffer()), strikt sein Antwortpaket und schickt es zurück an den Empfänger. Und genau das ist mein Problem: Die Sende-Funktion im Stack (UDP_SendPacket()) sendet zurück an die Adresse, welche in der socket-Struktur hinterlegt wird. Die Initialisierung der Struktur erfolgt am Anfang mit ListenOnPort(). Wie finde ich beim Empfang heraus, von wem das Paket kommt? Der UDP-Header wird auf den 1. Blick beim Empfang nicht abgespeichert (udp()). Der Eth-Puffer ist beim Pollen (THREAD_xxx) je nicht mehr unbedingt aktuell. Übersehe ich etwas? Mache ich etwas grundsätzlich falsch? Wie ist denn das Konzept gedacht? MfG Andy
:
Verschoben durch User
udp() ruft UDP_GetSocket() auf, und da drin passierts, da werden source port/IP vom Empfang in die Sockentabelle übernommen.
Yep, stimmt! ;) Danke für den Hinweis! Das heißt dann im Umkehrschluß, daß ich den Socket nach jedem Empfang komplett schließen muß (CloseSocket()), weil ja die Initialisierung nicht zurückgesetzt wird auf generellen Empfang. In den Tiefen des Stacks möchte ich von der Server-App nicht heruminitialisieren. Wäre zwar technisch möglich, aber irgendwie unschön. :) Nochmals Danke! Andy
da ist noch eine Funktion UDP_BackToListen(int socket) die wohl dafür gedacht, die setzt die entsprechenden Felder auch zurück.
Ops, da gibt es wohl mittlerweile eine neue Version von OpenMCP. Mein Code hat die Funktion noch nicht - ist auch schon 1 Jahr in Arbeit (bzw in der Schublade). Sollte aber schnell nachgerüstet sein.
ich hatte das im April vom SVN ausgecheckt, habe aber auch nicht viel damit gemacht, ausser es auf dem NetIO zum Laufen zu bekommen. Aber das BackToListen braucht man evtl. gar nicht, wenn für die UDP Bearbeitung ein Callback registriert ist werden nach dem Callback Aufruf in udp() die Destinationfelder auch schon rückgesetzt. So eine echo Anwendung müsste also ad Hoc funktionieren (ein Beispiel für die udp Nutzung habe ich in apps/CAN gesehen).
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.