]> granicus.if.org Git - python/commitdiff
Merged revisions 73537 via svnmerge from
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>
Tue, 23 Jun 2009 22:01:54 +0000 (22:01 +0000)
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>
Tue, 23 Jun 2009 22:01:54 +0000 (22:01 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r73537 | amaury.forgeotdarc | 2009-06-23 23:53:46 +0200 (mar., 23 juin 2009) | 3 lines

  Remove last remnants of the ipaddr package.
  The changes in mcast.py come from the first version of the patch for issue5379.
........

Demo/sockets/mcast.py
Doc/library/socket.rst

index d32a9df7af0d3fc3da4f29f7f30c64f77129d5ce..b7f85567aaa55fab499d87ef2c98a85d683780ca 100755 (executable)
@@ -14,7 +14,6 @@ MYGROUP_4 = '225.0.0.250'
 MYGROUP_6 = 'ff15:7079:7468:6f6e:6465:6d6f:6d63:6173'
 MYTTL = 1 # Increase to reach other networks
 
-import ipaddr
 import time
 import struct
 import socket
@@ -28,38 +27,31 @@ def main():
     else:
         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):
-    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)
     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)
     else:
         s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_HOPS, ttl_bin)
 
     while True:
         data = repr(time.time()).encode('utf-8') + b'\0'
-        s.sendto(data, (group_ip.ip_ext_full, MYPORT))
+        s.sendto(data, (addrinfo[4][0], MYPORT))
         time.sleep(1)
 
 
 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
-    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
     # (not strictly needed)
@@ -68,12 +60,13 @@ def receiver(group):
     # Bind it to the port
     s.bind(('', MYPORT))
 
+    group_bin = socket.inet_pton(addrinfo[0], addrinfo[4][0])
     # Join group
-    if group_ip.version == 4: # IPv4
-        mreq = group_ip.packed + struct.pack('=I', socket.INADDR_ANY)
+    if addrinfo[0] == socket.AF_INET: # IPv4
+        mreq = group_bin + struct.pack('=I', socket.INADDR_ANY)
         s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
     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)
 
     # Loop, printing any data we receive
index f896b4331e72fdd87c5bf296b50c4bded5c173d2..cda8feea71199ac2e9ec115a2143e35e29c56e20 100644 (file)
@@ -422,11 +422,6 @@ The module :mod:`socket` exports the following constants and functions:
 
    Availability: Unix (maybe not all platforms).
 
-   .. seealso::
-
-      :func:`ipaddr.BaseIP.packed`
-         Platform-independent conversion to a packed, binary format.
-
 
 .. function:: inet_ntop(address_family, packed_ip)