Re: Losing UDP packets with MFC Sockets
- From: "um" <dont_email@xxxxxxxxxx>
- Date: Thu, 14 Apr 2005 00:43:09 +0200
"Vicent Soler" <VicentSoler@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote
>
> We are developing a tool which uses UDP packets to receive data from a UDP
> Server. The problem we have found is that some UDP packets are being lost
> when the PC's CPU is near 100% and we think that this problem is related to
> the Window's input buffer.
>
> Any suggestion to solve this problem!! Is there any way to change the input
> buffer size of the socket and store the received packet while the PC is
> processing other data? Should we use threads to extract data from sockets?
>
> We are really worried about this problem because we can not lose so much
> packets as we do.
>
> Using more than one port, cuould solve the problem?
Depending on the requirements I would recommend the following
1) Increase each sockets internal buffer from the default 8 K to something larger
(I used 32 K)
2) use a seperate ring-buffer or FIFO queue of your own for the input
and/or output. (should handle complete "records", ie. not single characters)
3) one or more threads doing the reception and putting the rcvd data into
the input queue
4) one or more threads which processes the input queue (ie. processing the
rcvd data)
5) add your data to be sent out into the output queue (should be possible from
anywhere / any thread)
6) one or more threads which processes the output queue (ie. sending out to
socket(s))
7) use raw sockets, not the MFC wrappers, since they are in my experience not
reliable.
You need thread-safe routines, ie. use critical sections or a fast locking
mechanism, because data is shared among multiple threads.
I have used this successfully in one of my projects where realtime finance
data needs to be sent out to subscribing clients (ie. this is the server part).
Because the timing was ok, ie. no packet losses, I later even added a
data encryption, and it still is very fast and no packet loss is happening.
The key ingredients are a well defined design and "protocol", fast algorithms,
data buffering, multiple threads, and recource sharing (ie. fast locking).
And of course a compiled language; not such esoteric things like interpreted
or "managed code" stuff for such hi-speed tasks; I had used C++ (VS6).
Since you are doing "only" the client part it should suffice to perform
this just for the receiver side.
.
- Follow-Ups:
- Re: Losing UDP packets with MFC Sockets
- From: Vicent Soler
- Re: Losing UDP packets with MFC Sockets
- References:
- Losing UDP packets with MFC Sockets
- From: Vicent Soler
- Losing UDP packets with MFC Sockets
- Prev by Date: Re: Losing UDP packets with MFC Sockets
- Next by Date: Re: Losing UDP packets with MFC Sockets
- Previous by thread: Re: Losing UDP packets with MFC Sockets
- Next by thread: Re: Losing UDP packets with MFC Sockets
- Index(es):
Relevant Pages
|
Loading