Messages in this thread | | | From | "johnny zhao" <> | Subject | Re: udp packet loss even with large socket buffer | Date | Sat, 28 Feb 2004 17:08:13 -0500 |
| |
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/
| |