blob: 1e157b9ca8bbaad6a3b5152f4fdae73c437773c3 [file] [log] [blame]
Guido van Rossum228b8e81997-04-02 06:13:34 +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
11from test_support import verbose
12import socket
13import os
14import time
15import string
16
17def missing_ok(str):
18 try:
19 getattr(socket, str)
20 except AttributeError:
21 pass
22
23print socket.error
24
25print socket.AF_INET
26
27print socket.SOCK_STREAM
28print socket.SOCK_DGRAM
29print socket.SOCK_RAW
30print socket.SOCK_RDM
31print socket.SOCK_SEQPACKET
32
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)
71all_host_names = [hname] + aliases
72
73if verbose:
74 print hostname
75 print ip
76 print hname, aliases, ipaddrs
77 print all_host_names
78
79for name in all_host_names:
80 if string.find(name, '.'):
81 break
82else:
83 print 'FQDN not found'
84
85print socket.getservbyname('telnet', 'tcp')
86try:
87 socket.getservbyname('telnet', 'udp')
88except socket.error:
89 pass
90
91
92try:
93 PORT = 50007
94 if os.fork():
95 # parent is server
96 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
97 s.bind(hostname, PORT)
98 s.listen(1)
99 if verbose:
100 print 'parent accepting'
101 conn, addr = s.accept()
102 if verbose:
103 print 'connected by', addr
104 # couple of interesting tests while we've got a live socket
105 f = conn.fileno()
106 if verbose:
107 print 'fileno:', f
108 p = conn.getpeername()
109 if verbose:
110 print 'peer:', p
111 n = conn.getsockname()
112 if verbose:
113 print 'sockname:', n
114 f = conn.makefile()
115 if verbose:
116 print 'file obj:', f
117 while 1:
118 data = conn.recv(1024)
119 if not data:
120 break
121 if verbose:
122 print 'received:', data
123 conn.send(data)
124 conn.close()
125 else:
126 try:
127 # child is client
128 time.sleep(1)
129 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
130 if verbose:
131 print 'child connecting'
132 s.connect(hostname, PORT)
133 msg = 'socket test'
134 s.send(msg)
135 data = s.recv(1024)
136 if msg <> data:
137 print 'parent/client mismatch'
138 s.close()
139 finally:
140 os._exit(1)
141except socket.error:
142 pass