read & write interi da socket TCP
Von: ale.ber (ale.beer@gmail.com) [Profil]
Datum: 02.03.2008 14:11
Message-ID: <ee8a8e5a-0269-4ee7-acea-0a86b38fe76f@n77g2000hse.googlegroups.com>
Newsgroup: it.comp.os.linux.development
Datum: 02.03.2008 14:11
Message-ID: <ee8a8e5a-0269-4ee7-acea-0a86b38fe76f@n77g2000hse.googlegroups.com>
Newsgroup: it.comp.os.linux.development
Vorrei scrivere e leggere un intero su un socket TCP. Quindi una cosa
del genere.
// SCRITTURA
int mess = 123;
uint32_t mess_nbo = htonl(mess);
int bytesent = write(newsockfd, &mess_nbo, sizeof(mess_nbo));
// LETTURA
uint32_t mess_nbo;
int bytesrecv = read(sockfd, &mess_nbo, sizeof(mess_nbo));
mess = ntohl(mess_nbo);
Il mio problema è che write e read non garantiscono di mandare tutto
il messaggio, quindi sono responsabile di rimandare la parte mancante.
Sempre se non erro..
Quindi mi sono creato 2 funzioni che cercano di fare questo, solo che
NON FUNZIONANO ;) Mi viene il dubbio che non posso fare una cosa del
genere, dato che mi sembrano corrette.
Qualcuno mi sa dire il come mai?
Ringrazio anticipatamente..
Ale
/*
* Try to read the entire message from the socket
*/
int sockread(int sock, int *mess) {
int readed = 0;
int just_readed = 0;
uint32_t mess_nbo;
uint32_t *p = &mess_nbo;
do {
just_readed = read(sock, p + readed, 4);
if (just_readed == -1) {
return -1;
}
readed += just_readed;
printf("Readed: %d/%d\n", just_readed, readed);
} while ((just_readed > 0) && (readed < sizeof(uint32_t)));
*mess = ntohl(mess_nbo);
printf("%d - %d", *mess, mess_nbo);
return readed;
}
/*
* Try to write the entire message on the socket
*/
int sockwrite(int sock, int mess) {
uint32_t mess_nbo = htonl(mess);
int written = 0;
int just_written = 0;
uint32_t *p = &mess_nbo;
do {
just_written = write(sock, p + written, 1);
if (just_written == -1) {
return -1;
}
written += just_written;
printf("Written: %d/%d\n", just_written, written);
} while ((just_written > 0) && (written < sizeof(uint32_t)));
return written;
}
[ Auf dieses Posting antworten ]Antworten
- ale.ber (02.03.2008 14:14)
- Giovanni (02.03.2008 16:23)
- ale.ber (02.03.2008 16:40)
- Giovanni (02.03.2008 16:52)
- Giovanni (02.03.2008 17:02)
- ale.ber (02.03.2008 17:22)
- Manlio Perillo (02.03.2008 17:36)
- ale.ber (02.03.2008 17:44)
- Giovanni (02.03.2008 17:42)
- ale.ber (02.03.2008 17:26)
- Ottavio Campana (02.03.2008 19:40)
