nxt_conn_write.c (768:d1f741314614) nxt_conn_write.c (771:f349b2d68e75)
1
2/*
3 * Copyright (C) Igor Sysoev
4 * Copyright (C) NGINX, Inc.
5 */
6
7#include <nxt_main.h>
8

--- 30 unchanged lines hidden (view full) ---

39
40 b = c->write;
41
42 sb.socket = c->socket.fd;
43 sb.error = 0;
44 sb.sent = 0;
45 sb.size = 0;
46 sb.buf = b;
1
2/*
3 * Copyright (C) Igor Sysoev
4 * Copyright (C) NGINX, Inc.
5 */
6
7#include <nxt_main.h>
8

--- 30 unchanged lines hidden (view full) ---

39
40 b = c->write;
41
42 sb.socket = c->socket.fd;
43 sb.error = 0;
44 sb.sent = 0;
45 sb.size = 0;
46 sb.buf = b;
47#if (NXT_TLS)
48 sb.tls = c->u.tls;
49#endif
47 sb.limit = 10 * 1024 * 1024;
48 sb.ready = 1;
49 sb.sync = 0;
50
51 do {
50 sb.limit = 10 * 1024 * 1024;
51 sb.ready = 1;
52 sb.sync = 0;
53
54 do {
52 ret = nxt_conn_io_sendbuf(task, &sb);
55 ret = c->io->sendbuf(task, &sb);
53
54 c->socket.write_ready = sb.ready;
55 c->socket.error = sb.error;
56
57 if (ret < 0) {
58 /* ret == NXT_AGAIN || ret == NXT_ERROR. */
59 break;
60 }

--- 34 unchanged lines hidden (view full) ---

95 */
96 c->write_timer.handler = nxt_conn_write_timer_handler;
97 nxt_timer_add(engine, &c->write_timer, 0);
98
99 } else if (ret == NXT_AGAIN) {
100 /*
101 * SSL libraries can require to toggle either write or read
102 * event if renegotiation occurs during SSL write operation.
56
57 c->socket.write_ready = sb.ready;
58 c->socket.error = sb.error;
59
60 if (ret < 0) {
61 /* ret == NXT_AGAIN || ret == NXT_ERROR. */
62 break;
63 }

--- 34 unchanged lines hidden (view full) ---

98 */
99 c->write_timer.handler = nxt_conn_write_timer_handler;
100 nxt_timer_add(engine, &c->write_timer, 0);
101
102 } else if (ret == NXT_AGAIN) {
103 /*
104 * SSL libraries can require to toggle either write or read
105 * event if renegotiation occurs during SSL write operation.
103 * This case is handled on the event_io->send() level. Timer
106 * This case is handled on the c->io->send() level. Timer
104 * can be set here because it should be set only for write
105 * direction.
106 */
107 nxt_conn_timer(engine, c, c->write_state, &c->write_timer);
108
109 if (nxt_fd_event_is_disabled(c->socket.write)) {
110 nxt_fd_event_enable_write(engine, &c->socket);
111 }

--- 185 unchanged lines hidden (view full) ---

297nxt_event_conn_write_delayed(nxt_event_engine_t *engine, nxt_conn_t *c,
298 size_t sent)
299{
300 return 0;
301}
302
303
304ssize_t
107 * can be set here because it should be set only for write
108 * direction.
109 */
110 nxt_conn_timer(engine, c, c->write_state, &c->write_timer);
111
112 if (nxt_fd_event_is_disabled(c->socket.write)) {
113 nxt_fd_event_enable_write(engine, &c->socket);
114 }

--- 185 unchanged lines hidden (view full) ---

300nxt_event_conn_write_delayed(nxt_event_engine_t *engine, nxt_conn_t *c,
301 size_t sent)
302{
303 return 0;
304}
305
306
307ssize_t
305nxt_event_conn_io_write_chunk(nxt_conn_t *c, nxt_buf_t *b, size_t limit)
306{
307 ssize_t ret;
308
309 ret = c->io->sendbuf(c, b, limit);
310
311 if ((ret == NXT_AGAIN || !c->socket.write_ready)
312 && nxt_fd_event_is_disabled(c->socket.write))
313 {
314 nxt_fd_event_enable_write(c->socket.task->thread->engine, &c->socket);
315 }
316
317 return ret;
318}
319
320
321ssize_t
322nxt_event_conn_io_sendbuf(nxt_conn_t *c, nxt_buf_t *b, size_t limit)
323{
324 nxt_uint_t niob;
325 struct iovec iob[NXT_IOBUF_MAX];
326 nxt_sendbuf_coalesce_t sb;
327
328 sb.buf = b;
329 sb.iobuf = iob;

--- 100 unchanged lines hidden ---
308nxt_event_conn_io_sendbuf(nxt_conn_t *c, nxt_buf_t *b, size_t limit)
309{
310 nxt_uint_t niob;
311 struct iovec iob[NXT_IOBUF_MAX];
312 nxt_sendbuf_coalesce_t sb;
313
314 sb.buf = b;
315 sb.iobuf = iob;

--- 100 unchanged lines hidden ---