13 #if (NGX_TEST_BUILD_SOLARIS_SENDFILEV)
17 typedef struct sendfilevec {
24 #define SFV_FD_SELF -2
26 static ssize_t sendfilev(
int fd,
const struct sendfilevec *vec,
27 int sfvcnt,
size_t *xferred)
39 #define NGX_SENDFILEVECS 64
41 #define NGX_SENDFILEVECS IOV_MAX
51 off_t size, send, prev_send, aligned, fprev;
82 vec.
size =
sizeof(sendfilevec_t);
100 for (cl = in; cl && send < limit; cl = cl->
next) {
111 if (send + size > limit) {
115 if (prev == cl->
buf->
pos) {
116 sfv->sfv_len += (size_t) size;
128 sfv->sfv_fd = SFV_FD_SELF;
130 sfv->sfv_off = (off_t) (uintptr_t) cl->
buf->
pos;
131 sfv->sfv_len = (size_t) size;
134 prev = cl->
buf->
pos + (size_t) size;
142 if (send + size > limit) {
148 if (aligned <= cl->buf->file_last) {
154 sfv->sfv_len += (size_t) size;
170 sfv->sfv_len = (size_t) size;
198 "sendfilev() sent only %uz bytes", sent);
202 "sendfilev: %z %z", n, sent);
204 if (send - prev_send == (off_t) sent) {
210 for (cl = in; cl; cl = cl->
next) {
222 if ((off_t) sent >= size) {
223 sent = (size_t) ((off_t) sent - size);
256 if (send >= limit || cl == NULL) {