Commit 388637d3 authored by Amaury Forgeot d'Arc's avatar Amaury Forgeot d'Arc

Remove last remnants of the ipaddr package.

The changes in mcast.py come from the first version of the patch for issue5379.
parent 0115e098
...@@ -14,7 +14,6 @@ MYGROUP_4 = '225.0.0.250' ...@@ -14,7 +14,6 @@ MYGROUP_4 = '225.0.0.250'
MYGROUP_6 = 'ff15:7079:7468:6f6e:6465:6d6f:6d63:6173' MYGROUP_6 = 'ff15:7079:7468:6f6e:6465:6d6f:6d63:6173'
MYTTL = 1 # Increase to reach other networks MYTTL = 1 # Increase to reach other networks
import ipaddr
import time import time
import struct import struct
import socket import socket
...@@ -28,38 +27,31 @@ def main(): ...@@ -28,38 +27,31 @@ def main():
else: else:
receiver(group) receiver(group)
def _sockfam(ip):
"""Returns the family argument of socket.socket"""
if ip.version == 4:
return socket.AF_INET
elif ip.version == 6:
return socket.AF_INET6
else:
raise ValueError('IPv' + ip.version + ' is not supported')
def sender(group): def sender(group):
group_ip = ipaddr.IP(group) addrinfo = socket.getaddrinfo(group, None)[0]
s = socket.socket(_sockfam(group_ip), socket.SOCK_DGRAM) s = socket.socket(addrinfo[0], socket.SOCK_DGRAM)
# Set Time-to-live (optional) # Set Time-to-live (optional)
ttl_bin = struct.pack('@i', MYTTL) ttl_bin = struct.pack('@i', MYTTL)
if group_ip.version == 4: if addrinfo[0] == socket.AF_INET: # IPv4
s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, ttl_bin) s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, ttl_bin)
else: else:
s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_HOPS, ttl_bin) s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_HOPS, ttl_bin)
while True: while True:
data = repr(time.time()) data = repr(time.time())
s.sendto(data + '\0', (group_ip.ip_ext_full, MYPORT)) s.sendto(data + '\0', (addrinfo[4][0], MYPORT))
time.sleep(1) time.sleep(1)
def receiver(group): def receiver(group):
group_ip = ipaddr.IP(group) # Look up multicast group address in name server and find out IP version
addrinfo = socket.getaddrinfo(group, None)[0]
# Create a socket # Create a socket
s = socket.socket(_sockfam(group_ip), socket.SOCK_DGRAM) s = socket.socket(addrinfo[0], socket.SOCK_DGRAM)
# Allow multiple copies of this program on one machine # Allow multiple copies of this program on one machine
# (not strictly needed) # (not strictly needed)
...@@ -68,12 +60,13 @@ def receiver(group): ...@@ -68,12 +60,13 @@ def receiver(group):
# Bind it to the port # Bind it to the port
s.bind(('', MYPORT)) s.bind(('', MYPORT))
group_bin = socket.inet_pton(addrinfo[0], addrinfo[4][0])
# Join group # Join group
if group_ip.version == 4: # IPv4 if addrinfo[0] == socket.AF_INET: # IPv4
mreq = group_ip.packed + struct.pack('=I', socket.INADDR_ANY) mreq = group_bin + struct.pack('=I', socket.INADDR_ANY)
s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
else: else:
mreq = group_ip.packed + struct.pack('@I', 0) mreq = group_bin + struct.pack('@I', 0)
s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, mreq) s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, mreq)
# Loop, printing any data we receive # Loop, printing any data we receive
......
...@@ -440,11 +440,6 @@ The module :mod:`socket` exports the following constants and functions: ...@@ -440,11 +440,6 @@ The module :mod:`socket` exports the following constants and functions:
Availability: Unix (maybe not all platforms). Availability: Unix (maybe not all platforms).
.. seealso::
:func:`ipaddr.BaseIP.packed`
Platform-independent conversion to a packed, binary format.
.. versionadded:: 2.3 .. versionadded:: 2.3
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment