I have an unusual situation: I use the Linux system in the embedded situation (Intel box currently using the 2.6.20 kernel), which should interact with the embedded system, which has a partially broken TCP implementation. As far as I can tell right now, they expect each message from us to appear in a separate Ethernet frame! They seem to have problems when messages are split into Ethernet frames.
We are on the local network with the device, and there are no routers between us (just a switch).
We, of course, are trying to get them to fix their system, but this may not be possible.
I already set TCP_NODELAY on my sockets (I connect to them), but this only helps if I am not trying to send more than one message at a time. If I have several outgoing messages per line, these messages usually fall into one or two Ethernet frames, which causes problems on another system.
As a rule, I can avoid the problem by using a timer so as not to send messages too close to each other, but this clearly limits our bandwidth. In addition, if I turn off the time too low, I risk overloading the network that supports packet transmission and ending with the fact that it allows you to send more than one message to the same packet.
Is there any way to determine if the driver has data in the queue or not? Is there a way to get the driver to send independent write calls to independent transport layer packets? I looked at the socket pages (7) and tcp (7) and I did not find anything. Maybe I don't know what I'm looking for.
Obviously, UDP will be one way, but then again, I don't think we can get the other end to change anything at this point.
Any help is greatly appreciated.
linux embedded tcp
Michael kohne
source share