diff options
Diffstat (limited to 'src/nxt_port_socket.c')
-rw-r--r-- | src/nxt_port_socket.c | 72 |
1 files changed, 29 insertions, 43 deletions
diff --git a/src/nxt_port_socket.c b/src/nxt_port_socket.c index a3bc7f26..671c3334 100644 --- a/src/nxt_port_socket.c +++ b/src/nxt_port_socket.c @@ -16,44 +16,26 @@ static void nxt_port_buf_free(nxt_port_t *port, nxt_buf_t *b); static void nxt_port_error_handler(nxt_task_t *task, void *obj, void *data); -nxt_port_t * -nxt_port_alloc(nxt_task_t *task) +nxt_int_t +nxt_port_socket_init(nxt_task_t *task, nxt_port_t *port, size_t max_size) { - nxt_port_t *port; + nxt_int_t sndbuf, rcvbuf, size; + nxt_socket_t snd, rcv; nxt_mem_pool_t *mp; - mp = nxt_mem_pool_create(1024); - - if (nxt_fast_path(mp != NULL)) { - /* This allocation cannot fail. */ - port = nxt_mem_zalloc(mp, sizeof(nxt_port_t)); - port->mem_pool = mp; - - port->socket.task = task; + port->socket.task = task; - port->pair[0] = -1; - port->pair[1] = -1; + port->pair[0] = -1; + port->pair[1] = -1; - nxt_queue_init(&port->messages); + nxt_queue_init(&port->messages); - return port; + mp = nxt_mem_pool_create(1024); + if (nxt_slow_path(mp == NULL)) { + return NXT_ERROR; } - return NULL; -} - - -nxt_port_t * -nxt_port_create(nxt_task_t *task, size_t max_size) -{ - nxt_int_t sndbuf, rcvbuf, size; - nxt_port_t *port; - nxt_socket_t snd, rcv; - - port = nxt_port_alloc(task); - if (nxt_slow_path(port == NULL)) { - return NULL; - } + port->mem_pool = mp; if (nxt_slow_path(nxt_socketpair_create(task, port->pair) != NXT_OK)) { goto socketpair_fail; @@ -109,7 +91,7 @@ nxt_port_create(nxt_task_t *task, size_t max_size) port->max_size = nxt_min(max_size, (size_t) sndbuf); port->max_share = (64 * 1024); - return port; + return NXT_OK; getsockopt_fail: @@ -120,7 +102,7 @@ socketpair_fail: nxt_mem_pool_destroy(port->mem_pool); - return NULL; + return NXT_ERROR; } @@ -154,7 +136,7 @@ nxt_port_write_close(nxt_port_t *port) nxt_int_t -nxt_port_write(nxt_task_t *task, nxt_port_t *port, nxt_uint_t type, +nxt_port_socket_write(nxt_task_t *task, nxt_port_t *port, nxt_uint_t type, nxt_fd_t fd, uint32_t stream, nxt_buf_t *b) { nxt_queue_link_t *link; @@ -204,9 +186,9 @@ static void nxt_port_write_handler(nxt_task_t *task, void *obj, void *data) { ssize_t n; - nxt_uint_t niob; + nxt_uint_t niov; nxt_port_t *port; - struct iovec iob[NXT_IOBUF_MAX]; + struct iovec iov[NXT_IOBUF_MAX]; nxt_queue_link_t *link; nxt_port_send_msg_t *msg; nxt_sendbuf_coalesce_t sb; @@ -223,21 +205,22 @@ nxt_port_write_handler(nxt_task_t *task, void *obj, void *data) msg = (nxt_port_send_msg_t *) link; - nxt_iobuf_set(&iob[0], &msg->port_msg, sizeof(nxt_port_msg_t)); + iov[0].iov_base = &msg->port_msg; + iov[0].iov_len = sizeof(nxt_port_msg_t); sb.buf = msg->buf; - sb.iobuf = &iob[1]; + sb.iobuf = &iov[1]; sb.nmax = NXT_IOBUF_MAX - 1; sb.sync = 0; sb.last = 0; sb.size = sizeof(nxt_port_msg_t); sb.limit = port->max_size; - niob = nxt_sendbuf_mem_coalesce(task, &sb); + niov = nxt_sendbuf_mem_coalesce(task, &sb); msg->port_msg.last = sb.last; - n = nxt_socketpair_send(&port->socket, msg->fd, iob, niob + 1); + n = nxt_socketpair_send(&port->socket, msg->fd, iov, niov + 1); if (n > 0) { if (nxt_slow_path((size_t) n != sb.size)) { @@ -322,7 +305,7 @@ nxt_port_read_handler(nxt_task_t *task, void *obj, void *data) nxt_fd_t fd; nxt_buf_t *b; nxt_port_t *port; - nxt_iobuf_t iob[2]; + struct iovec iov[2]; nxt_port_msg_t msg; port = obj; @@ -335,10 +318,13 @@ nxt_port_read_handler(nxt_task_t *task, void *obj, void *data) /* TODO: disable event for some time */ } - nxt_iobuf_set(&iob[0], &msg, sizeof(nxt_port_msg_t)); - nxt_iobuf_set(&iob[1], b->mem.pos, port->max_size); + iov[0].iov_base = &msg; + iov[0].iov_len = sizeof(nxt_port_msg_t); + + iov[1].iov_base = b->mem.pos; + iov[1].iov_len = port->max_size; - n = nxt_socketpair_recv(&port->socket, &fd, iob, 2); + n = nxt_socketpair_recv(&port->socket, &fd, iov, 2); if (n > 0) { nxt_port_read_msg_process(task, port, &msg, fd, b, n); |