@@ -56,7 +56,8 @@ def datagram_received(self, data, addr):
56
56
57
57
s_transport , server = self .loop .run_until_complete (coro )
58
58
59
- host , port , * _ = s_transport .get_extra_info ('sockname' )
59
+ remote_addr = s_transport .get_extra_info ('sockname' )
60
+ host , port , * _ = remote_addr
60
61
61
62
self .assertIsInstance (server , TestMyDatagramProto )
62
63
self .assertEqual ('INITIALIZED' , server .state )
@@ -86,6 +87,36 @@ def datagram_received(self, data, addr):
86
87
# received
87
88
self .assertEqual (8 , client .nbytes )
88
89
90
+ # https://github.com/MagicStack/uvloop/issues/319
91
+ # uvloop should behave the same as asyncio when given remote_addr
92
+ transport .sendto (b'xxx' , remote_addr )
93
+ tb .run_until (
94
+ self .loop , lambda : server .nbytes > 3 or client .done .done ())
95
+ self .assertEqual (6 , server .nbytes )
96
+ tb .run_until (self .loop , lambda : client .nbytes > 8 )
97
+
98
+ # received
99
+ self .assertEqual (16 , client .nbytes )
100
+
101
+ # reject sendto with a different port
102
+ with self .assertRaisesRegex (
103
+ ValueError , "Invalid address.*" + repr (remote_addr )
104
+ ):
105
+ bad_addr = list (remote_addr )
106
+ bad_addr [1 ] += 1
107
+ bad_addr = tuple (bad_addr )
108
+ transport .sendto (b"xxx" , bad_addr )
109
+
110
+ # reject sento with unresolved hostname
111
+ if remote_addr [0 ] != lc_addr [0 ]:
112
+ with self .assertRaisesRegex (
113
+ ValueError , "Invalid address.*" + repr (remote_addr )
114
+ ):
115
+ bad_addr = list (remote_addr )
116
+ bad_addr [0 ] = lc_addr [0 ]
117
+ bad_addr = tuple (bad_addr )
118
+ transport .sendto (b"xxx" , bad_addr )
119
+
89
120
# extra info is available
90
121
self .assertIsNotNone (transport .get_extra_info ('sockname' ))
91
122
@@ -100,6 +131,10 @@ def test_create_datagram_endpoint_addrs_ipv4(self):
100
131
self ._test_create_datagram_endpoint_addrs (
101
132
socket .AF_INET , ('127.0.0.1' , 0 ))
102
133
134
+ def test_create_datagram_endpoint_addrs_ipv4_nameaddr (self ):
135
+ self ._test_create_datagram_endpoint_addrs (
136
+ socket .AF_INET , ('localhost' , 0 ))
137
+
103
138
@unittest .skipUnless (tb .has_IPv6 , 'no IPv6' )
104
139
def test_create_datagram_endpoint_addrs_ipv6 (self ):
105
140
self ._test_create_datagram_endpoint_addrs (
0 commit comments