blob: 92b933684410de4d0416b3fecb85868dd6e1eceb [file] [log] [blame]
Guido van Rossum228b8e81997-04-02 06:13:34 +00001# Not tested:
Guido van Rossum548703a1998-03-26 22:14:20 +00002# socket.fromfd()
3# sktobj.getsockopt()
4# sktobj.recvfrom()
5# sktobj.sendto()
6# sktobj.setblocking()
7# sktobj.setsockopt()
8# sktobj.shutdown()
Guido van Rossum228b8e81997-04-02 06:13:34 +00009
10
Guido van Rossumf1e63541997-05-22 20:48:03 +000011from test_support import verbose, TestFailed
Guido van Rossum228b8e81997-04-02 06:13:34 +000012import socket
13import os
14import time
15import string
16
17def missing_ok(str):
18 try:
Guido van Rossum548703a1998-03-26 22:14:20 +000019 getattr(socket, str)
Guido van Rossum228b8e81997-04-02 06:13:34 +000020 except AttributeError:
Guido van Rossum548703a1998-03-26 22:14:20 +000021 pass
Guido van Rossum228b8e81997-04-02 06:13:34 +000022
Guido van Rossuma11cccc1997-10-06 20:19:59 +000023try: raise socket.error
24except socket.error: print "socket.error"
Guido van Rossum228b8e81997-04-02 06:13:34 +000025
Guido van Rossumf1e63541997-05-22 20:48:03 +000026socket.AF_INET
Guido van Rossum228b8e81997-04-02 06:13:34 +000027
Guido van Rossumf1e63541997-05-22 20:48:03 +000028socket.SOCK_STREAM
29socket.SOCK_DGRAM
30socket.SOCK_RAW
31socket.SOCK_RDM
32socket.SOCK_SEQPACKET
Guido van Rossum228b8e81997-04-02 06:13:34 +000033
34for optional in ("AF_UNIX",
35
Guido van Rossum548703a1998-03-26 22:14:20 +000036 "SO_DEBUG", "SO_ACCEPTCONN", "SO_REUSEADDR", "SO_KEEPALIVE",
37 "SO_DONTROUTE", "SO_BROADCAST", "SO_USELOOPBACK", "SO_LINGER",
38 "SO_OOBINLINE", "SO_REUSEPORT", "SO_SNDBUF", "SO_RCVBUF",
39 "SO_SNDLOWAT", "SO_RCVLOWAT", "SO_SNDTIMEO", "SO_RCVTIMEO",
40 "SO_ERROR", "SO_TYPE", "SOMAXCONN",
Guido van Rossum228b8e81997-04-02 06:13:34 +000041
Guido van Rossum548703a1998-03-26 22:14:20 +000042 "MSG_OOB", "MSG_PEEK", "MSG_DONTROUTE", "MSG_EOR",
43 "MSG_TRUNC", "MSG_CTRUNC", "MSG_WAITALL", "MSG_BTAG",
44 "MSG_ETAG",
Guido van Rossum228b8e81997-04-02 06:13:34 +000045
Guido van Rossum548703a1998-03-26 22:14:20 +000046 "SOL_SOCKET",
Guido van Rossum228b8e81997-04-02 06:13:34 +000047
Guido van Rossum548703a1998-03-26 22:14:20 +000048 "IPPROTO_IP", "IPPROTO_ICMP", "IPPROTO_IGMP",
49 "IPPROTO_GGP", "IPPROTO_TCP", "IPPROTO_EGP",
50 "IPPROTO_PUP", "IPPROTO_UDP", "IPPROTO_IDP",
51 "IPPROTO_HELLO", "IPPROTO_ND", "IPPROTO_TP",
52 "IPPROTO_XTP", "IPPROTO_EON", "IPPROTO_BIP",
53 "IPPROTO_RAW", "IPPROTO_MAX",
Guido van Rossum228b8e81997-04-02 06:13:34 +000054
Guido van Rossum548703a1998-03-26 22:14:20 +000055 "IPPORT_RESERVED", "IPPORT_USERRESERVED",
Guido van Rossum228b8e81997-04-02 06:13:34 +000056
Guido van Rossum548703a1998-03-26 22:14:20 +000057 "INADDR_ANY", "INADDR_BROADCAST", "INADDR_LOOPBACK",
58 "INADDR_UNSPEC_GROUP", "INADDR_ALLHOSTS_GROUP",
59 "INADDR_MAX_LOCAL_GROUP", "INADDR_NONE",
Guido van Rossum228b8e81997-04-02 06:13:34 +000060
Guido van Rossum548703a1998-03-26 22:14:20 +000061 "IP_OPTIONS", "IP_HDRINCL", "IP_TOS", "IP_TTL",
62 "IP_RECVOPTS", "IP_RECVRETOPTS", "IP_RECVDSTADDR",
63 "IP_RETOPTS", "IP_MULTICAST_IF", "IP_MULTICAST_TTL",
64 "IP_MULTICAST_LOOP", "IP_ADD_MEMBERSHIP",
65 "IP_DROP_MEMBERSHIP",
66 ):
Guido van Rossum228b8e81997-04-02 06:13:34 +000067 missing_ok(optional)
68
Guido van Rossumff712aa1997-08-15 00:45:26 +000069socktype = socket.SocketType
Guido van Rossum228b8e81997-04-02 06:13:34 +000070hostname = socket.gethostname()
71ip = socket.gethostbyname(hostname)
72hname, aliases, ipaddrs = socket.gethostbyaddr(ip)
73all_host_names = [hname] + aliases
74
75if verbose:
76 print hostname
77 print ip
78 print hname, aliases, ipaddrs
79 print all_host_names
80
81for name in all_host_names:
82 if string.find(name, '.'):
Guido van Rossum548703a1998-03-26 22:14:20 +000083 break
Guido van Rossum228b8e81997-04-02 06:13:34 +000084else:
85 print 'FQDN not found'
86
87print socket.getservbyname('telnet', 'tcp')
88try:
89 socket.getservbyname('telnet', 'udp')
90except socket.error:
91 pass
92
93
Guido van Rossumf1e63541997-05-22 20:48:03 +000094canfork = hasattr(os, 'fork')
Guido van Rossum228b8e81997-04-02 06:13:34 +000095try:
96 PORT = 50007
Guido van Rossumf1e63541997-05-22 20:48:03 +000097 if not canfork or os.fork():
Guido van Rossum548703a1998-03-26 22:14:20 +000098 # parent is server
99 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Guido van Rossum3e06ab12000-06-29 19:35:29 +0000100 s.bind(("127.0.0.1", PORT))
Guido van Rossum548703a1998-03-26 22:14:20 +0000101 s.listen(1)
102 if verbose:
103 print 'parent accepting'
104 if canfork:
105 conn, addr = s.accept()
106 if verbose:
107 print 'connected by', addr
108 # couple of interesting tests while we've got a live socket
109 f = conn.fileno()
110 if verbose:
111 print 'fileno:', f
112 p = conn.getpeername()
113 if verbose:
114 print 'peer:', p
115 n = conn.getsockname()
116 if verbose:
117 print 'sockname:', n
118 f = conn.makefile()
119 if verbose:
120 print 'file obj:', f
121 while 1:
122 data = conn.recv(1024)
123 if not data:
124 break
125 if verbose:
126 print 'received:', data
127 conn.send(data)
128 conn.close()
Guido van Rossum228b8e81997-04-02 06:13:34 +0000129 else:
Guido van Rossum548703a1998-03-26 22:14:20 +0000130 try:
131 # child is client
132 time.sleep(5)
133 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
134 if verbose:
135 print 'child connecting'
Guido van Rossum3e06ab12000-06-29 19:35:29 +0000136 s.connect(("127.0.0.1", PORT))
Guido van Rossum548703a1998-03-26 22:14:20 +0000137 msg = 'socket test'
138 s.send(msg)
139 data = s.recv(1024)
140 if msg <> data:
141 print 'parent/client mismatch'
142 s.close()
143 finally:
144 os._exit(1)
Guido van Rossumf1e63541997-05-22 20:48:03 +0000145except socket.error, msg:
146 raise TestFailed, msg