Salve ho un problema che non riesco a risolvere, devo passare questa struttura attraverso un socket:
struttura
typedef struct {
message_data_hdr_t hdr;
char *buf;
} message_data_t;
dove hdr è un ulteriore struttura ma non mi da problemi nel passaggio...il mio problema è come mandare *buf ho provato nel seguente modo:
int readData(long fd, message_data_t *data){
int fatto;
while(1){
fatto=read(fd,&(data->hdr),sizeof(message_data_hdr_t));
if(fatto!=EINTR || fatto<=0){
break;
}
}
char buff[data->hdr.len];
while(1){
fatto=read(fd,buff,data->hdr.len);
if(fatto!=EINTR || fatto<=0){
break;
}
}
if(fatto<0){
return -1;
}else{
data->buf=malloc((data->hdr.len)*sizeof(char));
strncpy(data->buf,buff,data->hdr.len);
return fatto;
}
}
int sendData(long fd, message_data_t *msg){
int fatto;
while(1){
fatto=write(fd,&(msg->hdr),sizeof(message_data_hdr_t));
if(fatto!=EINTR || fatto<=0){
break;
}
}
char buff[1024];
strncpy(buff,msg->buf,msg->hdr.len);
while(1){
fatto=write(fd,buff,msg->hdr.len);
if(fatto!=EINTR || fatto<=0){
break;
}
}
if(fatto<0){
return -1;
}else{
return fatto;
}
}
però ovviamente non funziona penso che sia per un fatto che non si possono fare due write/read consecutivamente o meglio in teoria si ma non so come poterlo fare capire al "lettore" che deve saltare i bit che contengono la prima informazione.
Avevo pensato, come ultima spiaggia perchè mi sembra una soluzione poco elegante, di fare una write in "send" che poi fa una read in attesa che "read" mandi una risposta di conferma e poi mandare la buf ma ripeto farei così solo se non ci sono altre scelte.
Spero mi possiate aiutare il prima possibile, grazie
P.S. la struttura non puo' essere cambiata in nessuna maniera