summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_socket.py
blob: 1e157b9ca8bbaad6a3b5152f4fdae73c437773c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# Not tested:
#	socket.fromfd()
# 	sktobj.getsockopt()
#	sktobj.recvfrom()
#	sktobj.sendto()
#	sktobj.setblocking()
# 	sktobj.setsockopt()
#	sktobj.shutdown()


from test_support import verbose
import socket
import os
import time
import string

def missing_ok(str):
    try:
	getattr(socket, str)
    except AttributeError:
	pass

print socket.error

print socket.AF_INET

print socket.SOCK_STREAM
print socket.SOCK_DGRAM
print socket.SOCK_RAW
print socket.SOCK_RDM
print socket.SOCK_SEQPACKET

for optional in ("AF_UNIX",

		 "SO_DEBUG", "SO_ACCEPTCONN", "SO_REUSEADDR", "SO_KEEPALIVE",
		 "SO_DONTROUTE", "SO_BROADCAST", "SO_USELOOPBACK", "SO_LINGER",
		 "SO_OOBINLINE", "SO_REUSEPORT", "SO_SNDBUF", "SO_RCVBUF",
		 "SO_SNDLOWAT", "SO_RCVLOWAT", "SO_SNDTIMEO", "SO_RCVTIMEO",
		 "SO_ERROR", "SO_TYPE", "SOMAXCONN",

		 "MSG_OOB", "MSG_PEEK", "MSG_DONTROUTE", "MSG_EOR",
		 "MSG_TRUNC", "MSG_CTRUNC", "MSG_WAITALL", "MSG_BTAG",
		 "MSG_ETAG",

		 "SOL_SOCKET",

		 "IPPROTO_IP", "IPPROTO_ICMP", "IPPROTO_IGMP",
		 "IPPROTO_GGP", "IPPROTO_TCP", "IPPROTO_EGP",
		 "IPPROTO_PUP", "IPPROTO_UDP", "IPPROTO_IDP",
		 "IPPROTO_HELLO", "IPPROTO_ND", "IPPROTO_TP",
		 "IPPROTO_XTP", "IPPROTO_EON", "IPPROTO_BIP",
		 "IPPROTO_RAW", "IPPROTO_MAX",

		 "IPPORT_RESERVED", "IPPORT_USERRESERVED",

		 "INADDR_ANY", "INADDR_BROADCAST", "INADDR_LOOPBACK",
		 "INADDR_UNSPEC_GROUP", "INADDR_ALLHOSTS_GROUP",
		 "INADDR_MAX_LOCAL_GROUP", "INADDR_NONE",

		 "IP_OPTIONS", "IP_HDRINCL", "IP_TOS", "IP_TTL",
		 "IP_RECVOPTS", "IP_RECVRETOPTS", "IP_RECVDSTADDR",
		 "IP_RETOPTS", "IP_MULTICAST_IF", "IP_MULTICAST_TTL",
		 "IP_MULTICAST_LOOP", "IP_ADD_MEMBERSHIP",
		 "IP_DROP_MEMBERSHIP",
		 ):
    missing_ok(optional)

hostname = socket.gethostname()
ip = socket.gethostbyname(hostname)
hname, aliases, ipaddrs = socket.gethostbyaddr(ip)
all_host_names = [hname] + aliases

if verbose:
    print hostname
    print ip
    print hname, aliases, ipaddrs
    print all_host_names

for name in all_host_names:
    if string.find(name, '.'):
	break
else:
    print 'FQDN not found'

print socket.getservbyname('telnet', 'tcp')
try:
    socket.getservbyname('telnet', 'udp')
except socket.error:
    pass


try:
    PORT = 50007
    if os.fork():
	# parent is server
	s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	s.bind(hostname, PORT)
	s.listen(1)
	if verbose:
	    print 'parent accepting'
	conn, addr = s.accept()
	if verbose:
	    print 'connected by', addr
	# couple of interesting tests while we've got a live socket
	f = conn.fileno()
	if verbose:
	    print 'fileno:', f
	p = conn.getpeername()
	if verbose:
	    print 'peer:', p
	n = conn.getsockname()
	if verbose:
	    print 'sockname:', n
	f = conn.makefile()
	if verbose:
	    print 'file obj:', f
	while 1:
	    data = conn.recv(1024)
	    if not data:
		break
	    if verbose:
		print 'received:', data
	    conn.send(data)
	conn.close()
    else:
	try:
	    # child is client
	    time.sleep(1)
	    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	    if verbose:
		print 'child connecting'
	    s.connect(hostname, PORT)
	    msg = 'socket test'
	    s.send(msg)
	    data = s.recv(1024)
	    if msg <> data:
		print 'parent/client mismatch'
	    s.close()
	finally:
	    os._exit(1)
except socket.error:
    pass