]> granicus.if.org Git - python/commitdiff
Remove last remnants of the ipaddr package.
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>
Tue, 23 Jun 2009 21:53:46 +0000 (21:53 +0000)
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>
Tue, 23 Jun 2009 21:53:46 +0000 (21:53 +0000)
The changes in mcast.py come from the first version of the patch for issue5379.

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

index 25fde79fddaee7d6bd3a0919687f4c25d7b9414e..18739595c302bcf246e5ce6b80297b981aea1d8f 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())
-        s.sendto(data + '\0', (group_ip.ip_ext_full, MYPORT))
+        s.sendto(data + '\0', (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 97fe268a55bdd5e50ef5149cd10d872b93132ef4..b59b60902db6c8d79b879d50a9f7f6cec1c7ed3d 100644 (file)
@@ -440,11 +440,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.
-
    .. versionadded:: 2.3