erlug
[Top] [All Lists]

Re: [Erlug] udp socket, packet loss

To: ERlug - Lista Pubblica <erlug@xxxxxxxxxxxxxx>
Subject: Re: [Erlug] udp socket, packet loss
From: "Guido Bolognesi [ Zen ]" <zen@xxxxxxxxx>
Date: Fri, 6 Jul 2007 20:45:48 +0200
On Fri, Jul 06, 2007 at 07:30:12PM +0200, Matteo Sgalaberni wrote:
> Ciao $amici,
ciao $amico,

> - server python A che ha in listen un socket UDP.
> - client B che apre in un istante 300 thread che fanno una connect al
> server e pushano ognuno un pacchetto UDP. totale 300 pacchetti.
#define "un istante"

> su server A a volte arrivano 300 pacchetti regolarmente, ma a volte
> ne mancano 1-2, una ventina... e cos? via...
Mai successo che ne manchino 300, suppongo.
Quanti te ne perdi al massimo?

> 15data+8header=23byte*300=6900byte di dati)
non credo sia un problema di banda. Ne` (ipotizzo) di latenza.

> perdita? E' perch? ? UDP e quando si riempie un qualche buffer che non
> o di quanto ? su server(app o kernel?) allora scarta pacchetti?
Chiedo: come funziona in python il listen sulle socket udp?
Lo Stevens[1] mi dice che solitamente i server UDP sono iterativi,
e ad ogni porta il S.O. assegna un buffer di dimensione finita.
Forse, come dicevi tu, lo riempi con il burst di pacchetti.

Giusto per capirci, ho riesumato una roba cosi` (mi perdonino
i programmatori in lista...)

====
from socket import *

host = "127.0.0.1"
port = 5555
buf = 1024
addr = (host,port)

UDPSock = socket(AF_INET,SOCK_DGRAM)
UDPSock.bind(addr)
while 1:
        data,addr = UDPSock.recvfrom(buf)
        if not data:
                break
        else:
                print data
===

se allarghi buf di potenze di 2, cosa succede?

> come posso ovviare il problema tenendo presente che:
Se tu riscrivessi il listener in C e poi salvassi i dati
da qualche parte, per poi processarli con calma con il pitone?

[1] Ho dato uno sguardo ad Advanced Programming in the UNIX Env,
ma non ne parla. Qui cito il TCP/IP Ill. v.1 (pg 163).

ciau!
-- 
guido . zen@xxxxxxxxxxxxxxx . skype://zenmobile

<Prev in Thread] Current Thread [Next in Thread>