1+ # Copyright 2016 Google Inc. All Rights Reserved.
2+ #
3+ # Licensed under the Apache License, Version 2.0 (the "License");
4+ # you may not use this file except in compliance with the License.
5+ # You may obtain a copy of the License at
6+ #
7+ # http://www.apache.org/licenses/LICENSE-2.0
8+ #
9+ # Unless required by applicable law or agreed to in writing, software
10+ # distributed under the License is distributed on an "AS IS" BASIS,
11+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+ # See the License for the specific language governing permissions and
13+ # limitations under the License.
14+
15+ from '__go__/net' import (
16+ IPv4 as _IPv4 , IP as _IP , LookupAddr as _LookupAddr , LookupIP as
17+ _LookupIP , ParseIP as _ParseIP )
18+ from '__go__/syscall' import (
19+ AF_INET ,
20+ AF_INET6 ,
21+ AF_UNIX ,
22+ SHUT_RD ,
23+ SHUT_RDWR ,
24+ SHUT_WR ,
25+ SO_REUSEADDR ,
26+ SOL_SOCKET ,
27+ SOCK_DGRAM ,
28+ SOCK_RAW ,
29+ SOCK_SEQPACKET ,
30+ SOCK_STREAM ,
31+ Accept as _Accept ,
32+ Bind as _Bind ,
33+ Close as _Close ,
34+ Connect as _Connect ,
35+ Getpeername as _Getpeername ,
36+ Getsockname as _Getsockname ,
37+ Listen as _Listen ,
38+ Recvfrom as _Recvfrom ,
39+ Sendto as _Sendto ,
40+ SetNonblock as _SetNonblock ,
41+ SetsockoptInt as _SetsockoptInt ,
42+ SetsockoptTimeval as _SetsockoptTimeval ,
43+ Shutdown as _Shutdown ,
44+ SockaddrInet4 as _SockaddrInet4 ,
45+ SockaddrInet6 as _SockaddrInet6 ,
46+ SockaddrUnix as _SockaddrUnix ,
47+ Socket as _Socket ,
48+ Timespec as _Timespec )
49+ import math
50+
51+
52+ #TIPC_*
53+ #has_ipv6 # boolean value indicating if IPv6 is supported
54+ # UNIX
55+ #SO_*
56+ #SOMAXCONN
57+ #MSG_*
58+ #SOL_*
59+ #IPPROTO_*
60+ #IPPORT_*
61+ #INADDR_*
62+ #IP_*
63+ #IPV6_*
64+ #EAI_*
65+ #AI_*
66+ #NI_*
67+ #TCP_*
68+ # Windows
69+ #SIO_*
70+ #RCVALL_*
71+
72+ #SHUT_RD
73+ #SHUT_WR
74+ #SHUT_RDWR
75+
76+
77+ class error (IOError ):
78+ pass
79+
80+
81+ class gaierror (error ):
82+ pass
83+
84+
85+ class herror (error ):
86+ pass
87+
88+
89+ class timeout (error ):
90+ pass
91+
92+
93+ class socket (object ):
94+
95+ def __init__ (self , family = AF_INET , type = SOCK_STREAM , proto = 0 , fd = None ):
96+ if fd is None :
97+ fd , err = _Socket (family , type , proto )
98+ if err :
99+ raise error (err .Error ())
100+ self ._fd = fd
101+ self .family = family
102+ self .type = type
103+ self .proto = proto
104+
105+ def accept (self ):
106+ fd , sockaddr , err = _Accept (self ._fd )
107+ if err :
108+ raise error (err .Error ())
109+ return (socket (self .family , self .type , self .proto , fd ),
110+ self ._get_address (sockaddr ))
111+
112+ def bind (self , address ):
113+ sockaddr = self ._parse_address (address )
114+ err = _Bind (self ._fd , sockaddr )
115+ if err :
116+ raise error (err .Error ())
117+
118+ def close (self ):
119+ _Close (self ._fd )
120+
121+ def connect (self , address ):
122+ self .connect_ex (address )
123+
124+ def connect_ex (self , address ):
125+ addr = self ._parse_address (address )
126+ err = _Connect (self ._fd , addr )
127+ if err :
128+ raise error (err )
129+
130+ def fileno (self ):
131+ return self ._fd
132+
133+ def listen (self , backlog ):
134+ err = _Listen (self ._fd , backlog )
135+ if err :
136+ raise error (err .Error ())
137+
138+ def getpeername (self ):
139+ sockaddr , err = _Getpeername (self ._fd )
140+ if err :
141+ raise error (err .Error ())
142+ return self ._get_address (sockaddr )
143+
144+ def getsockname (self ):
145+ sockaddr , err = _Getsockname (self ._fd )
146+ if err :
147+ raise error (err .Error ())
148+ return self ._get_address (sockaddr )
149+
150+ def getsockopt (self , level , optname , buflen = None ):
151+ val , err = _GetsockoptInt (self ._fd , level , optname )
152+ if err :
153+ raise error (err )
154+ return val
155+
156+ def recv (self , bufsize , flags = 0 ):
157+ data , _ = self .recvfrom (bufsize , flags )
158+ return data
159+
160+ def recv_into (self , buffer , nbytes = 0 , flags = 0 ):
161+ n , _ = self .recvfrom_into (buffer , nbytes , flags )
162+ return n
163+
164+ def recvfrom (self , bufsize , flags = 0 ):
165+ buffer = bytearray (bufsize )
166+ n , addr = self .recvfrom_into (buffer , bufsize , flags )
167+ return str (buffer [:n ]), addr
168+
169+ def recvfrom_into (self , buffer , nbytes = 0 , flags = 0 ):
170+ n , _ , err = _Recvfrom (self ._fd , buffer , flags )
171+ if err :
172+ raise error (err .Error ())
173+ return n , None
174+
175+ def setsockopt (self , level , optname , value ):
176+ err = _SetsockoptInt (self ._fd , level , optname , value )
177+ if err :
178+ raise error (err .Error ())
179+
180+ def send (self , string , flags = 0 ):
181+ sockaddr , err = _Getsockname (self ._fd )
182+ if err :
183+ raise error (err )
184+ err = _Sendto (self ._fd , string , flags , sockaddr )
185+ if err :
186+ raise error (err )
187+ return len (string )
188+
189+ def sendto (self , string , flags_or_address , address = None ):
190+ raise NotImplementedError
191+
192+ def sendall (self , string , flags = 0 ):
193+ return self .send (string , flags )
194+
195+ def setblocking (self , flag ):
196+ err = _SetNonblock (fd , int (not flag ))
197+ if err :
198+ raise error (err .Error ())
199+
200+ def settimeout (self , value ):
201+ if value is None :
202+ timevalue = None
203+ else :
204+ timeval = _Timeval .new ()
205+ frac , integer = math .modf (value )
206+ timeval .Sec = int (integer )
207+ timeval .Usec = int (frac * 1000000.0 )
208+ err = _SetsockoptTimeval (self ._fd , level , SO_RCVTIMEO , timeval )
209+ if err :
210+ raise error (err )
211+
212+ def gettimeout (self ):
213+ raise NotImplementedError
214+
215+ def shutdown (self , how ):
216+ err = _Shutdown (self ._fd , how )
217+ if err :
218+ raise error (err )
219+
220+ def _parse_address (self , address ):
221+ if self .family == AF_UNIX :
222+ sockaddr = _SockaddrUnix .new ()
223+ sockaddr .Name , = address
224+ return sockaddr
225+ host , port = address
226+ if not host :
227+ host = '127.0.0.1'
228+ ip = _ParseIP (host )
229+ if ip :
230+ ips = [ip ]
231+ else :
232+ ips , err = _LookupIP (host )
233+ if err :
234+ raise error (err .Error ())
235+ if self .family == AF_INET :
236+ convert = _IP .To4
237+ else :
238+ convert = _IP .To6
239+ for ip in ips :
240+ ip = convert (ip )
241+ if ip :
242+ break
243+ else :
244+ raise error ('cannot resolve address' )
245+ if self .family == AF_INET :
246+ sockaddr = _SockaddrInet4 .new ()
247+ else :
248+ sockaddr = _SockaddrInet6 .new ()
249+ sockaddr .Port = port
250+ sockaddr .Addr [:] = ip
251+ return sockaddr
252+
253+ def _get_address (self , sockaddr ):
254+ if isinstance (sockaddr , type (_SockaddrUnix .new ())):
255+ return (sockaddr .Name ,)
256+ return _IPv4 (* sockaddr .Addr ).String (), sockaddr .Port
257+
258+
259+ def fromfd (fd , family , type , proto = None ):
260+ return socket (family , type , proto , fd )
261+
262+
263+ def gethostbyname (hostname ):
264+ raise NotImplementedError
265+
266+
267+ def gethostbyaddr (ipaddr ):
268+ names , err = _LookupAddr (ipaddr )
269+ if err :
270+ return error (err )
271+ return names [0 ], [], [ipaddr ]
272+
273+
274+ def gethostname ():
275+ raise NotImplementedError
276+
277+
278+ def getprotobyname (proto ):
279+ raise NotImplementedError
280+
281+
282+ # --> port number
283+ def getservbyname (servicename , protocolname = None ):
284+ raise NotImplementedError
285+
286+
287+ def getservbyport (portnumber , protocolname = None ):
288+ raise NotImplementedError
289+
290+
291+ def socketpair (family = None , type = None , proto = None ):
292+ raise NotImplementedError
293+
294+
295+ def ntohs (n ):
296+ raise NotImplementedError
297+
298+
299+ def ntohl (n ):
300+ raise NotImplementedError
301+
302+
303+ def htons (n ):
304+ raise NotImplementedError
305+
306+
307+ def htonl (n ):
308+ raise NotImplementedError
309+
310+
311+ # --> List of (family, socktype, proto, canonname, sockaddr)
312+ def getaddrinfo (host , port , family = None , socktype = None , proto = None , flags = None ):
313+ raise NotImplementedError
314+
315+
316+ # --> (host, port)
317+ def getnameinfo (sockaddr , flags ):
318+ raise NotImplementedError
319+
320+
321+ # -> 32-bit packed IP representation
322+ def inet_aton (ipaddr ):
323+ return '' .join (chr (int (n )) for n in ipaddr .split ('.' ))
324+
325+
326+ # -> IP address string
327+ def inet_ntoa (ipaddr ):
328+ return '' .join (ord (c ) for c in ipaddr )
329+
330+
331+ # -> None | float
332+ def getdefaulttimeout ():
333+ raise NotImplementedError
334+
335+
336+ def setdefaulttimeout (to ):
337+ raise NotImplementedError
0 commit comments