[Python] socket e MSG_OOB: bug?

Manlio Perillo manlio.perillo a gmail.com
Ven 5 Set 2014 12:04:23 CEST


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/20140905/03de0f44/attachment.html>


Maggiori informazioni sulla lista Python