Can't seem to find anywhere informations about this, but, is TIdUDPServer.OnRead event passing everything that comes in to the AData array or not?
According to WireShark readings, I'm missing 42 bytes of data; While I should be getting 572 bytes of data on each reading, the AData size is always 530, and seems like always the same bytes are missing.
The device that sends data is broadcasting it, and I can get everything I need except for 2 bytes, which seems to be 2 of those that are missing.
Any hints on this one?
Edit:
I should mention that these are the very first 42 bytes; Everything afterwards is received fine;
The
OnUDPRead
event passes everything the socket receives from the OS. UDP operates on messages. Unlike TCP, a UDP read is an all-or-nothing operation, either a whole UDP message is read or an error occurs, there is no in-between.If you are missing data, then either the OS is not providing it (such as if it belongs to the UDP and/or IP headers), or you are not reading data from the
AData
parameter correctly. If you think this is not the case, then you need to update your question to show your actualOnUDPRead
handler code, an example WireShark dump showing the data being captured from the network, and the data that is making it to yourOnUDPRead
handler.Update: The OS does not provide access to the packet headers (unless you are using a RAW socket, which
TIdUDPServer
does not use, but that is a whole other topic of discussion). TheAData
parameter of theOnUDPRead
event provides only the application data portion of a packet, as that is what the OS provides. You cannot access the packet headers.That being said, you can get the packet's source IP:Port, at least, via the
ABinding.PeerIP
andABinding.PeerPort
properties of theOnUDPRead
event. However, there is no way to retrieve the other packet header values (nor should you ever need them in most situations), unless you sniff the network yourself, such as with a pcap library.