BSD syscall#337
svc · unix #337
sendfile
Transfers a file directly from a file descriptor to a socket without copying through user space.
Prototype
int sendfile(int fd, int s, off_t offset, off_t *nbytes, struct sf_hdtr *hdtr, int flags);Returns: int
Arguments
| Name | Type | Dir | Description |
|---|---|---|---|
| fd | int | - | |
| s | int | - | |
| offset | off_t | - | |
| nbytes | off_t | - | |
| hdtr | struct sf_hdtr | - | |
| flags | int | - |
Version history
| 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
macOS sendfile has the BSD signature (in_fd, out_socket, offset, *len, *hdtr, flags) — not the Linux one. The kernel uses UBC (Unified Buffer Cache) pages and, for TCP, splices them into the send queue via sosend_list, which can engage TSO (TCP Segmentation Offload) on supported NICs. The hdtr argument lets callers attach headers and trailers in the same atomic operation, useful for HTTP responses.
Detection
Bytes still pass through NEFilterDataProvider just like sendto. File-side activity (the read) is invisible to ES too because the data never re-enters user space.
Related APIs
writesendmsgreadmmap