[Python] problema con socket (lettura blocking)

Vittorio Spina vittorio.spina a gmail.com
Ven 4 Ott 2013 17:33:56 CEST


Ciao a tutti.
Ho scritto un programma che riceve dati da un Laser con interfaccia 
Ethernet.

il programma riassumento ha la seguente forma:

from socket import *
import config
s = socket(AF_INET,SOCK_STREAM)
s.connect((config.IP, config.PORT))
while 1:
     if s.recv(1)=="\xAA":
         letturaNumero = s.recv(1)

quando lancio il codice noto che letturaNumero identifica un numero 
progressivo.
E' come insomma se il device stesse ad aspettarmi fino alla lettura 
successiva, cosa che io non voglio poichè i dati sono tanti e poi mi 
ritrovo con una sorta di macchina del passato.

Se invece faccio come segue

while 1:
     s = socket(AF_INET,SOCK_STREAM)
     s.connect((config.IP, config.PORT))
     if s.recv(1)=="\xAA":
         letturaNumero = s.recv(1)

e cioè apro e chiudo di continuo il socket, tutto funziona come vorrei. 
Ma l'operazione di apertura e chiusira del socket è in effetti una cosa 
pensante.
C'è un modo per dire al socket di aprire una connessione e che il device 
non stia ad aspettarmi?
Grazie.

p.s
usando il comando
s.setblocking(0)
ricevo l'errore:
[Errno 10035] Impossibile completare immediatamente l'operazione sul 
socket non a blocchi


Maggiori informazioni sulla lista Python