Re: Datagram Socket Speed Problem
- From: "Paul G. Tobey [eMVP]" <ptobey no spam AT no instrument no spam DOT com>
- Date: Thu, 2 Jun 2005 08:24:01 -0700
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
.
- Follow-Ups:
- Re: Datagram Socket Speed Problem
- From: Lionel Reyero
- Re: Datagram Socket Speed Problem
- References:
- Datagram Socket Speed Problem
- From: Lionel Reyero
- Datagram Socket Speed Problem
- Prev by Date: Re: VPN to sqlserver?
- Next by Date: Re: How to Download/Upload files using OpenNETCF.Net.Ftp ?
- Previous by thread: Datagram Socket Speed Problem
- Next by thread: Re: Datagram Socket Speed Problem
- Index(es):
Relevant Pages
|