Ich habe eine ungewöhnliche Situation: Ich verwende ein Linux-System in einer eingebetteten Situation (Intel-Box, die derzeit einen Kernel 2.6.20 verwendet) kommunizieren mit einem eingebetteten System, das eine teilweise unterbrochene TCP-Implementierung aufweist. So weit ich das jetzt sagen kann, erwarten sie, dass jede Nachricht von uns in einem separaten Ethernet-Frame kommt! Sie scheinen Probleme zu haben, wenn Nachrichten über Ethernet-Frames aufgeteilt werden.Ich brauche eine TCP-Option (ioctl), um Daten sofort zu senden
Wir sind im lokalen Netzwerk mit dem Gerät, und es gibt keine Router zwischen uns (nur ein Schalter).
Wir versuchen natürlich, sie zu zwingen, ihr System zu reparieren, aber das kann nicht machbar sein.
Ich habe bereits TCP_NODELAY auf meinen Sockets (ich verbinde mich mit ihnen), aber das hilft nur, wenn ich nicht versuche, mehr als eine Nachricht auf einmal zu senden. Wenn ich mehrere ausgehende Nachrichten hintereinander habe, neigen diese Nachrichten dazu, in einem oder zwei Ethernet-Frames zu enden, was Probleme auf dem anderen System verursacht.
Ich kann das Problem im Allgemeinen vermeiden, indem ich einen Timer verwende, um zu vermeiden, dass Nachrichten zu nahe zusammen gesendet werden, aber das begrenzt offensichtlich unseren Durchsatz. Außerdem, wenn ich die Zeit zu niedrig stelle, riskiere ich eine Netzwerküberlastung, die Paketübertragungen hochhält und schließlich erlaubt, dass mehr als eine meiner Nachrichten in demselben Paket gespeichert werden.
Gibt es eine Möglichkeit, dass ich sagen kann, ob der Fahrer Daten in der Warteschlange hat oder nicht? Gibt es eine Möglichkeit, den Treiber dazu zu zwingen, unabhängige Schreibaufrufe in unabhängigen Transportschichtpaketen zu senden? Ich habe die Manpages von Socket (7) und TCP (7) durchgesehen und habe nichts gefunden. Vielleicht weiß ich nicht, wonach ich suche.
Offensichtlich würde UDP ein Ausweg sein, aber ich denke nicht, dass wir das andere Ende ändern können, etwas an dieser Stelle.
Jede Hilfe sehr geschätzt.
Schöne Idee. Da die Nachrichten keine einheitliche Größe haben, kann ich leider keine MTU auswählen, die in diesem Fall eine Nachricht pro Bild sicherstellt. –