static ngx_int_t ngx_stream_lua_socket_udp_read(ngx_stream_session_t *s, ngx_stream_lua_socket_udp_upstream_t *u) { ngx_connection_t *c; ngx_event_t *rev; ssize_t n; c = u->udp_connection.connection; rev = c->read; ngx_log_debug1(NGX_LOG_DEBUG_STREAM, c->log, 0, "stream lua udp socket read data: waiting: %d", (int) u->waiting); n = ngx_udp_recv(u->udp_connection.connection, ngx_stream_lua_socket_udp_buffer, u->recv_buf_size); ngx_log_debug1(NGX_LOG_DEBUG_STREAM, c->log, 0, "stream lua udp recv returned %z", n); if (n >= 0) { u->received = n; ngx_stream_lua_socket_udp_handle_success(s, u); return NGX_OK; } if (n == NGX_ERROR) { u->socket_errno = ngx_socket_errno; ngx_stream_lua_socket_udp_handle_error(s, u, NGX_STREAM_LUA_SOCKET_FT_ERROR); return NGX_ERROR; } /* n == NGX_AGAIN */ #if 1 if (ngx_handle_read_event(rev, 0) != NGX_OK) { ngx_stream_lua_socket_udp_handle_error(s, u, NGX_STREAM_LUA_SOCKET_FT_ERROR); return NGX_ERROR; } #endif if (rev->active) { ngx_add_timer(rev, u->read_timeout); } else if (rev->timer_set) { ngx_del_timer(rev); } return NGX_AGAIN; }
static void ngx_resolver_read_response(ngx_event_t *rev) { ssize_t n; ngx_connection_t *c; u_char buf[NGX_RESOLVER_UDP_SIZE]; c = rev->data; do { n = ngx_udp_recv(c, buf, NGX_RESOLVER_UDP_SIZE); if (n < 0) { return; } ngx_resolver_process_response(c->data, buf, n); } while (rev->ready); }