summaryrefslogtreecommitdiff
path: root/Tools/demo/mcast.py
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2022-10-03 17:09:02 +0200
committerGitHub <noreply@github.com>2022-10-03 17:09:02 +0200
commit64fe34371722d90448e0d1a0c04e7ed106f5f70a (patch)
tree3469166def39cfc26dfdce75062fddd5ab0d1d98 /Tools/demo/mcast.py
parente6f9ec5c031bd996fcd5f463c407beef0b743b49 (diff)
downloadcpython-git-64fe34371722d90448e0d1a0c04e7ed106f5f70a.tar.gz
gh-97681: Remove Tools/demo/ directory (#97682)
Remove the Tools/demo/ directory which contained old demo scripts. A copy can be found in the old-demos project: https://github.com/gvanrossum/old-demos Remove the following old demo scripts: * beer.py * eiffel.py * hanoi.py * life.py * markov.py * mcast.py * queens.py * redemo.py * rpython.py * rpythond.py * sortvisu.py * spreadsheet.py * vector.py Changes: * Remove a reference to the redemo.py script in the regex howto documentation. * Remove a reference to the removed Tools/demo/ directory in the curses documentation. * Update PC/layout/ to remove the reference to Tools/demo/ directory.
Diffstat (limited to 'Tools/demo/mcast.py')
-rwxr-xr-xTools/demo/mcast.py82
1 files changed, 0 insertions, 82 deletions
diff --git a/Tools/demo/mcast.py b/Tools/demo/mcast.py
deleted file mode 100755
index 924c7c3e80..0000000000
--- a/Tools/demo/mcast.py
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/usr/bin/env python3
-
-"""
-Send/receive UDP multicast packets.
-Requires that your OS kernel supports IP multicast.
-
-Usage:
- mcast -s (sender, IPv4)
- mcast -s -6 (sender, IPv6)
- mcast (receivers, IPv4)
- mcast -6 (receivers, IPv6)
-"""
-
-MYPORT = 8123
-MYGROUP_4 = '225.0.0.250'
-MYGROUP_6 = 'ff15:7079:7468:6f6e:6465:6d6f:6d63:6173'
-MYTTL = 1 # Increase to reach other networks
-
-import time
-import struct
-import socket
-import sys
-
-def main():
- group = MYGROUP_6 if "-6" in sys.argv[1:] else MYGROUP_4
-
- if "-s" in sys.argv[1:]:
- sender(group)
- else:
- receiver(group)
-
-
-def sender(group):
- addrinfo = socket.getaddrinfo(group, None)[0]
-
- s = socket.socket(addrinfo[0], socket.SOCK_DGRAM)
-
- # Set Time-to-live (optional)
- ttl_bin = struct.pack('@i', MYTTL)
- 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, (addrinfo[4][0], MYPORT))
- time.sleep(1)
-
-
-def receiver(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(addrinfo[0], socket.SOCK_DGRAM)
-
- # Allow multiple copies of this program on one machine
- # (not strictly needed)
- s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
-
- # Bind it to the port
- s.bind(('', MYPORT))
-
- group_bin = socket.inet_pton(addrinfo[0], addrinfo[4][0])
- # Join group
- 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_bin + struct.pack('@I', 0)
- s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, mreq)
-
- # Loop, printing any data we receive
- while True:
- data, sender = s.recvfrom(1500)
- while data[-1:] == '\0': data = data[:-1] # Strip trailing \0's
- print(str(sender) + ' ' + repr(data))
-
-
-if __name__ == '__main__':
- main()