diff options
| author | Vladimir Homutov <vl@nginx.com> | 2021-07-15 14:21:39 +0300 |
|---|---|---|
| committer | Vladimir Homutov <vl@nginx.com> | 2021-07-15 14:21:39 +0300 |
| commit | 105de9762f840bf97d939a931b47bba9a9bfe226 (patch) | |
| tree | cd4b22ce14fd2bb80786506b5dc68250e037a59f /src/event/ngx_event_udp.h | |
| parent | 46aa440c66d51eebc2fd66bfb4a0d1f722982823 (diff) | |
| download | nginx-105de9762f840bf97d939a931b47bba9a9bfe226.tar.gz nginx-105de9762f840bf97d939a931b47bba9a9bfe226.tar.bz2 | |
Core: made the ngx_sendmsg() function non-static.
Additionally, the ngx_init_srcaddr_cmsg() function is introduced which
initializes control message with connection local address.
The NGX_HAVE_ADDRINFO_CMSG macro is defined when at least one of methods
to deal with corresponding control message is available.
Diffstat (limited to 'src/event/ngx_event_udp.h')
| -rw-r--r-- | src/event/ngx_event_udp.h | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/event/ngx_event_udp.h b/src/event/ngx_event_udp.h index fca6bac0f..bd7c973a2 100644 --- a/src/event/ngx_event_udp.h +++ b/src/event/ngx_event_udp.h @@ -14,6 +14,14 @@ #if !(NGX_WIN32) +#if ((NGX_HAVE_MSGHDR_MSG_CONTROL) \ + && (NGX_HAVE_IP_SENDSRCADDR || NGX_HAVE_IP_RECVDSTADDR \ + || NGX_HAVE_IP_PKTINFO \ + || (NGX_HAVE_INET6 && NGX_HAVE_IPV6_RECVPKTINFO))) +#define NGX_HAVE_ADDRINFO_CMSG 1 +#endif + + typedef struct { ngx_buf_t *buffer; struct sockaddr *sockaddr; @@ -29,7 +37,30 @@ struct ngx_udp_connection_s { }; +#if (NGX_HAVE_ADDRINFO_CMSG) + +typedef union { +#if (NGX_HAVE_IP_SENDSRCADDR || NGX_HAVE_IP_RECVDSTADDR) + struct in_addr addr; +#endif + +#if (NGX_HAVE_IP_PKTINFO) + struct in_pktinfo pkt; +#endif + +#if (NGX_HAVE_INET6 && NGX_HAVE_IPV6_RECVPKTINFO) + struct in6_pktinfo pkt6; +#endif +} ngx_addrinfo_t; + +size_t ngx_set_srcaddr_cmsg(struct cmsghdr *cmsg, + struct sockaddr *local_sockaddr); + +#endif + + void ngx_event_recvmsg(ngx_event_t *ev); +ssize_t ngx_sendmsg(ngx_connection_t *c, struct msghdr *msg, int flags); void ngx_udp_rbtree_insert_value(ngx_rbtree_node_t *temp, ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel); void ngx_insert_udp_connection(ngx_connection_t *c, ngx_udp_connection_t *udp, |
