Re: Datagram Socket Speed Problem



I'd say that there's not a single thing wrong with the socket. You're
asking it to send some data and, if the channel is busy, it's buffering it.
When the buffer is full (because you're trying to send faster than the
network bandwidth will allow), it tosses the packets. That's exactly the
way I'd expect it to work. I bet that if you change the buffering, the
amount of data actually delivered will probably change right along with the
buffer settings. You should be looking at the return value from SendTo() to
verify that it's actually sending the bytes that you are providing. When it
doesn't, you need to decide what to do about it...

Paul T.

"Lionel Reyero" <LionelReyero@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote in message
news:2E1306F5-64FB-4D8C-B6E9-D4BD0268780D@xxxxxxxxxxxxxxxx
> Hi,
>
> I am doing a streaming application from Ipaq to Ipaq. I'm transmiting the
> data over a Datagram Socket. One thread is dedicated to sending the data.
> It
> is something alike this :
>
> socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,
> ProtocolType.Udp);
>
> //set a large send buffer to the socket (400 ko)
> socket.SetSocketOption(SocketOptionLevel.Socket,
> SocketOptionName.ReceiveBuffer, 400000);
>
> while (keepAlive)
> {
> byte[] data = dataSource.getData();
>
> socket.SendTo(data , 0, dataSize, SocketFlags.None, remoteEndPoint);
>
> //If I add this line, it is working fine
> //Thread.Sleep(50);
> }
>
> The dataSize is 38000 bytes. The while loop is executed about 30 times a
> second, so it represents a bitrate of around 10 Mbit/S ! which is much
> more
> than my wireless lan network capacity.
>
> The program behavior is the following :
> The receiver program start receiving packets... and after about 10
> packets,
> it is receiving nothing.
> The sender program (described above) reports it is sending packets without
> interruption even though the receiver is receiving nothing.... after 1
> minute
> or so, the sender crash "assembly not found exeception", and a soft
> restart
> of the Ipaq is the only way to get it working smooth again.
>
> If I uncomment the line :
> Thread.Sleep(50);
> the sender works without crashing, and the receiver keeps receiving all
> the
> packets.
>
> It seems that the Socket is not working properly when it is asked to
> transmit more data than what it is physically possible to transmit.
> I expected the socket.SendTo method to block until the data are actually
> sent, so that it would block long enough to slow down the program to the
> speed matching the maximum bitrate that can be supported by the network...
> but it seems it is not the case. (by the way, I checked the socket has
> blocking = true).
>
> I can't let the Sleep operation.. because the data I am sending are real
> time, and should be sent as fast as possible..
>
> My questions are :
>
> what's wrong with the socket ?
> why doesn't it block longer, to send the data at an appropriate rate?
> what can I do to my program to be sure it will not crash, and to send the
> data as fast as possible.
>
> Thanks a lot!
>
> Lionel Reyero


.



Relevant Pages

  • Re: Fundamentals question, is this how it works?
    ... processing packets after you are done with one. ... receving the buffer size each time. ... TCP is a stream-based protocol, which means that it ignores any attempt ... then the receiving side might get ...
    (microsoft.public.win32.programmer.networks)
  • Re: Socket switch delay
    ... The server uses blocking sockets just because I am also using Overlapped IO ... structures to send the packets. ... The reason I am using a 0 bytes send buffer in my socket (i.e. ...
    (microsoft.public.win32.programmer.networks)
  • Re: BeginReceive return zero length buffer when run ,and work correctly when use step by step debug
    ... Your first read is receiving 0 bytes? ... Your async socket listens and receives 500 bytes (your total buffer size ... But the data remains on the socket, until such time as it IS ... With a stream-oriented socket (eg TCP), ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Socket receiving too slowly
    ... How do you know the size of what you are receiving? ... > I'm using a socket connection to receive communication from a server. ... > to clean out the buffer, which due to the computer's business is holding ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Losing UDP packets with MFC Sockets
    ... Say the sending process sends out 3 packets of 20 bytes each, ... Your receiving process does a Receive with a buffer of 100 bytes the next ...
    (microsoft.public.vc.mfc)