Skip to content
This repository was archived by the owner on Jul 11, 2022. It is now read-only.

Commit aed18e8

Browse files
alvassinyurishkuro
andauthored
Add ipv6 support (#339)
* Add ipv6 support Signed-off-by: Alexander Vasin <[email protected]> * Increase test coverage Signed-off-by: Yuri Shkuro <[email protected]> Co-authored-by: Yuri Shkuro <[email protected]> Co-authored-by: Yuri Shkuro <[email protected]>
1 parent 1341016 commit aed18e8

File tree

2 files changed

+58
-5
lines changed

2 files changed

+58
-5
lines changed

jaeger_client/TUDPTransport.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from thrift.transport.TTransport import TTransportBase
1818
import socket
1919

20+
2021
logger = logging.getLogger('jaeger_tracing')
2122

2223

@@ -25,16 +26,30 @@ class TUDPTransport(TTransportBase, object):
2526
TUDPTransport implements just enough of the tornado transport interface
2627
to work for blindly sending UDP packets.
2728
"""
29+
30+
DEFAULT_SOCKET_FAMILY = socket.AF_INET
31+
2832
def __init__(self, host, port, blocking=False):
2933
self.transport_host = host
3034
self.transport_port = port
31-
self.transport_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
32-
if blocking:
33-
blocking = 1
34-
else:
35-
blocking = 0
35+
36+
self.transport_sock = self._create_socket()
3637
self.transport_sock.setblocking(blocking)
3738

39+
def _create_socket(self) -> socket.socket:
40+
family, type, proto = (self.DEFAULT_SOCKET_FAMILY, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
41+
42+
try:
43+
addrinfo = socket.getaddrinfo(
44+
self.transport_host, self.transport_port, type=socket.SOCK_DGRAM
45+
)
46+
if addrinfo:
47+
family, type, proto, *_ = addrinfo[0]
48+
except socket.gaierror:
49+
pass
50+
51+
return socket.socket(family, type, proto)
52+
3853
def write(self, buf):
3954
"""Raw write to the UDP socket."""
4055
return self.transport_sock.sendto(

tests/test_TUDPTransport.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15+
import socket
1516
import unittest
17+
from unittest import mock
18+
19+
import pytest
1620

1721
from jaeger_client.TUDPTransport import TUDPTransport
1822

@@ -44,3 +48,37 @@ def test_close(self):
4448
with self.assertRaises(Exception):
4549
# Something bad should happen if we send on a closed socket..
4650
self.t.write(b'hello')
51+
52+
53+
def test_created_socket_default_family():
54+
transport = TUDPTransport('unknown-host', 12345)
55+
sock = transport._create_socket()
56+
assert sock.family == TUDPTransport.DEFAULT_SOCKET_FAMILY
57+
58+
59+
@pytest.mark.parametrize('addrinfo,expected_family', (
60+
(
61+
(
62+
socket.AddressFamily.AF_INET6, socket.SocketKind.SOCK_DGRAM,
63+
17, '', ('aced:a11:7e57', 12345, 0, 0)
64+
),
65+
socket.AF_INET6
66+
),
67+
(
68+
(
69+
socket.AddressFamily.AF_INET, socket.SocketKind.SOCK_DGRAM,
70+
17, '', ('127.0.0.1', 12345)
71+
),
72+
socket.AF_INET
73+
),
74+
(
75+
None,
76+
TUDPTransport.DEFAULT_SOCKET_FAMILY
77+
)
78+
))
79+
def test_created_socket_specified_family(addrinfo, expected_family):
80+
return_value = [addrinfo] if addrinfo else []
81+
with mock.patch('socket.getaddrinfo', return_value=return_value):
82+
transport = TUDPTransport('ipv6-host', 12345)
83+
sock = transport._create_socket()
84+
assert sock.family == expected_family

0 commit comments

Comments
 (0)