| 1 | /************************************************* |
| 2 | * Exim - an Internet mail transport agent * |
| 3 | *************************************************/ |
| 4 | |
| 5 | /* Copyright (c) Jeremy Harris 1995 - 2019 */ |
| 6 | /* See the file NOTICE for conditions of use and distribution. */ |
| 7 | |
| 8 | /* FreeBSD-specific code. This is concatenated onto the generic |
| 9 | src/os.c file. */ |
| 10 | |
| 11 | |
| 12 | /************* |
| 13 | Sendfile shim |
| 14 | *************/ |
| 15 | |
| 16 | ssize_t |
| 17 | os_sendfile(int out, int in, off_t * offp, size_t cnt) |
| 18 | { |
| 19 | off_t loff = *offp, written; |
| 20 | |
| 21 | if (sendfile(in, out, loff, cnt, NULL, &written, 0) < 0) return (ssize_t)-1; |
| 22 | *offp = loff + written; |
| 23 | return (ssize_t)written; |
| 24 | } |
| 25 | |
| 26 | /************************************************* |
| 27 | TCP Fast Open: check that the ioctl is accepted |
| 28 | *************************************************/ |
| 29 | |
| 30 | #ifndef COMPILE_UTILITY |
| 31 | void |
| 32 | tfo_probe(void) |
| 33 | { |
| 34 | # ifdef TCP_FASTOPEN |
| 35 | int sock; |
| 36 | |
| 37 | if ( (sock = socket(AF_INET, SOCK_STREAM, 0)) >= 0 |
| 38 | && setsockopt(sock, IPPROTO_TCP, TCP_FASTOPEN, &on, sizeof(on) >= 0) |
| 39 | ) |
| 40 | f.tcp_fastopen_ok = TRUE; |
| 41 | close(sock); |
| 42 | # endif |
| 43 | } |
| 44 | #endif |
| 45 | |
| 46 | |
| 47 | /* End of os.c-Linux */ |