Comment sendmsg œuvres?

Comme vous le savez sendmsg a cette déclaration:

int sendmsg(int s, const struct msghdr *msg, int flags);

et msghdr structure a cette forme:

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 */
};

Comme vous le voyez msghdr a un tableau de tampon, iovec et a tampons msg_iovlen. Ce que je me demande, c'est que la façon dont sendmsg envoie ces tampons. Est-il concaténer tous les tampons et d'envoyer ou de ne l'envoyer dans une boucle for?

Juste une remarque: si c'est pour la curiosité, puis laisser refroidir. Si vous essayez d'écrire quelque chose qui dépend de cette connaissance, alors vous êtes presque certainement de faire le mal et d'avoir des ennuis.
il serait utile pour vous de donner des précisions sur pourquoi écrire quelque chose qui dépend de cette connaissance est d'avoir des ennuis. Êtes-vous en mesure d'élaborer s'il vous plaît?
Parce que la documentation vous propose un ensemble de code interfaces et vous dit à quoi s'attendre de leur part. Les interfaces sont très lentes à changer. Le code sous-jacent n'a pas une telle garantie. Si vous êtes à glaner des connaissances de l'intérieur et de l'écriture de votre code autour de cette connaissance, alors vous ne devriez pas être surpris si vous mettez à jour votre noyau ou des pilote sur la pile de réseau et de votre code qui l'appelle, il ne fonctionne plus. Vous avez fait un mauvais choix si vous n'avez ce.

OriginalL'auteur whoi | 2010-11-23