|
Prev: Using ATL::CString in old makefile projects
Next: Allocate and De-allocate in Multi-DLL Program
From: Roshan on 15 May 2008 19:13 To Any Whom Can Answer, Hello. I am using Microsoft's Visual C++ 6.0 UDP application (msocudp) to retrieve packets from a device that is connected to our network. The problem is the UDP application will not receive all the packets from the device. I even used Ethereal (packet sniffer) program to ensure the packets arrive at my computer and they definitely do! So I'm stumped as to why the OnReceive() callback function in the UDP socket code doesn't get invoked for all the packets that arrive. For example, for 10 packets that may be sent by the device, the UDP application would only receive 9 packets (i.e. OnReceive() only gets called 9 times instead of 10). Please provide any help, if you know the answer. Regards, Roshan Exeltech Software Developer
From: Igor Tandetnik on 15 May 2008 20:45 "Roshan" <roshan(a)exeltech.com> wrote in message news:05455473-b89e-42ec-b1f8-bc11cb0cdc99(a)24g2000hsh.googlegroups.com > So I'm stumped as to why the OnReceive() callback function in the UDP > socket code doesn't get invoked for all the packets that arrive. For > example, for 10 packets that may be sent by the device, the UDP > application would only receive 9 packets (i.e. OnReceive() only gets > called 9 times instead of 10). Datagrams arrive faster than you read them. If a datagram arrives while you haven't yet retrieved a previous one, it's dropped on the floor. Realize that UDP protocol is inherently unreliable. Datagrams can get lost, duplicated (the same datagram arriving more than once), and/or received out of order. It is up to the application to correct for this. -- With best wishes, Igor Tandetnik With sufficient thrust, pigs fly just fine. However, this is not necessarily a good idea. It is hard to be sure where they are going to land, and it could be dangerous sitting under them as they fly overhead. -- RFC 1925
From: Scott McPhillips [MVP] on 15 May 2008 20:57 "Roshan" <roshan(a)exeltech.com> wrote in message news:05455473-b89e-42ec-b1f8-bc11cb0cdc99(a)24g2000hsh.googlegroups.com... > To Any Whom Can Answer, > > Hello. I am using Microsoft's Visual C++ 6.0 UDP application > (msocudp) > to retrieve packets from a device that is connected to our network. > The problem is the UDP application will not receive all the packets > from the device. > > > I even used Ethereal (packet sniffer) program to ensure the packets > arrive at my computer and they definitely do! > > > So I'm stumped as to why the OnReceive() callback function in the UDP > socket code doesn't get invoked for all the packets that arrive. For > example, for 10 packets that may be sent by the device, the UDP > application would only receive 9 packets (i.e. OnReceive() only gets > called 9 times instead of 10). > > > Please provide any help, if you know the answer. The answer is that UDP is designed for speed, not reliability. It is expected to lose some packets. (Yes, even if you see the packets with a sniffer.) It is very difficult for an application program to keep up with closely-spaced UDP packets. You can improve upon this somewhat by receiving the packets in a high-priority thread that does very little else. If you cannot afford to lose a few percent of the packets then you should not use UDP. -- Scott McPhillips [VC++ MVP]
From: Roshan on 16 May 2008 14:23 On May 15, 7:57 pm, "Scott McPhillips [MVP]" <org-dot-mvps-at- scottmcp> wrote: > "Roshan" <ros...(a)exeltech.com> wrote in message > > news:05455473-b89e-42ec-b1f8-bc11cb0cdc99(a)24g2000hsh.googlegroups.com... > > > > > > > To Any Whom Can Answer, > > > Hello. I am using Microsoft's Visual C++ 6.0 UDP application > > (msocudp) > > to retrieve packets from a device that is connected to our network. > > The problem is the UDP application will not receive all the packets > > from the device. > > > I even used Ethereal (packet sniffer) program to ensure the packets > > arrive at my computer and they definitely do! > > > So I'm stumped as to why the OnReceive() callback function in the UDP > > socket code doesn't get invoked for all the packets that arrive. For > > example, for 10 packets that may be sent by the device, the UDP > > application would only receive 9 packets (i.e. OnReceive() only gets > > called 9 times instead of 10). > > > Please provide any help, if you know the answer. > > The answer is that UDP is designed for speed, not reliability. It is > expected to lose some packets. (Yes, even if you see the packets with a > sniffer.) It is very difficult for an application program to keep up with > closely-spaced UDP packets. You can improve upon this somewhat by receiving > the packets in a high-priority thread that does very little else. > > If you cannot afford to lose a few percent of the packets then you should > not use UDP. > > -- > Scott McPhillips [VC++ MVP]- Hide quoted text - > > - Show quoted text - Scott, Thank you so much for the response and info. I really appreciate it. The packet sniffer is an application itself, correct? Therefore, if it can fetch and read all the packets, then should it not be true that a VC++ application () do the same? - Roshan Exeltech Software Developer
From: Roshan on 16 May 2008 14:24 On May 15, 7:57 pm, "Scott McPhillips [MVP]" <org-dot-mvps-at- scottmcp> wrote: > "Roshan" <ros...(a)exeltech.com> wrote in message > > news:05455473-b89e-42ec-b1f8-bc11cb0cdc99(a)24g2000hsh.googlegroups.com... > > > > > > > To Any Whom Can Answer, > > > Hello. I am using Microsoft's Visual C++ 6.0 UDP application > > (msocudp) > > to retrieve packets from a device that is connected to our network. > > The problem is the UDP application will not receive all the packets > > from the device. > > > I even used Ethereal (packet sniffer) program to ensure the packets > > arrive at my computer and they definitely do! > > > So I'm stumped as to why the OnReceive() callback function in the UDP > > socket code doesn't get invoked for all the packets that arrive. For > > example, for 10 packets that may be sent by the device, the UDP > > application would only receive 9 packets (i.e. OnReceive() only gets > > called 9 times instead of 10). > > > Please provide any help, if you know the answer. > > The answer is that UDP is designed for speed, not reliability. It is > expected to lose some packets. (Yes, even if you see the packets with a > sniffer.) It is very difficult for an application program to keep up with > closely-spaced UDP packets. You can improve upon this somewhat by receiving > the packets in a high-priority thread that does very little else. > > If you cannot afford to lose a few percent of the packets then you should > not use UDP. > > -- > Scott McPhillips [VC++ MVP]- Hide quoted text - > > - Show quoted text - I will definitely try using threads and will let you know. Regards, Roshan
|
Next
|
Last
Pages: 1 2 3 Prev: Using ATL::CString in old makefile projects Next: Allocate and De-allocate in Multi-DLL Program |