Nichtblockierendes Lesen von Sockets - was ist besser?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
joerg
User
Beiträge: 188
Registriert: Samstag 17. August 2002, 17:48
Wohnort: Berlin
Kontaktdaten:

Montag 1. Dezember 2003, 11:48

Hallo,

ich möchte einen Socket mittels einer Funktion auslesen, die entweder einen gelesenen String oder None zurückgibt, wenn nichts zu lesen ist. Sie soll jedenfalls nicht blockieren, bis etwas zu lesen angekommen bist.

Prinzipiell sehe ich zwei Möglichkeiten, die ich auch schon probiert habe. Entweder mit s.setblocking(0) auf nonblocking schalten und dann die Exception beim Lesen abfangen, wenn der Socket 'leer' ist. Oder mit select.select() bzw. select.poll() nachfragen, ob der Socket überhaupt Lesestoff bereithält.

Wo ist denn nun der große Unterschied beider Varianten? Oder kann ich die vollkommen gleichwertig benutzen? Gibt es irgendwelche Einschränkungen oder Empfehlungen?

Für Neugierige: Im konkreten Fall geht es um einen lokalen Socket (AF_UNIX), der zum lirc (www.lirc.org) gehört, es werden also Events einer Infrarot-Fernbedienung ausgelesen. Das Paket pylirc kenne ich, ich will aber direkt an den Socket ran.;-)

Da Sockets ja viel mit Netzwerken zu tun haben, habe ich mal diese Kategorie gewählt, auch wenn mein Beispiel nur lokal ist.

Danke schonmal!
Jörg
"Sie sind nicht berechtigt, unrechtmäßige Kopien dieses Datenträgers zu erstellen." - Microsoft-Weisheit auf einer CD von MS-VisualC++-6.0
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Montag 1. Dezember 2003, 14:54

Hi joerg,

hmm ich würde das abhängig von den zu erwarteten Ergebnissen machen. Falls bei den meisten Anfragen etwas zu lesen ist, und der leere Socket die Ausnahme, machs über die Exception (das heisst ja auch ausnahme), ansonst über select() bzw. poll().


Gruß

Dookie
Antworten