<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2014-09-04 12:19 GMT+02:00 Remo The Last <span dir="ltr"><<a href="mailto:py.remothelast@yahoo.it" target="_blank">py.remothelast@yahoo.it</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><div style="color:rgb(0,0,0);font-family:HelveticaNeue,'Helvetica Neue',Helvetica,Arial,'Lucida Grande',sans-serif;font-size:12pt;background-color:rgb(255,255,255)"><div>Buongiorno lista.</div><div>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</div></div></div></blockquote><div><br></div><div>Perchè mai usi MSG_OOB, ossia messaggi fuori banda,  la cui semantica è implementation specific?</div><div><a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/send.html">http://pubs.opengroup.org/onlinepubs/9699919799/functions/send.html</a></div><div><a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/recv.html">http://pubs.opengroup.org/onlinepubs/9699919799/functions/recv.html</a><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><div style="color:rgb(0,0,0);font-family:HelveticaNeue,'Helvetica Neue',Helvetica,Arial,'Lucida Grande',sans-serif;font-size:12pt;background-color:rgb(255,255,255)"><div> crasha sempre. E questa è una conferma.</div><div><br></div></div></div></blockquote><div><br></div><div>Cosa intendi con crasha?</div><div>Per me (e per molti altri) crashare significa andare in segfault, ma dubito che sia questo il caso.</div><div>Probabilmente intendi che  viene sollevata una eccezione, che dovrebbe darti utili informazioni aggiuntive.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><div style="color:rgb(0,0,0);font-family:HelveticaNeue,'Helvetica Neue',Helvetica,Arial,'Lucida Grande',sans-serif;font-size:12pt;background-color:rgb(255,255,255)"><div></div><div style="color:rgb(0,0,0);font-size:16px;font-family:HelveticaNeue,'Helvetica Neue',Helvetica,Arial,'Lucida Grande',sans-serif;font-style:normal;background-color:transparent">Ma è anche vero che un socket client con flag MSG_OOB taglia a destra di un byte il messaggio da inviare.</div></div></div></blockquote><div><br></div><div>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.</div><div><br></div><div>Il tutto poi è complicato dall'uso dei messaggi out-of-band.</div><div>Che tipo di socket stai usando?</div><div>Che sistema operativo?</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><div style="color:rgb(0,0,0);font-family:HelveticaNeue,'Helvetica Neue',Helvetica,Arial,'Lucida Grande',sans-serif;font-size:12pt;background-color:rgb(255,255,255)"><div style="color:rgb(0,0,0);font-size:16px;font-family:HelveticaNeue,'Helvetica Neue',Helvetica,Arial,'Lucida Grande',sans-serif;font-style:normal;background-color:transparent"> 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.</div><div style="color:rgb(0,0,0);font-size:16px;font-family:HelveticaNeue,'Helvetica Neue',Helvetica,Arial,'Lucida Grande',sans-serif;font-style:normal;background-color:transparent"><br></div></div></div></blockquote><div><br></div><div>Questo è un errore molto comune tra chi si avvicina alla programmazione di rete.</div><div>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".</div><div><br></div><div>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.<br></div><div><br></div><div>Ciao  Manlio </div></div></div></div>