diff options
| author | Igor Sysoev <igor@sysoev.ru> | 2017-09-14 18:16:22 +0300 |
|---|---|---|
| committer | Igor Sysoev <igor@sysoev.ru> | 2017-09-14 18:16:22 +0300 |
| commit | 4d5e39e8c1fdad50937fd440ca7a8df43a97e078 (patch) | |
| tree | c35b4e2f26d65e38728d33deef920771767b6b5d /src/nxt_listen_socket.c | |
| parent | f3280c5dc94e5415970fbbe8d1f03721b85f5553 (diff) | |
| download | unit-4d5e39e8c1fdad50937fd440ca7a8df43a97e078.tar.gz unit-4d5e39e8c1fdad50937fd440ca7a8df43a97e078.tar.bz2 | |
Fixed textual socket name lengths and Unix domain sockaddr length.
Diffstat (limited to 'src/nxt_listen_socket.c')
| -rw-r--r-- | src/nxt_listen_socket.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/nxt_listen_socket.c b/src/nxt_listen_socket.c index 4141c206..4d4a8c5e 100644 --- a/src/nxt_listen_socket.c +++ b/src/nxt_listen_socket.c @@ -176,6 +176,47 @@ fail: } +void +nxt_listen_socket_remote_size(nxt_listen_socket_t *ls, nxt_sockaddr_t *sa) +{ + switch (sa->u.sockaddr.sa_family) { + +#if (NXT_INET6) + + case AF_INET6: + ls->socklen = sizeof(struct sockaddr_in6); + ls->address_length = NXT_INET6_ADDR_STR_LEN; + + break; + +#endif + +#if (NXT_HAVE_UNIX_DOMAIN) + + case AF_UNIX: + /* + * A remote socket is usually unbound and thus has unspecified Unix + * domain sockaddr_un which can be shortcut to 3 bytes. To handle + * a bound remote socket correctly ls->socklen should be larger, see + * comment in nxt_socket.h. + */ + ls->socklen = offsetof(struct sockaddr_un, sun_path) + 1; + ls->address_length = sizeof("unix:") - 1; + + break; + +#endif + + default: + case AF_INET: + ls->socklen = sizeof(struct sockaddr_in); + ls->address_length = NXT_INET_ADDR_STR_LEN; + + break; + } +} + + size_t nxt_listen_socket_pool_min_size(nxt_listen_socket_t *ls) { |
