You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Jens Geyer (Jira)" <ji...@apache.org> on 2020/04/26 11:27:00 UTC

[jira] [Assigned] (THRIFT-5177) getaddrinfo() should not be used for Unix sockets

     [ https://issues.apache.org/jira/browse/THRIFT-5177?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jens Geyer reassigned THRIFT-5177:
----------------------------------

    Assignee: Dmitry Maluka

> getaddrinfo() should not be used for Unix sockets
> -------------------------------------------------
>
>                 Key: THRIFT-5177
>                 URL: https://issues.apache.org/jira/browse/THRIFT-5177
>             Project: Thrift
>          Issue Type: Bug
>          Components: C++ - Library
>            Reporter: Dmitry Maluka
>            Assignee: Dmitry Maluka
>            Priority: Minor
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> TServerSocket::listen() should not call getaddrinfo() for Unix sockets. The results returned by getaddrinfo() are not used for Unix socket anyway.
> Depending on implementation getaddrinfo() may not support Unix sockets properly. In particular, the glibc implementation treats the Unix socket as a network socket and tries to do a bunch of network related stuff with it:
> {noformat}
> 2263       0.000074 write(1, "[18] ++ getaddrinfo()\n", 22) = 22 <0.000032>
> 2263       0.000095 socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE) = 73 <0.000038>
> 2263       0.000080 bind(73, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0 <0.000034>
> 2263       0.000085 getsockname(73, {sa_family=AF_NETLINK, pid=-1643670328, groups=00000000}, [12]) = 0 <0.000026>
> 2263       0.000083 gettimeofday({18, 941549}, NULL) = 0 <0.000024>
> 2263       0.000081 sendto(73, "\24\0\0\0\26\0\1\3\22\0\0\0\0\0\0\0\0\0\0\0", 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20 <0.000061>
> 2263       0.000119 recvmsg(73, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"L\0\0\0\24\0\2\0\22\0\0\0\310\224\7\236\2\10\200\376\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 76 <0.000041>
> 2263       0.000131 recvmsg(73, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\24\0\0\0\3\0\2\0\22\0\0\0\310\224\7\236\0\0\0\0", 4096}], msg_controllen=0, msg_flags=0}, 0) = 20 <0.000029>
> 2263       0.000100 close(73)           = 0 <0.000049>
> 2263       0.000101 open("/etc/gai.conf", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) <0.000045>
> 2263       0.000102 futex(0xf71e5b50, FUTEX_WAKE_PRIVATE, 2147483647) = 0 <0.000025>
> 2263       0.000067 socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP) = -1 EAFNOSUPPORT (Address family not supported by protocol) <0.000167>
> 2263       0.000213 socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 73 <0.000034>
> 2263       0.000076 connect(73, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, 16) = 0 <0.000049>
> 2263       0.000103 getsockname(73, {sa_family=AF_INET, sin_port=htons(55287), sin_addr=inet_addr("127.0.0.1")}, [16]) = 0 <0.000026>
> 2263       0.000085 close(73)           = 0 <0.000040>
> 2263       0.000084 gettimeofday({18, 942811}, NULL) = 0 <0.000025>
> 2263       0.000074 write(1, "[18] -- getaddrinfo() ret=0\n", 28) = 28 <0.000032>
> {noformat}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)