[Python] socket e MSG_OOB: bug?

Remo The Last py.remothelast a yahoo.it
Sab 6 Set 2014 14:02:25 CEST


Manlio, stai scherzando vero?
Stai dicendo che il trasporto udp è più affidabile del tcp (best effort)?
ciacia



Il Venerdì 5 Settembre 2014 12:04, Manlio Perillo <manlio.perillo a gmail.com> ha scritto:
 


2014-09-04 12:19 GMT+02:00 Remo The Last <py.remothelast a yahoo.it>:

Buongiorno lista.
>Continuando la mia programmazione relativa all'invio di segnali hex, ho potuto confermare quanto letto in linea che un server python con flag MSG_OOB

Perchè mai usi MSG_OOB, ossia messaggi fuori banda,  la cui semantica è implementation specific?
http://pubs.opengroup.org/onlinepubs/9699919799/functions/send.html
http://pubs.opengroup.org/onlinepubs/9699919799/functions/recv.html

 
crasha sempre. E questa è una conferma.
>
>

Cosa intendi con crasha?
Per me (e per molti altri) crashare significa andare in segfault, ma dubito che sia questo il caso.
Probabilmente intendi che  viene sollevata una eccezione, che dovrebbe darti utili informazioni aggiuntive.
 
Ma è anche vero che un socket client con flag MSG_OOB taglia a destra di un byte il messaggio da inviare.

Come saprai, se fai un send(N bytes) e recv(N bytes) non è detto che recv ti restituisca esattamente N bytes, ma di solito qualcosa in meno.

Il tutto poi è complicato dall'uso dei messaggi out-of-band.
Che tipo di socket stai usando?
Che sistema operativo?
 
L'ho potuto appurare sia in locale con una semplice applicazione client-server ma anche su un mio server remoto. In intrambi i casi il messaggio è risultato tagliato a destra di una byte. Tipo: msg="hello world" e arriva "hello worl". Per ovviare allungo di un byte il messaggio e questo arriva completo come messaggio da invio originale.
>
>

Questo è un errore molto comune tra chi si avvicina alla programmazione di rete.
Quando invii qualcosa via socket di tipo stream devi **sempre** usare un protocollo che permetta a chi riceve i dati di capire dove inizia e dove finisce un "messaggio".

In particolare, se vuoi spedire messaggi brevi in modo facile, usa i socket di tipo SOCK_DGRAM invece di SOCK_STREAM, ma assicurati di capire come funzionano.


Ciao  Manlio 
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20140906/ddd18fb5/attachment.html>


Maggiori informazioni sulla lista Python