svc · unix #337
sendfile
Transfère un fichier directement depuis un descripteur de fichier vers une socket sans copie en espace utilisateur.
Prototype
int sendfile(int fd, int s, off_t offset, off_t *nbytes, struct sf_hdtr *hdtr, int flags);Retour: int
Arguments
| Name | Type | Dir | Description |
|---|---|---|---|
| fd | int | - | |
| s | int | - | |
| offset | off_t | - | |
| nbytes | off_t | - | |
| hdtr | struct sf_hdtr | - | |
| flags | int | - |
Historique des versions
| XNU tag | macOS | # |
|---|---|---|
| xnu-1456.1.26 | macOS 10.6 Snow Leopard | 337 |
| xnu-1699.24.8 | macOS 10.7 Lion | 337 |
| xnu-2050.18.24 | macOS 10.8 Mountain Lion | 337 |
| xnu-2422.115.4 | macOS 10.9 Mavericks | 337 |
| xnu-2782.40.9 | macOS 10.10 Yosemite | 337 |
| xnu-3247.1.106 | macOS 10.11 El Capitan | 337 |
| xnu-3789.1.32 | macOS 10.12 Sierra | 337 |
| xnu-4570.1.46 | macOS 10.13 High Sierra | 337 |
| xnu-4903.221.2 | macOS 10.14 Mojave | 337 |
| xnu-6153.11.26 | macOS 10.15 Catalina | 337 |
| xnu-7195.50.7.100.1 | macOS 11.0 Big Sur | 337 |
| xnu-8019.41.5 | macOS 12.0 Monterey | 337 |
| xnu-8792.41.9 | macOS 13.0 Ventura | 337 |
| xnu-10002.1.13 | macOS 14.0 Sonoma | 337 |
| xnu-11215.1.10 | macOS 15.0 Sequoia | 337 |
| xnu-11417.101.15 | macOS 15.4 Sequoia | 337 |
| xnu-12377.1.9 | macOS 26.0 Tahoe | 337 |
| xnu-10002.41.9 | — | 337 |
| xnu-10002.61.3 | — | 337 |
| xnu-10002.81.5 | — | 337 |
| xnu-10063.101.15 | — | 337 |
| xnu-10063.121.3 | — | 337 |
| xnu-10063.141.1 | — | 337 |
| xnu-11215.41.3 | — | 337 |
| xnu-11215.61.5 | — | 337 |
| xnu-11215.81.4 | — | 337 |
| xnu-11417.121.6 | — | 337 |
| xnu-11417.140.69 | — | 337 |
| xnu-12377.101.15 | — | 337 |
| xnu-12377.41.6 | — | 337 |
| xnu-12377.61.12 | — | 337 |
| xnu-12377.81.4 | — | 337 |
| xnu-1486.2.11 | — | 337 |
| xnu-1504.15.3 | — | 337 |
| xnu-1504.3.12 | — | 337 |
| xnu-1504.7.4 | — | 337 |
| xnu-1504.9.17 | — | 337 |
| xnu-1504.9.26 | — | 337 |
| xnu-1504.9.37 | — | 337 |
| xnu-1699.22.73 | — | 337 |
| xnu-1699.22.81 | — | 337 |
| xnu-1699.24.23 | — | 337 |
| xnu-1699.26.8 | — | 337 |
| xnu-1699.32.7 | — | 337 |
| xnu-2050.22.13 | — | 337 |
| xnu-2050.24.15 | — | 337 |
| xnu-2050.48.11 | — | 337 |
| xnu-2050.7.9 | — | 337 |
| xnu-2050.9.2 | — | 337 |
| xnu-2422.1.72 | — | 337 |
| xnu-2422.100.13 | — | 337 |
| xnu-2422.110.17 | — | 337 |
| xnu-2422.90.20 | — | 337 |
| xnu-2782.1.97 | — | 337 |
| xnu-2782.10.72 | — | 337 |
| xnu-2782.20.48 | — | 337 |
| xnu-2782.30.5 | — | 337 |
| xnu-3247.10.11 | — | 337 |
| xnu-3248.20.55 | — | 337 |
| xnu-3248.30.4 | — | 337 |
| xnu-3248.40.184 | — | 337 |
| xnu-3248.50.21 | — | 337 |
| xnu-3248.60.10 | — | 337 |
| xnu-3789.21.4 | — | 337 |
| xnu-3789.31.2 | — | 337 |
| xnu-3789.41.3 | — | 337 |
| xnu-3789.51.2 | — | 337 |
| xnu-3789.60.24 | — | 337 |
| xnu-3789.70.16 | — | 337 |
| xnu-4570.20.62 | — | 337 |
| xnu-4570.31.3 | — | 337 |
| xnu-4570.41.2 | — | 337 |
| xnu-4570.51.1 | — | 337 |
| xnu-4570.61.1 | — | 337 |
| xnu-4570.71.2 | — | 337 |
| xnu-4903.231.4 | — | 337 |
| xnu-4903.241.1 | — | 337 |
| xnu-4903.270.47 | — | 337 |
| xnu-6153.101.6 | — | 337 |
| xnu-6153.121.1 | — | 337 |
| xnu-6153.141.1 | — | 337 |
| xnu-6153.41.3 | — | 337 |
| xnu-6153.61.1 | — | 337 |
| xnu-6153.81.5 | — | 337 |
| xnu-7195.101.1 | — | 337 |
| xnu-7195.121.3 | — | 337 |
| xnu-7195.141.2 | — | 337 |
| xnu-7195.60.75 | — | 337 |
| xnu-7195.81.3 | — | 337 |
| xnu-8019.61.5 | — | 337 |
| xnu-8019.80.24 | — | 337 |
| xnu-8020.101.4 | — | 337 |
| xnu-8020.121.3 | — | 337 |
| xnu-8020.140.41 | — | 337 |
| xnu-8792.61.2 | — | 337 |
| xnu-8792.81.2 | — | 337 |
| xnu-8796.101.5 | — | 337 |
| xnu-8796.121.2 | — | 337 |
| xnu-8796.141.3 | — | 337 |
Notes
sendfile sur macOS a la signature BSD (in_fd, out_socket, offset, *len, *hdtr, flags) — pas celle de Linux. Le noyau utilise les pages UBC (Unified Buffer Cache) et, pour TCP, les fusionne dans la file d'envoi via sosend_list, ce qui peut engager TSO (TCP Segmentation Offload) sur les NIC supportées. L'argument hdtr permet d'attacher en-têtes et fin-de-bandes dans la même opération atomique, utile pour les réponses HTTP.
Détection
Les octets transitent toujours par NEFilterDataProvider, comme avec sendto. L'activité côté fichier (la lecture) est également invisible pour ES car les données ne reviennent jamais en espace utilisateur.