lkml.org 
[lkml]   [2004]   [Feb]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: udp packet loss even with large socket buffer
Date
hi,

Since my program is coping with MSN, it's not easy to post a small example.
But I will try :)

I use the following code to initialize the socket:

*****************************
session->rtp.loc_addr.sin_family = AF_INET;
session->rtp.loc_addr.sin_addr.s_addr = INADDR_ANY;
session->rtp.loc_addr.sin_port = htons (port);
session->rtp.socket = socket (PF_INET, SOCK_DGRAM, 0);
g_return_val_if_fail (session->rtp.socket > 0, -1);
err = bind (session->rtp.socket,
(struct sockaddr *) &session->rtp.loc_addr,
sizeof (struct sockaddr_in));
/* set the address reusable */
err = setsockopt (session->rtp.socket, SOL_SOCKET, SO_REUSEADDR,
(void*)&optval, sizeof (optval));

optval = 8388608;
int optlen;
err = setsockopt (session->rtp.socket, SOL_SOCKET, SO_RCVBUF,
(void*)&optval, sizeof (optval));
err = getsockopt (session->rtp.socket, SOL_SOCKET, SO_RCVBUF,
(void*)&optval, &optlen);
**************************

the following code is used to receive data:
**************************

while ( ( error = recvfrom (session->rtp.socket, mp->b_wptr,
1500, 0,
(struct sockaddr *) &remaddr,
&addrlen) ) > 0 )
{
mp->b_wptr = mp->b_rptr + error;
rtp_parse(session, mp); //this function parses and enqueues the
received packet
mp = allocb (1500/*session->max_buf_size*/, 0); //wang
}
**************************

These codes are executed in a thread with the highest priority.
Thank you in advance!

Best regards,
Johnny

>From: Denis Vlasenko <vda@port.imtp.ilyichevsk.odessa.ua>
>To: "johnny zhao" <filamoon2@hotmail.com>, linux-kernel@vger.kernel.org
>Subject: Re: udp packet loss even with large socket buffer
>Date: Sat, 28 Feb 2004 23:22:50 +0200
>
>On Saturday 28 February 2004 03:09, johnny zhao wrote:
> > Hi,
> >
> > I have a problem when trying to receive udp packets containing video
>data
> > sent by Microsoft Windows Messenger. Here is a detailed description:
> >
> > Linux box:
> > Linux-2.4.21-0.13mdksmp, P4 2.6G HT
> > socket mode:
> > blocked mode
> > code used:
> > while ( recvfrom(...) )
> > socket buffer size:
> > 8388608, set by using sysctl -w net.core.rmem_default and rmem_max
> >
> > I used ethereal(using libpcap) to monitor the network traffic. All the
> > packets were transferred and captured by libpcap. But my program
>constantly
> > suffers from packet loss. According to ethereal, the average time
>interval
> > between 2 packets is 70-80ms, and the minimum interval can go down to
> > ~1ms. Each packet is smaller than 1500 bytes (ethernet MTU).
> >
> > Can anybody help me? I googled and found a similar case that had been
> > solved by increasing the socket buffer size. But it doesn't work for me.
>I
> > think 8M is a crazily large size :(
>
>Post a small program demonstrating your problem.
>(I'd test udp receive with netcat too)
>--
>vda
>

_________________________________________________________________
Find and compare great deals on Broadband access at the MSN High-Speed
Marketplace. http://click.atdmt.com/AVE/go/onm00200360ave/direct/01/

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 14:01    [W:0.030 / U:1.244 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site