Come si sa sendmsg ha questa dichiarazione:Come funziona sendmsg?
int sendmsg(int s, const struct msghdr *msg, int flags);
e msghdr struttura ha questa forma:
struct msghdr {
void * msg_name; /* optional address */
socklen_t msg_namelen; /* size of address */
struct iovec * msg_iov; /* scatter/gather array */
size_t msg_iovlen; /* # elements in msg_iov */
void * msg_control; /* ancillary data, see below */
socklen_t msg_controllen; /* ancillary data buffer len */
int msg_flags; /* flags on received message */
};
Come si vede msghdr ha una matrice di tampone, iovec e ha buffer count msg_iovlen. Quello che mi chiedo è come sendmsg manda questi buffer. Concatena tutti i buffer e li invia o li invia in un ciclo for?
Solo una nota: se questo è per curiosità, allora cool. Se stai cercando di scrivere qualcosa che dipende da questa conoscenza, allora stai quasi certamente facendo qualcosa di sbagliato e chiedendo dei problemi. –
@SanJacinto sarebbe utile per voi per elaborare ** perché ** scrivere qualcosa che dipende da questa conoscenza è chiedere guai. Sei in grado di elaborare per favore? –
@lori Poiché la documentazione fornisce un insieme di interfacce di codice e indica cosa aspettarsi da loro. Le interfacce sono molto lente da cambiare. Il codice sottostante non ha tale garanzia. Se stai approfondendo la conoscenza degli interni e scrivendo il tuo codice su tale conoscenza, non dovresti sorprendervi se aggiorni il tuo kernel o qualche driver sullo stack di rete e il tuo codice che chiama non funziona più. Hai fatto una scelta sbagliata se l'hai fatto. –