2014-09-04 12:19 GMT+02:00 Remo The Last <py.remothel...@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
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python