svc · unix #27
recvmsg
Reçoit un message et toutes les données de contrôle auxiliaires dans un tampon scatter-gather.
Prototype
int recvmsg(int s, struct msghdr *msg, int flags);Retour: int
Arguments
| Name | Type | Dir | Description |
|---|---|---|---|
| s | int | - | |
| msg | struct msghdr | - | |
| flags | int | - |
Historique des versions
| XNU tag | macOS | # |
|---|---|---|
| xnu-1456.1.26 | macOS 10.6 Snow Leopard | 27 |
| xnu-1486.2.11 | — | 27 |
| xnu-1504.15.3 | — | 27 |
| xnu-1504.3.12 | — | 27 |
| xnu-1504.7.4 | — | 27 |
| xnu-1504.9.17 | — | 27 |
| xnu-1504.9.26 | — | 27 |
| xnu-1504.9.37 | — | 27 |
Notes
recvmsg est le seul moyen de recevoir des objets auxiliaires : SCM_RIGHTS (passage de descripteurs sur AF_UNIX), SCM_CREDS (credentials du pair), IP_RECVPKTINFO et la famille NECP_CLIENT_RESULT spécifique à NetworkExtension. Le noyau remplit msghdr.msg_flags avec MSG_TRUNC si l'iov était trop petit et MSG_CTRUNC si l'espace cmsg était épuisé — les appelants doivent vérifier les deux. macOS préserve les frontières de message pour SOCK_DGRAM et SOCK_SEQPACKET.
Détection
Aucune couverture ES. Le passage de fd auxiliaire est observable via des instantanés PROC_PIDFDSOCKETINFO avant et après l'appel. NEFilterDataProvider voit les octets de payload mais pas les cmsg.