blob: 6ba9a2d83e59c42e992911e08d7bb26f4356d8c2 [file] [log] [blame]
Barry Warsawcf3d4b51997-01-03 20:03:32 +00001# Not tested:
2# socket.fromfd()
3# sktobj.getsockopt()
4# sktobj.recvfrom()
5# sktobj.sendto()
6# sktobj.setblocking()
7# sktobj.setsockopt()
8# sktobj.shutdown()
9
10
Guido van Rossum2b4d2801997-05-14 21:12:51 +000011from test_support import verbose, TestFailed
Barry Warsawcf3d4b51997-01-03 20:03:32 +000012import socket
13import os
14import time
Barry Warsawdbfb8d41997-01-13 19:35:39 +000015import string
Barry Warsawcf3d4b51997-01-03 20:03:32 +000016
17def missing_ok(str):
18 try:
19 getattr(socket, str)
20 except AttributeError:
21 pass
22
23print socket.error
24
Guido van Rossumf518d5e1997-05-09 01:54:45 +000025socket.AF_INET
Barry Warsawcf3d4b51997-01-03 20:03:32 +000026
Guido van Rossumf518d5e1997-05-09 01:54:45 +000027socket.SOCK_STREAM
28socket.SOCK_DGRAM
29socket.SOCK_RAW
30socket.SOCK_RDM
31socket.SOCK_SEQPACKET
Barry Warsawcf3d4b51997-01-03 20:03:32 +000032
33for optional in ("AF_UNIX",
34
35 "SO_DEBUG", "SO_ACCEPTCONN", "SO_REUSEADDR", "SO_KEEPALIVE",
36 "SO_DONTROUTE", "SO_BROADCAST", "SO_USELOOPBACK", "SO_LINGER",
37 "SO_OOBINLINE", "SO_REUSEPORT", "SO_SNDBUF", "SO_RCVBUF",
38 "SO_SNDLOWAT", "SO_RCVLOWAT", "SO_SNDTIMEO", "SO_RCVTIMEO",
39 "SO_ERROR", "SO_TYPE", "SOMAXCONN",
40
41 "MSG_OOB", "MSG_PEEK", "MSG_DONTROUTE", "MSG_EOR",
42 "MSG_TRUNC", "MSG_CTRUNC", "MSG_WAITALL", "MSG_BTAG",
43 "MSG_ETAG",
44
45 "SOL_SOCKET",
46
47 "IPPROTO_IP", "IPPROTO_ICMP", "IPPROTO_IGMP",
48 "IPPROTO_GGP", "IPPROTO_TCP", "IPPROTO_EGP",
49 "IPPROTO_PUP", "IPPROTO_UDP", "IPPROTO_IDP",
50 "IPPROTO_HELLO", "IPPROTO_ND", "IPPROTO_TP",
51 "IPPROTO_XTP", "IPPROTO_EON", "IPPROTO_BIP",
52 "IPPROTO_RAW", "IPPROTO_MAX",
53
54 "IPPORT_RESERVED", "IPPORT_USERRESERVED",
55
56 "INADDR_ANY", "INADDR_BROADCAST", "INADDR_LOOPBACK",
57 "INADDR_UNSPEC_GROUP", "INADDR_ALLHOSTS_GROUP",
58 "INADDR_MAX_LOCAL_GROUP", "INADDR_NONE",
59
60 "IP_OPTIONS", "IP_HDRINCL", "IP_TOS", "IP_TTL",
61 "IP_RECVOPTS", "IP_RECVRETOPTS", "IP_RECVDSTADDR",
62 "IP_RETOPTS", "IP_MULTICAST_IF", "IP_MULTICAST_TTL",
63 "IP_MULTICAST_LOOP", "IP_ADD_MEMBERSHIP",
64 "IP_DROP_MEMBERSHIP",
65 ):
66 missing_ok(optional)
67
68hostname = socket.gethostname()
69ip = socket.gethostbyname(hostname)
70hname, aliases, ipaddrs = socket.gethostbyaddr(ip)
Barry Warsawdbfb8d41997-01-13 19:35:39 +000071all_host_names = [hname] + aliases
Barry Warsawcf3d4b51997-01-03 20:03:32 +000072
73if verbose:
74 print hostname
75 print ip
76 print hname, aliases, ipaddrs
Barry Warsawdbfb8d41997-01-13 19:35:39 +000077 print all_host_names
Barry Warsawcf3d4b51997-01-03 20:03:32 +000078
Barry Warsawdbfb8d41997-01-13 19:35:39 +000079for name in all_host_names:
80 if string.find(name, '.'):
81 break
82else:
83 print 'FQDN not found'
Barry Warsawcf3d4b51997-01-03 20:03:32 +000084
85print socket.getservbyname('telnet', 'tcp')
86try:
87 socket.getservbyname('telnet', 'udp')
88except socket.error:
89 pass
90
91
Guido van Rossum2b4d2801997-05-14 21:12:51 +000092canfork = hasattr(os, 'fork')
Barry Warsawcf3d4b51997-01-03 20:03:32 +000093try:
94 PORT = 50007
Guido van Rossum2b4d2801997-05-14 21:12:51 +000095 if not canfork or os.fork():
Barry Warsawdce10051997-01-07 21:02:06 +000096 # parent is server
Barry Warsawcf3d4b51997-01-03 20:03:32 +000097 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
98 s.bind(hostname, PORT)
99 s.listen(1)
100 if verbose:
101 print 'parent accepting'
Guido van Rossum2b4d2801997-05-14 21:12:51 +0000102 if canfork:
103 conn, addr = s.accept()
Barry Warsawcf3d4b51997-01-03 20:03:32 +0000104 if verbose:
Guido van Rossum2b4d2801997-05-14 21:12:51 +0000105 print 'connected by', addr
106 # couple of interesting tests while we've got a live socket
107 f = conn.fileno()
108 if verbose:
109 print 'fileno:', f
110 p = conn.getpeername()
111 if verbose:
112 print 'peer:', p
113 n = conn.getsockname()
114 if verbose:
115 print 'sockname:', n
116 f = conn.makefile()
117 if verbose:
118 print 'file obj:', f
119 while 1:
120 data = conn.recv(1024)
121 if not data:
122 break
123 if verbose:
124 print 'received:', data
125 conn.send(data)
126 conn.close()
Barry Warsawcf3d4b51997-01-03 20:03:32 +0000127 else:
Guido van Rossum1d1394e1997-01-17 16:13:15 +0000128 try:
129 # child is client
130 time.sleep(1)
131 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
132 if verbose:
133 print 'child connecting'
134 s.connect(hostname, PORT)
135 msg = 'socket test'
136 s.send(msg)
137 data = s.recv(1024)
138 if msg <> data:
139 print 'parent/client mismatch'
140 s.close()
141 finally:
142 os._exit(1)
Guido van Rossum2b4d2801997-05-14 21:12:51 +0000143except socket.error, msg:
144 raise TestFailed, msg