annotate Modules/socketmodule.c @ 21713:e223397b26fa 2.2

Include <unistd.h> in Python.h. Fixes #500924.
author Martin v. Löwis <martin@v.loewis.de>
date Sat, 12 Jan 2002 11:13:24 +0000
parents 8d51c7539719
children 8b636fcb8615 40631ae74b17
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 /* Socket module */
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
3 /* SSL support based on patches by Brian E Gallew and Laszlo Kovacs */
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
4
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 /*
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 This module provides an interface to Berkeley socket IPC.
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
7
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 Limitations:
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
10 - only AF_INET, AF_INET6 and AF_UNIX address families are supported in a
16410
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
11 portable manner, though AF_PACKET is supported under Linux.
20727
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
12 - no read/write operations (use sendall/recv or makefile instead)
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
13 - additional restrictions apply on Windows (compensated for by socket.py)
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
14
2565
912813d573b4 fixed up comments describing interface
Guido van Rossum <guido@python.org>
parents: 2532
diff changeset
15 Module interface:
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16
2565
912813d573b4 fixed up comments describing interface
Guido van Rossum <guido@python.org>
parents: 2532
diff changeset
17 - socket.error: exception raised for socket specific errors
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
18 - socket.gaierror: exception raised for getaddrinfo/getnameinfo errors,
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
19 a subclass of socket.error
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
20 - socket.herror: exception raised for gethostby* errors,
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
21 a subclass of socket.error
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
22 - socket.gethostbyname(hostname) --> host IP address (string: 'dd.dd.dd.dd')
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
23 - socket.gethostbyaddr(IP address) --> (hostname, [alias, ...], [IP addr, ...])
2565
912813d573b4 fixed up comments describing interface
Guido van Rossum <guido@python.org>
parents: 2532
diff changeset
24 - socket.gethostname() --> host name (string: 'spam' or 'spam.domain.com')
4783
feba6d58d204 Added the new getprotobyname() call to the module overview at the top.
Guido van Rossum <guido@python.org>
parents: 4782
diff changeset
25 - socket.getprotobyname(protocolname) --> protocol number
2565
912813d573b4 fixed up comments describing interface
Guido van Rossum <guido@python.org>
parents: 2532
diff changeset
26 - socket.getservbyname(servicename, protocolname) --> port number
309
382323f92fce Connection sockets now have the proper family/type/proto values.
Guido van Rossum <guido@python.org>
parents: 295
diff changeset
27 - socket.socket(family, type [, proto]) --> new socket object
3673
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
28 - socket.ntohs(16 bit value) --> new int object
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
29 - socket.ntohl(32 bit value) --> new int object
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
30 - socket.htons(16 bit value) --> new int object
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
31 - socket.htonl(32 bit value) --> new int object
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
32 - socket.getaddrinfo(host, port [, family, socktype, proto, flags])
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
33 --> List of (family, socktype, proto, canonname, sockaddr)
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
34 - socket.getnameinfo(sockaddr, flags) --> (host, port)
2565
912813d573b4 fixed up comments describing interface
Guido van Rossum <guido@python.org>
parents: 2532
diff changeset
35 - socket.AF_INET, socket.SOCK_STREAM, etc.: constants from <socket.h>
11217
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
36 - socket.inet_aton(IP address) -> 32-bit packed IP representation
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
37 - socket.inet_ntoa(packed IP) -> IP address string
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
38 - socket.ssl(socket, keyfile, certfile) -> new ssl object
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 - an Internet socket address is a pair (hostname, port)
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 where hostname can be anything recognized by gethostbyname()
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 (including the dd.dd.dd.dd notation) and port is in host byte order
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 - where a hostname is returned, the dd.dd.dd.dd notation is used
2565
912813d573b4 fixed up comments describing interface
Guido van Rossum <guido@python.org>
parents: 2532
diff changeset
43 - a UNIX domain socket address is a string specifying the pathname
16410
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
44 - an AF_PACKET socket address is a tuple containing a string
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
45 specifying the ethernet interface and an integer specifying
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
46 the Ethernet protocol number to be received. For example:
16427
c8ef864ba861 fix a couple last-minute bugs in the raw socket support
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16410
diff changeset
47 ("eth0",0x1234). Optional 3rd,4th,5th elements in the tuple
c8ef864ba861 fix a couple last-minute bugs in the raw socket support
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16410
diff changeset
48 specify packet-type and ha-type/addr -- these are ignored by
16410
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
49 networking code, but accepted since they are returned by the
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
50 getsockname() method.
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
51
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
52 Socket methods:
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
53
324
a81020d505bf Add gethostname() and s.avail().
Guido van Rossum <guido@python.org>
parents: 309
diff changeset
54 - s.accept() --> new socket object, sockaddr
13278
3370edad08ce Restore strict checking of socket address values; addresses passed to
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
55 - s.bind(sockaddr) --> None
2565
912813d573b4 fixed up comments describing interface
Guido van Rossum <guido@python.org>
parents: 2532
diff changeset
56 - s.close() --> None
13278
3370edad08ce Restore strict checking of socket address values; addresses passed to
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
57 - s.connect(sockaddr) --> None
3370edad08ce Restore strict checking of socket address values; addresses passed to
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
58 - s.connect_ex(sockaddr) --> 0 or errno (handy for e.g. async connect)
2565
912813d573b4 fixed up comments describing interface
Guido van Rossum <guido@python.org>
parents: 2532
diff changeset
59 - s.fileno() --> file descriptor
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
60 - s.dup() --> same as socket.fromfd(os.dup(s.fileno(), ...)
2565
912813d573b4 fixed up comments describing interface
Guido van Rossum <guido@python.org>
parents: 2532
diff changeset
61 - s.getpeername() --> sockaddr
1094
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1039
diff changeset
62 - s.getsockname() --> sockaddr
2565
912813d573b4 fixed up comments describing interface
Guido van Rossum <guido@python.org>
parents: 2532
diff changeset
63 - s.getsockopt(level, optname[, buflen]) --> int or string
912813d573b4 fixed up comments describing interface
Guido van Rossum <guido@python.org>
parents: 2532
diff changeset
64 - s.listen(backlog) --> None
2532
9e5a09841781 mode and optional bufsize for makefile()
Guido van Rossum <guido@python.org>
parents: 2369
diff changeset
65 - s.makefile([mode[, bufsize]]) --> file object
2565
912813d573b4 fixed up comments describing interface
Guido van Rossum <guido@python.org>
parents: 2532
diff changeset
66 - s.recv(buflen [,flags]) --> string
912813d573b4 fixed up comments describing interface
Guido van Rossum <guido@python.org>
parents: 2532
diff changeset
67 - s.recvfrom(buflen [,flags]) --> string, sockaddr
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
68 - s.send(string [,flags]) --> nbytes
20679
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
69 - s.sendall(string [,flags]) # tries to send everything in a loop
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
70 - s.sendto(string, [flags,] sockaddr) --> nbytes
2565
912813d573b4 fixed up comments describing interface
Guido van Rossum <guido@python.org>
parents: 2532
diff changeset
71 - s.setblocking(0 | 1) --> None
912813d573b4 fixed up comments describing interface
Guido van Rossum <guido@python.org>
parents: 2532
diff changeset
72 - s.setsockopt(level, optname, value) --> None
912813d573b4 fixed up comments describing interface
Guido van Rossum <guido@python.org>
parents: 2532
diff changeset
73 - s.shutdown(how) --> None
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
74 - repr(s) --> "<socket object, fd=%d, family=%d, type=%d, protocol=%d>"
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
75
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 */
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
77
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
78 #include "Python.h"
10442
9184c9e108f9 Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents: 10441
diff changeset
79
20727
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
80 /* XXX This is a terrible mess of of platform-dependent preprocessor hacks.
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
81 I hope some day someone can clean this up please... */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
82
11288
adf87d13a0c1 (1) On Linux, we really need to trust the configure script to select
Guido van Rossum <guido@python.org>
parents: 11268
diff changeset
83 /* Hacks for gethostbyname_r(). On some non-Linux platforms, the configure
adf87d13a0c1 (1) On Linux, we really need to trust the configure script to select
Guido van Rossum <guido@python.org>
parents: 11268
diff changeset
84 script doesn't get this right, so we hardcode some platform checks below.
adf87d13a0c1 (1) On Linux, we really need to trust the configure script to select
Guido van Rossum <guido@python.org>
parents: 11268
diff changeset
85 On the other hand, not all Linux versions agree, so there the settings
adf87d13a0c1 (1) On Linux, we really need to trust the configure script to select
Guido van Rossum <guido@python.org>
parents: 11268
diff changeset
86 computed by the configure script are needed! */
adf87d13a0c1 (1) On Linux, we really need to trust the configure script to select
Guido van Rossum <guido@python.org>
parents: 11268
diff changeset
87
adf87d13a0c1 (1) On Linux, we really need to trust the configure script to select
Guido van Rossum <guido@python.org>
parents: 11268
diff changeset
88 #ifndef linux
10454
dad14ffe1c22 Implement two suggestions by Jonathan Giddy: (1) in AIX, clear the
Guido van Rossum <guido@python.org>
parents: 10453
diff changeset
89 #undef HAVE_GETHOSTBYNAME_R_3_ARG
dad14ffe1c22 Implement two suggestions by Jonathan Giddy: (1) in AIX, clear the
Guido van Rossum <guido@python.org>
parents: 10453
diff changeset
90 #undef HAVE_GETHOSTBYNAME_R_5_ARG
dad14ffe1c22 Implement two suggestions by Jonathan Giddy: (1) in AIX, clear the
Guido van Rossum <guido@python.org>
parents: 10453
diff changeset
91 #undef HAVE_GETHOSTBYNAME_R_6_ARG
11288
adf87d13a0c1 (1) On Linux, we really need to trust the configure script to select
Guido van Rossum <guido@python.org>
parents: 11268
diff changeset
92 #endif
10454
dad14ffe1c22 Implement two suggestions by Jonathan Giddy: (1) in AIX, clear the
Guido van Rossum <guido@python.org>
parents: 10453
diff changeset
93
10579
1ed1eb5bc6ec Put back __osf__ support for gethostbyname_r(); the real bug was that
Guido van Rossum <guido@python.org>
parents: 10561
diff changeset
94 #ifndef WITH_THREAD
1ed1eb5bc6ec Put back __osf__ support for gethostbyname_r(); the real bug was that
Guido van Rossum <guido@python.org>
parents: 10561
diff changeset
95 #undef HAVE_GETHOSTBYNAME_R
1ed1eb5bc6ec Put back __osf__ support for gethostbyname_r(); the real bug was that
Guido van Rossum <guido@python.org>
parents: 10561
diff changeset
96 #endif
1ed1eb5bc6ec Put back __osf__ support for gethostbyname_r(); the real bug was that
Guido van Rossum <guido@python.org>
parents: 10561
diff changeset
97
10454
dad14ffe1c22 Implement two suggestions by Jonathan Giddy: (1) in AIX, clear the
Guido van Rossum <guido@python.org>
parents: 10453
diff changeset
98 #ifdef HAVE_GETHOSTBYNAME_R
10579
1ed1eb5bc6ec Put back __osf__ support for gethostbyname_r(); the real bug was that
Guido van Rossum <guido@python.org>
parents: 10561
diff changeset
99 #if defined(_AIX) || defined(__osf__)
10454
dad14ffe1c22 Implement two suggestions by Jonathan Giddy: (1) in AIX, clear the
Guido van Rossum <guido@python.org>
parents: 10453
diff changeset
100 #define HAVE_GETHOSTBYNAME_R_3_ARG
20412
698bf7c22bfe Test for __sun instead of __sun__, since SUNWspro only defines the latter;
Martin v. Löwis <martin@v.loewis.de>
parents: 20389
diff changeset
101 #elif defined(__sun) || defined(__sgi)
10454
dad14ffe1c22 Implement two suggestions by Jonathan Giddy: (1) in AIX, clear the
Guido van Rossum <guido@python.org>
parents: 10453
diff changeset
102 #define HAVE_GETHOSTBYNAME_R_5_ARG
dad14ffe1c22 Implement two suggestions by Jonathan Giddy: (1) in AIX, clear the
Guido van Rossum <guido@python.org>
parents: 10453
diff changeset
103 #elif defined(linux)
11288
adf87d13a0c1 (1) On Linux, we really need to trust the configure script to select
Guido van Rossum <guido@python.org>
parents: 11268
diff changeset
104 /* Rely on the configure script */
10454
dad14ffe1c22 Implement two suggestions by Jonathan Giddy: (1) in AIX, clear the
Guido van Rossum <guido@python.org>
parents: 10453
diff changeset
105 #else
dad14ffe1c22 Implement two suggestions by Jonathan Giddy: (1) in AIX, clear the
Guido van Rossum <guido@python.org>
parents: 10453
diff changeset
106 #undef HAVE_GETHOSTBYNAME_R
dad14ffe1c22 Implement two suggestions by Jonathan Giddy: (1) in AIX, clear the
Guido van Rossum <guido@python.org>
parents: 10453
diff changeset
107 #endif
dad14ffe1c22 Implement two suggestions by Jonathan Giddy: (1) in AIX, clear the
Guido van Rossum <guido@python.org>
parents: 10453
diff changeset
108 #endif
dad14ffe1c22 Implement two suggestions by Jonathan Giddy: (1) in AIX, clear the
Guido van Rossum <guido@python.org>
parents: 10453
diff changeset
109
10442
9184c9e108f9 Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents: 10441
diff changeset
110 #if !defined(HAVE_GETHOSTBYNAME_R) && defined(WITH_THREAD) && !defined(MS_WINDOWS)
9184c9e108f9 Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents: 10441
diff changeset
111 #define USE_GETHOSTBYNAME_LOCK
9184c9e108f9 Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents: 10441
diff changeset
112 #endif
9184c9e108f9 Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents: 10441
diff changeset
113
9184c9e108f9 Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents: 10441
diff changeset
114 #ifdef USE_GETHOSTBYNAME_LOCK
9203
07dae6fdae79 Renamed thread.h to pythread.h.
Guido van Rossum <guido@python.org>
parents: 9095
diff changeset
115 #include "pythread.h"
7942
ee2aaa2f722a Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents: 6718
diff changeset
116 #endif
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
117
6626
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
118 #if defined(PYCC_VACPP)
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
119 #include <types.h>
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
120 #include <io.h>
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
121 #include <sys/ioctl.h>
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
122 #include <utils.h>
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
123 #include <ctype.h>
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
124 #endif
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
125
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
126 #if defined(PYOS_OS2)
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
127 #define INCL_DOS
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
128 #define INCL_DOSERRORS
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
129 #define INCL_NOPMAPI
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
130 #include <os2.h>
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
131 #endif
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
132
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
133
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
134 #include <sys/types.h>
902
a4793ae26682 Changes for new UNIX-specific built-in module 'select' and new header for
Guido van Rossum <guido@python.org>
parents: 900
diff changeset
135
324
a81020d505bf Add gethostname() and s.avail().
Guido van Rossum <guido@python.org>
parents: 309
diff changeset
136 #include <signal.h>
3738
ce74bba8a6a6 Slightly different Windows ifdefs
Guido van Rossum <guido@python.org>
parents: 3702
diff changeset
137 #ifndef MS_WINDOWS
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
138 #include <netdb.h>
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
139 #include <sys/socket.h>
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
140 #include <netinet/in.h>
20871
f576ffd57966 SF patch 473749 compile under OS/2 VA C++, from Michael Muller.
Tim Peters <tim.peters@gmail.com>
parents: 20853
diff changeset
141 #if !(defined(__BEOS__) || defined(__CYGWIN__) || (defined(PYOS_OS2) && defined(PYCC_VACPP)))
12194
4dd8b6a3b9c5 Add '#include <netinet/tcp.h>'
Andrew M. Kuchling <amk@amk.ca>
parents: 12050
diff changeset
142 #include <netinet/tcp.h>
12712
be55f5ddc615 Donn Cave <donn@oz.net>:
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
143 #endif
11217
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
144
11288
adf87d13a0c1 (1) On Linux, we really need to trust the configure script to select
Guido van Rossum <guido@python.org>
parents: 11268
diff changeset
145 /* Headers needed for inet_ntoa() and inet_addr() */
adf87d13a0c1 (1) On Linux, we really need to trust the configure script to select
Guido van Rossum <guido@python.org>
parents: 11268
diff changeset
146 #ifdef __BEOS__
adf87d13a0c1 (1) On Linux, we really need to trust the configure script to select
Guido van Rossum <guido@python.org>
parents: 11268
diff changeset
147 #include <net/netdb.h>
20871
f576ffd57966 SF patch 473749 compile under OS/2 VA C++, from Michael Muller.
Tim Peters <tim.peters@gmail.com>
parents: 20853
diff changeset
148 #elif defined(PYOS_OS2) && defined(PYCC_VACPP)
f576ffd57966 SF patch 473749 compile under OS/2 VA C++, from Michael Muller.
Tim Peters <tim.peters@gmail.com>
parents: 20853
diff changeset
149 #include <netdb.h>
f576ffd57966 SF patch 473749 compile under OS/2 VA C++, from Michael Muller.
Tim Peters <tim.peters@gmail.com>
parents: 20853
diff changeset
150 typedef size_t socklen_t;
11288
adf87d13a0c1 (1) On Linux, we really need to trust the configure script to select
Guido van Rossum <guido@python.org>
parents: 11268
diff changeset
151 #else
12479
a3e1fecb43c6 Jack Jansen: The GUSI 2.0 I/O library used on the Mac uses the
Guido van Rossum <guido@python.org>
parents: 12436
diff changeset
152 #ifndef USE_GUSI1
11217
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
153 #include <arpa/inet.h>
11288
adf87d13a0c1 (1) On Linux, we really need to trust the configure script to select
Guido van Rossum <guido@python.org>
parents: 11268
diff changeset
154 #endif
11438
be25aaca11f4 Bugfix by Jack Jansen for Macintosh (for the inet_ntoa/aton changes):
Guido van Rossum <guido@python.org>
parents: 11288
diff changeset
155 #endif
11217
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
156
20654
edd9d0b3c47e SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents: 20648
diff changeset
157 #ifndef RISCOS
1867
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1792
diff changeset
158 #include <fcntl.h>
1792
a584b4bbbc59 Changes to make it work and compile on NT, by Mark Hammond.
Guido van Rossum <guido@python.org>
parents: 1760
diff changeset
159 #else
20654
edd9d0b3c47e SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents: 20648
diff changeset
160 #include <sys/fcntl.h>
edd9d0b3c47e SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents: 20648
diff changeset
161 #define NO_DUP
edd9d0b3c47e SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents: 20648
diff changeset
162 int h_errno; /* not used */
edd9d0b3c47e SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents: 20648
diff changeset
163 #endif
edd9d0b3c47e SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents: 20648
diff changeset
164 #else
1792
a584b4bbbc59 Changes to make it work and compile on NT, by Mark Hammond.
Guido van Rossum <guido@python.org>
parents: 1760
diff changeset
165 #include <winsock.h>
2736
37c48fde61b8 add setblocking(); NT changes; null-terminate Unix path
Guido van Rossum <guido@python.org>
parents: 2565
diff changeset
166 #include <fcntl.h>
1792
a584b4bbbc59 Changes to make it work and compile on NT, by Mark Hammond.
Guido van Rossum <guido@python.org>
parents: 1760
diff changeset
167 #endif
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
168
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
169
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
170 #ifdef HAVE_SYS_UN_H
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
171 #include <sys/un.h>
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
172 #else
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
173 #undef AF_UNIX
1271
2919b448e385 * Microscopic corrections to make things compile on the Cray APP.
Guido van Rossum <guido@python.org>
parents: 1252
diff changeset
174 #endif
2919b448e385 * Microscopic corrections to make things compile on the Cray APP.
Guido van Rossum <guido@python.org>
parents: 1252
diff changeset
175
19151
cd44254360b6 Autotest for netpacket/packet.h, as it is not available on all Linux versions.
Martin v. Löwis <martin@v.loewis.de>
parents: 18997
diff changeset
176 #ifdef HAVE_NETPACKET_PACKET_H
16410
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
177 #include <sys/ioctl.h>
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
178 #include <net/if.h>
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
179 #include <netpacket/packet.h>
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
180 #endif
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
181
18263
41491d196748 Provide a definition for offsetof.
Martin v. Löwis <martin@v.loewis.de>
parents: 18262
diff changeset
182 #ifdef HAVE_STDDEF_H
41491d196748 Provide a definition for offsetof.
Martin v. Löwis <martin@v.loewis.de>
parents: 18262
diff changeset
183 #include <stddef.h>
41491d196748 Provide a definition for offsetof.
Martin v. Löwis <martin@v.loewis.de>
parents: 18262
diff changeset
184 #endif
41491d196748 Provide a definition for offsetof.
Martin v. Löwis <martin@v.loewis.de>
parents: 18262
diff changeset
185
41491d196748 Provide a definition for offsetof.
Martin v. Löwis <martin@v.loewis.de>
parents: 18262
diff changeset
186 #ifndef offsetof
41491d196748 Provide a definition for offsetof.
Martin v. Löwis <martin@v.loewis.de>
parents: 18262
diff changeset
187 #define offsetof(type, member) ((size_t)(&((type *)0)->member))
41491d196748 Provide a definition for offsetof.
Martin v. Löwis <martin@v.loewis.de>
parents: 18262
diff changeset
188 #endif
41491d196748 Provide a definition for offsetof.
Martin v. Löwis <martin@v.loewis.de>
parents: 18262
diff changeset
189
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
190 #ifndef O_NDELAY
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
191 #define O_NDELAY O_NONBLOCK /* For QNX only? */
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
192 #endif
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
193
12479
a3e1fecb43c6 Jack Jansen: The GUSI 2.0 I/O library used on the Mac uses the
Guido van Rossum <guido@python.org>
parents: 12436
diff changeset
194 #ifdef USE_GUSI1
3390
832f26d0e069 Include GUSI.h if using gusi-sockets
Jack Jansen <jack.jansen@cwi.nl>
parents: 3335
diff changeset
195 /* fdopen() isn't declared in stdio.h (sigh) */
832f26d0e069 Include GUSI.h if using gusi-sockets
Jack Jansen <jack.jansen@cwi.nl>
parents: 3335
diff changeset
196 #include <GUSI.h>
832f26d0e069 Include GUSI.h if using gusi-sockets
Jack Jansen <jack.jansen@cwi.nl>
parents: 3335
diff changeset
197 #endif
832f26d0e069 Include GUSI.h if using gusi-sockets
Jack Jansen <jack.jansen@cwi.nl>
parents: 3335
diff changeset
198
18246
c4db09b87424 Patch #401196: Configuration machinery for IPv6.
Martin v. Löwis <martin@v.loewis.de>
parents: 17806
diff changeset
199 #include "addrinfo.h"
c4db09b87424 Patch #401196: Configuration machinery for IPv6.
Martin v. Löwis <martin@v.loewis.de>
parents: 17806
diff changeset
200
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
201 #ifdef USE_SSL
15994
f9a15a583c79 Use openssl/*.h to include the OpenSSL header files
Andrew M. Kuchling <amk@amk.ca>
parents: 15604
diff changeset
202 #include "openssl/rsa.h"
f9a15a583c79 Use openssl/*.h to include the OpenSSL header files
Andrew M. Kuchling <amk@amk.ca>
parents: 15604
diff changeset
203 #include "openssl/crypto.h"
f9a15a583c79 Use openssl/*.h to include the OpenSSL header files
Andrew M. Kuchling <amk@amk.ca>
parents: 15604
diff changeset
204 #include "openssl/x509.h"
f9a15a583c79 Use openssl/*.h to include the OpenSSL header files
Andrew M. Kuchling <amk@amk.ca>
parents: 15604
diff changeset
205 #include "openssl/pem.h"
f9a15a583c79 Use openssl/*.h to include the OpenSSL header files
Andrew M. Kuchling <amk@amk.ca>
parents: 15604
diff changeset
206 #include "openssl/ssl.h"
f9a15a583c79 Use openssl/*.h to include the OpenSSL header files
Andrew M. Kuchling <amk@amk.ca>
parents: 15604
diff changeset
207 #include "openssl/err.h"
20505
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
208 #include "openssl/rand.h"
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
209 #endif /* USE_SSL */
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
210
18262
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
211 #ifndef HAVE_INET_PTON
18790
7cd22bf56d7b Silence warnings in MSVC++: hide unused variables, add constness back to
Martin v. Löwis <martin@v.loewis.de>
parents: 18753
diff changeset
212 int inet_pton (int af, const char *src, void *dst);
7cd22bf56d7b Silence warnings in MSVC++: hide unused variables, add constness back to
Martin v. Löwis <martin@v.loewis.de>
parents: 18753
diff changeset
213 const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
18262
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
214 #endif
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
215
18954
fefcc1e80cee Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents: 18915
diff changeset
216 #ifdef __APPLE__
fefcc1e80cee Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents: 18915
diff changeset
217 /* On OS X, getaddrinfo returns no error indication of lookup
fefcc1e80cee Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents: 18915
diff changeset
218 failure, so we must use the emulation instead of the libinfo
fefcc1e80cee Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents: 18915
diff changeset
219 implementation. Unfortunately, performing an autoconf test
fefcc1e80cee Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents: 18915
diff changeset
220 for this bug would require DNS access for the machine performing
fefcc1e80cee Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents: 18915
diff changeset
221 the configuration, which is not acceptable. Therefore, we
fefcc1e80cee Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents: 18915
diff changeset
222 determine the bug just by checking for __APPLE__. If this bug
fefcc1e80cee Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents: 18915
diff changeset
223 gets ever fixed, perhaps checking for sys/version.h would be
fefcc1e80cee Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents: 18915
diff changeset
224 appropriate, which is 10/0 on the system with the bug. */
fefcc1e80cee Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents: 18915
diff changeset
225 #undef HAVE_GETADDRINFO
fefcc1e80cee Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents: 18915
diff changeset
226 /* avoid clashes with the C library definition of the symbol. */
fefcc1e80cee Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents: 18915
diff changeset
227 #define getaddrinfo fake_getaddrinfo
fefcc1e80cee Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents: 18915
diff changeset
228 #endif
fefcc1e80cee Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents: 18915
diff changeset
229
18246
c4db09b87424 Patch #401196: Configuration machinery for IPv6.
Martin v. Löwis <martin@v.loewis.de>
parents: 17806
diff changeset
230 /* I know this is a bad practice, but it is the easiest... */
18954
fefcc1e80cee Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents: 18915
diff changeset
231 #if !defined(HAVE_GETADDRINFO)
18246
c4db09b87424 Patch #401196: Configuration machinery for IPv6.
Martin v. Löwis <martin@v.loewis.de>
parents: 17806
diff changeset
232 #include "getaddrinfo.c"
c4db09b87424 Patch #401196: Configuration machinery for IPv6.
Martin v. Löwis <martin@v.loewis.de>
parents: 17806
diff changeset
233 #endif
18954
fefcc1e80cee Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents: 18915
diff changeset
234 #if !defined(HAVE_GETNAMEINFO)
18246
c4db09b87424 Patch #401196: Configuration machinery for IPv6.
Martin v. Löwis <martin@v.loewis.de>
parents: 17806
diff changeset
235 #include "getnameinfo.c"
c4db09b87424 Patch #401196: Configuration machinery for IPv6.
Martin v. Löwis <martin@v.loewis.de>
parents: 17806
diff changeset
236 #endif
c4db09b87424 Patch #401196: Configuration machinery for IPv6.
Martin v. Löwis <martin@v.loewis.de>
parents: 17806
diff changeset
237
8823
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
238 #if defined(MS_WINDOWS) || defined(__BEOS__)
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
239 /* BeOS suffers from the same socket dichotomy as Win32... - [cjh] */
1792
a584b4bbbc59 Changes to make it work and compile on NT, by Mark Hammond.
Guido van Rossum <guido@python.org>
parents: 1760
diff changeset
240 /* seem to be a few differences in the API */
12436
dff7b26116de Use an explicit macro SOCKETCLOSE which expands to closesocket (on
Guido van Rossum <guido@python.org>
parents: 12319
diff changeset
241 #define SOCKETCLOSE closesocket
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
242 #define NO_DUP /* Actually it exists on NT 3.5, but what the heck... */
1792
a584b4bbbc59 Changes to make it work and compile on NT, by Mark Hammond.
Guido van Rossum <guido@python.org>
parents: 1760
diff changeset
243 #endif
a584b4bbbc59 Changes to make it work and compile on NT, by Mark Hammond.
Guido van Rossum <guido@python.org>
parents: 1760
diff changeset
244
13171
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
245 /* abstract the socket file descriptor type */
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
246 #ifdef MS_WINDOWS
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
247 typedef SOCKET SOCKET_T;
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
248 # ifdef MS_WIN64
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
249 # define SIZEOF_SOCKET_T 8
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
250 # else
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
251 # define SIZEOF_SOCKET_T 4
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
252 # endif
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
253 #else
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
254 typedef int SOCKET_T;
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
255 # define SIZEOF_SOCKET_T SIZEOF_INT
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
256 #endif
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
257
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
258 #ifdef MS_WIN32
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
259 # define EAFNOSUPPORT WSAEAFNOSUPPORT
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
260 # define snprintf _snprintf
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
261 #endif
13171
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
262
6626
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
263 #if defined(PYOS_OS2)
12436
dff7b26116de Use an explicit macro SOCKETCLOSE which expands to closesocket (on
Guido van Rossum <guido@python.org>
parents: 12319
diff changeset
264 #define SOCKETCLOSE soclose
6626
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
265 #define NO_DUP /* Sockets are Not Actual File Handles under OS/2 */
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
266 #endif
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
267
12436
dff7b26116de Use an explicit macro SOCKETCLOSE which expands to closesocket (on
Guido van Rossum <guido@python.org>
parents: 12319
diff changeset
268 #ifndef SOCKETCLOSE
dff7b26116de Use an explicit macro SOCKETCLOSE which expands to closesocket (on
Guido van Rossum <guido@python.org>
parents: 12319
diff changeset
269 #define SOCKETCLOSE close
dff7b26116de Use an explicit macro SOCKETCLOSE which expands to closesocket (on
Guido van Rossum <guido@python.org>
parents: 12319
diff changeset
270 #endif
dff7b26116de Use an explicit macro SOCKETCLOSE which expands to closesocket (on
Guido van Rossum <guido@python.org>
parents: 12319
diff changeset
271
20727
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
272
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
273 /* XXX There's a problem here: *static* functions are not supposed to have
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
274 a Py prefix (or use CapitalizedWords). Later... */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
275
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
276 /* Global variable holding the exception type for errors detected
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
277 by this module (but not argument type or memory errors, etc.). */
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
278
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
279 static PyObject *PySocket_Error;
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
280 static PyObject *PyH_Error;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
281 static PyObject *PyGAI_Error;
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
282
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
283 #ifdef USE_SSL
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
284 static PyObject *PySSLErrorObject;
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
285 #endif /* USE_SSL */
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
286
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
287
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
288 #ifdef RISCOS
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
289 /* Global variable which is !=0 if Python is running in a RISC OS taskwindow */
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
290 static int taskwindow;
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
291 #endif
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
292
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
293
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
294 /* Convenience function to raise an error according to errno
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
295 and return a NULL pointer from a function. */
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
296
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
297 static PyObject *
13651
8a063423e0b7 Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents: 13554
diff changeset
298 PySocket_Err(void)
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
299 {
3702
3408756ec601 changed windows test symbols; removed debug printf from sockets
Guido van Rossum <guido@python.org>
parents: 3700
diff changeset
300 #ifdef MS_WINDOWS
13680
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
301 int err_no = WSAGetLastError();
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
302 if (err_no) {
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
303 static struct { int no; const char *msg; } *msgp, msgs[] = {
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
304 { WSAEINTR, "Interrupted system call" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
305 { WSAEBADF, "Bad file descriptor" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
306 { WSAEACCES, "Permission denied" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
307 { WSAEFAULT, "Bad address" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
308 { WSAEINVAL, "Invalid argument" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
309 { WSAEMFILE, "Too many open files" },
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
310 { WSAEWOULDBLOCK,
13680
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
311 "The socket operation could not complete "
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
312 "without blocking" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
313 { WSAEINPROGRESS, "Operation now in progress" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
314 { WSAEALREADY, "Operation already in progress" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
315 { WSAENOTSOCK, "Socket operation on non-socket" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
316 { WSAEDESTADDRREQ, "Destination address required" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
317 { WSAEMSGSIZE, "Message too long" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
318 { WSAEPROTOTYPE, "Protocol wrong type for socket" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
319 { WSAENOPROTOOPT, "Protocol not available" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
320 { WSAEPROTONOSUPPORT, "Protocol not supported" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
321 { WSAESOCKTNOSUPPORT, "Socket type not supported" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
322 { WSAEOPNOTSUPP, "Operation not supported" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
323 { WSAEPFNOSUPPORT, "Protocol family not supported" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
324 { WSAEAFNOSUPPORT, "Address family not supported" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
325 { WSAEADDRINUSE, "Address already in use" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
326 { WSAEADDRNOTAVAIL,
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
327 "Can't assign requested address" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
328 { WSAENETDOWN, "Network is down" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
329 { WSAENETUNREACH, "Network is unreachable" },
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
330 { WSAENETRESET,
13680
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
331 "Network dropped connection on reset" },
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
332 { WSAECONNABORTED,
13680
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
333 "Software caused connection abort" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
334 { WSAECONNRESET, "Connection reset by peer" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
335 { WSAENOBUFS, "No buffer space available" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
336 { WSAEISCONN, "Socket is already connected" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
337 { WSAENOTCONN, "Socket is not connected" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
338 { WSAESHUTDOWN, "Can't send after socket shutdown" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
339 { WSAETOOMANYREFS,
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
340 "Too many references: can't splice" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
341 { WSAETIMEDOUT, "Operation timed out" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
342 { WSAECONNREFUSED, "Connection refused" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
343 { WSAELOOP, "Too many levels of symbolic links" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
344 { WSAENAMETOOLONG, "File name too long" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
345 { WSAEHOSTDOWN, "Host is down" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
346 { WSAEHOSTUNREACH, "No route to host" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
347 { WSAENOTEMPTY, "Directory not empty" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
348 { WSAEPROCLIM, "Too many processes" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
349 { WSAEUSERS, "Too many users" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
350 { WSAEDQUOT, "Disc quota exceeded" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
351 { WSAESTALE, "Stale NFS file handle" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
352 { WSAEREMOTE, "Too many levels of remote in path" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
353 { WSASYSNOTREADY,
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
354 "Network subsystem is unvailable" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
355 { WSAVERNOTSUPPORTED,
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
356 "WinSock version is not supported" },
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
357 { WSANOTINITIALISED,
13680
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
358 "Successful WSAStartup() not yet performed" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
359 { WSAEDISCON, "Graceful shutdown in progress" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
360 /* Resolver errors */
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
361 { WSAHOST_NOT_FOUND, "No such host is known" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
362 { WSATRY_AGAIN, "Host not found, or server failed" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
363 { WSANO_RECOVERY,
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
364 "Unexpected server error encountered" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
365 { WSANO_DATA, "Valid name without requested data" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
366 { WSANO_ADDRESS, "No address, look for MX record" },
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
367 { 0, NULL }
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
368 };
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
369 PyObject *v;
13680
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
370 const char *msg = "winsock error";
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
371
13680
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
372 for (msgp = msgs; msgp->msg; msgp++) {
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
373 if (err_no == msgp->no) {
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
374 msg = msgp->msg;
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
375 break;
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
376 }
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
377 }
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
378
9f6189e89212 Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Mark Hammond <mhammond@skippinet.com.au>
parents: 13667
diff changeset
379 v = Py_BuildValue("(is)", err_no, msg);
1915
80818c106e3e * Modules/xxmodule.c: integrated with xxobject.c by Jack
Guido van Rossum <guido@python.org>
parents: 1867
diff changeset
380 if (v != NULL) {
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
381 PyErr_SetObject(PySocket_Error, v);
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
382 Py_DECREF(v);
1915
80818c106e3e * Modules/xxmodule.c: integrated with xxobject.c by Jack
Guido van Rossum <guido@python.org>
parents: 1867
diff changeset
383 }
80818c106e3e * Modules/xxmodule.c: integrated with xxobject.c by Jack
Guido van Rossum <guido@python.org>
parents: 1867
diff changeset
384 return NULL;
80818c106e3e * Modules/xxmodule.c: integrated with xxobject.c by Jack
Guido van Rossum <guido@python.org>
parents: 1867
diff changeset
385 }
80818c106e3e * Modules/xxmodule.c: integrated with xxobject.c by Jack
Guido van Rossum <guido@python.org>
parents: 1867
diff changeset
386 else
80818c106e3e * Modules/xxmodule.c: integrated with xxobject.c by Jack
Guido van Rossum <guido@python.org>
parents: 1867
diff changeset
387 #endif
6626
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
388
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
389 #if defined(PYOS_OS2)
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
390 if (sock_errno() != NO_ERROR) {
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
391 APIRET rc;
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
392 ULONG msglen;
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
393 char outbuf[100];
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
394 int myerrorcode = sock_errno();
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
395
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
396 /* Retrieve Socket-Related Error Message from MPTN.MSG File */
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
397 rc = DosGetMessage(NULL, 0, outbuf, sizeof(outbuf),
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
398 myerrorcode - SOCBASEERR + 26, "mptn.msg", &msglen);
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
399 if (rc == NO_ERROR) {
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
400 PyObject *v;
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
401
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
402 outbuf[msglen] = '\0'; /* OS/2 Doesn't Guarantee a Terminator */
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
403 if (strlen(outbuf) > 0) { /* If Non-Empty Msg, Trim CRLF */
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
404 char *lastc = &outbuf[ strlen(outbuf)-1 ];
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
405 while (lastc > outbuf && isspace(*lastc))
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
406 *lastc-- = '\0'; /* Trim Trailing Whitespace (CRLF) */
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
407 }
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
408 v = Py_BuildValue("(is)", myerrorcode, outbuf);
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
409 if (v != NULL) {
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
410 PyErr_SetObject(PySocket_Error, v);
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
411 Py_DECREF(v);
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
412 }
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
413 return NULL;
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
414 }
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
415 }
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
416 #endif
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
417
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
418 return PyErr_SetFromErrno(PySocket_Error);
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
419 }
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
420
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
421
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
422 static PyObject *
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
423 PyH_Err(int h_error)
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
424 {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
425 PyObject *v;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
426
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
427 #ifdef HAVE_HSTRERROR
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
428 v = Py_BuildValue("(is)", h_error, (char *)hstrerror(h_error));
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
429 #else
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
430 v = Py_BuildValue("(is)", h_error, "host not found");
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
431 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
432 if (v != NULL) {
18996
9059e7c1d8b0 Auto-detect hstrerror. Raise socket.herror in PyH_Error. Register the three
Martin v. Löwis <martin@v.loewis.de>
parents: 18954
diff changeset
433 PyErr_SetObject(PyH_Error, v);
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
434 Py_DECREF(v);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
435 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
436
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
437 return NULL;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
438 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
439
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
440
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
441 static PyObject *
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
442 PyGAI_Err(int error)
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
443 {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
444 PyObject *v;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
445
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
446 if (error == EAI_SYSTEM)
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
447 return PySocket_Err();
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
448
19278
1afc3116c602 Fix portability problems with glibc 2.0, as reported in #449157.
Martin v. Löwis <martin@v.loewis.de>
parents: 19197
diff changeset
449 #ifdef HAVE_GAI_STRERROR
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
450 v = Py_BuildValue("(is)", error, gai_strerror(error));
19278
1afc3116c602 Fix portability problems with glibc 2.0, as reported in #449157.
Martin v. Löwis <martin@v.loewis.de>
parents: 19197
diff changeset
451 #else
1afc3116c602 Fix portability problems with glibc 2.0, as reported in #449157.
Martin v. Löwis <martin@v.loewis.de>
parents: 19197
diff changeset
452 v = Py_BuildValue("(is)", error, "getaddrinfo failed");
1afc3116c602 Fix portability problems with glibc 2.0, as reported in #449157.
Martin v. Löwis <martin@v.loewis.de>
parents: 19197
diff changeset
453 #endif
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
454 if (v != NULL) {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
455 PyErr_SetObject(PyGAI_Error, v);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
456 Py_DECREF(v);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
457 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
458
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
459 return NULL;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
460 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
461
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
462
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
463 /* The object holding a socket. It holds some extra information,
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
464 like the address family, which is used to decode socket address
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
465 arguments properly. */
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
466
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
467 typedef struct {
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
468 PyObject_HEAD
20727
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
469 SOCKET_T sock_fd; /* Socket file descriptor */
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
470 int sock_family; /* Address family, e.g., AF_INET */
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
471 int sock_type; /* Socket type, e.g., SOCK_STREAM */
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
472 int sock_proto; /* Protocol type, usually 0 */
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
473 union sock_addr {
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
474 struct sockaddr_in in;
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
475 #ifdef AF_UNIX
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
476 struct sockaddr_un un;
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
477 #endif
21128
15ff504632ed Remove INET6 define. Use ENABLE_IPV6 instead.
Martin v. Löwis <martin@v.loewis.de>
parents: 21094
diff changeset
478 #ifdef ENABLE_IPV6
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
479 struct sockaddr_in6 in6;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
480 struct sockaddr_storage storage;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
481 #endif
19151
cd44254360b6 Autotest for netpacket/packet.h, as it is not available on all Linux versions.
Martin v. Löwis <martin@v.loewis.de>
parents: 18997
diff changeset
482 #ifdef HAVE_NETPACKET_PACKET_H
16410
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
483 struct sockaddr_ll ll;
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
484 #endif
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
485 } sock_addr;
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
486 } PySocketSockObject;
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
487
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
488 #ifdef USE_SSL
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
489
20377
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
490 #define X509_NAME_MAXLEN 256
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
491
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
492 typedef struct {
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
493 PyObject_HEAD
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
494 PySocketSockObject *Socket; /* Socket on which we're layered */
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
495 SSL_CTX* ctx;
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
496 SSL* ssl;
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
497 X509* server_cert;
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
498 BIO* sbio;
20377
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
499 char server[X509_NAME_MAXLEN];
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
500 char issuer[X509_NAME_MAXLEN];
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
501
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
502 } PySSLObject;
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
503
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
504 staticforward PyTypeObject PySSL_Type;
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
505 staticforward PyObject *PySSL_SSLwrite(PySSLObject *self, PyObject *args);
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
506 staticforward PyObject *PySSL_SSLread(PySSLObject *self, PyObject *args);
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
507
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
508 #define PySSLObject_Check(v) ((v)->ob_type == &PySSL_Type)
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
509
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
510 #endif /* USE_SSL */
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
511
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
512 /* A forward reference to the Socktype type object.
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
513 The Socktype variable contains pointers to various functions,
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
514 some of which call newsockobject(), which uses Socktype, so
374
70a18a6689d4 Make Socktype global so old and new compilers will like it.
Guido van Rossum <guido@python.org>
parents: 324
diff changeset
515 there has to be a circular reference. */
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
516
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
517 staticforward PyTypeObject PySocketSock_Type;
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
518
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
519
20727
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
520 /* Initialize a new socket object. */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
521
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
522 static void
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
523 init_sockobject(PySocketSockObject *s,
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
524 SOCKET_T fd, int family, int type, int proto)
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
525 {
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
526 #ifdef RISCOS
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
527 int block = 1;
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
528 #endif
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
529 s->sock_fd = fd;
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
530 s->sock_family = family;
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
531 s->sock_type = type;
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
532 s->sock_proto = proto;
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
533 #ifdef RISCOS
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
534 if(taskwindow) {
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
535 socketioctl(s->sock_fd, 0x80046679, (u_long*)&block);
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
536 }
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
537 #endif
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
538 }
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
539
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
540
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
541 /* Create a new socket object.
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
542 This just creates the object and initializes it.
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
543 If the creation fails, return NULL and set an exception (implicit
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
544 in NEWOBJ()). */
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
545
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
546 static PySocketSockObject *
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
547 PySocketSock_New(SOCKET_T fd, int family, int type, int proto)
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
548 {
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
549 PySocketSockObject *s;
20727
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
550 s = (PySocketSockObject *)
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
551 PyType_GenericNew(&PySocketSock_Type, NULL, NULL);
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
552 if (s != NULL)
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
553 init_sockobject(s, fd, family, type, proto);
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
554 return s;
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
555 }
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
556
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
557
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
558 /* Lock to allow python interpreter to continue, but only allow one
7942
ee2aaa2f722a Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents: 6718
diff changeset
559 thread to be in gethostbyname */
10442
9184c9e108f9 Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents: 10441
diff changeset
560 #ifdef USE_GETHOSTBYNAME_LOCK
9679
877d23bd5bdc Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents: 9588
diff changeset
561 PyThread_type_lock gethostbyname_lock;
7942
ee2aaa2f722a Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents: 6718
diff changeset
562 #endif
ee2aaa2f722a Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents: 6718
diff changeset
563
ee2aaa2f722a Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents: 6718
diff changeset
564
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
565 /* Convert a string specifying a host name or one of a few symbolic
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
566 names to a numeric IP address. This usually calls gethostbyname()
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
567 to do the work; the names "" and "<broadcast>" are special.
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
568 Return the length (IPv4 should be 4 bytes), or negative if
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
569 an error occurred; then an exception is raised. */
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
570
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
571 static int
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
572 setipaddr(char* name, struct sockaddr * addr_ret, int af)
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
573 {
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
574 struct addrinfo hints, *res;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
575 int error;
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
576
4600
d36250aefb82 Keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
577 memset((void *) addr_ret, '\0', sizeof(*addr_ret));
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
578 if (name[0] == '\0') {
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
579 int siz;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
580 memset(&hints, 0, sizeof(hints));
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
581 hints.ai_family = af;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
582 hints.ai_socktype = SOCK_DGRAM; /*dummy*/
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
583 hints.ai_flags = AI_PASSIVE;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
584 error = getaddrinfo(NULL, "0", &hints, &res);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
585 if (error) {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
586 PyGAI_Err(error);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
587 return -1;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
588 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
589 switch (res->ai_family) {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
590 case AF_INET:
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
591 siz = 4;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
592 break;
21128
15ff504632ed Remove INET6 define. Use ENABLE_IPV6 instead.
Martin v. Löwis <martin@v.loewis.de>
parents: 21094
diff changeset
593 #ifdef ENABLE_IPV6
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
594 case AF_INET6:
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
595 siz = 16;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
596 break;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
597 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
598 default:
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
599 freeaddrinfo(res);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
600 PyErr_SetString(PySocket_Error,
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
601 "unsupported address family");
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
602 return -1;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
603 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
604 if (res->ai_next) {
20912
06d95b6877c4 Fix memory leaks detecting in bug report #478003.
Martin v. Löwis <martin@v.loewis.de>
parents: 20871
diff changeset
605 freeaddrinfo(res);
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
606 PyErr_SetString(PySocket_Error,
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
607 "wildcard resolved to multiple address");
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
608 return -1;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
609 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
610 memcpy(addr_ret, res->ai_addr, res->ai_addrlen);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
611 freeaddrinfo(res);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
612 return siz;
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
613 }
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
614 if (name[0] == '<' && strcmp(name, "<broadcast>") == 0) {
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
615 struct sockaddr_in *sin;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
616 if (af != PF_INET && af != PF_UNSPEC) {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
617 PyErr_SetString(PySocket_Error,
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
618 "address family mismatched");
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
619 return -1;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
620 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
621 sin = (struct sockaddr_in *)addr_ret;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
622 memset((void *) sin, '\0', sizeof(*sin));
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
623 sin->sin_family = AF_INET;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
624 #ifdef HAVE_SOCKADDR_SA_LEN
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
625 sin->sin_len = sizeof(*sin);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
626 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
627 sin->sin_addr.s_addr = INADDR_BROADCAST;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
628 return sizeof(sin->sin_addr);
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
629 }
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
630 memset(&hints, 0, sizeof(hints));
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
631 hints.ai_family = af;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
632 error = getaddrinfo(name, NULL, &hints, &res);
20661
f7009167dd67 After discussion with itojun, it was clarified that Tru64 is in error,
Martin v. Löwis <martin@v.loewis.de>
parents: 20654
diff changeset
633 #if defined(__digital__) && defined(__unix__)
20648
fec950d8c25d Fix typo. Thanks to Jack Jansen for spotting it.
Martin v. Löwis <martin@v.loewis.de>
parents: 20646
diff changeset
634 if (error == EAI_NONAME && af == AF_UNSPEC) {
20661
f7009167dd67 After discussion with itojun, it was clarified that Tru64 is in error,
Martin v. Löwis <martin@v.loewis.de>
parents: 20654
diff changeset
635 /* On Tru64 V5.1, numeric-to-addr conversion
20646
cabb568a558b Include netdb.h to detect getaddrinfo. Work around problem with getaddrinfo
Martin v. Löwis <martin@v.loewis.de>
parents: 20564
diff changeset
636 fails if no address family is given. Assume IPv4 for now.*/
cabb568a558b Include netdb.h to detect getaddrinfo. Work around problem with getaddrinfo
Martin v. Löwis <martin@v.loewis.de>
parents: 20564
diff changeset
637 hints.ai_family = AF_INET;
cabb568a558b Include netdb.h to detect getaddrinfo. Work around problem with getaddrinfo
Martin v. Löwis <martin@v.loewis.de>
parents: 20564
diff changeset
638 error = getaddrinfo(name, NULL, &hints, &res);
cabb568a558b Include netdb.h to detect getaddrinfo. Work around problem with getaddrinfo
Martin v. Löwis <martin@v.loewis.de>
parents: 20564
diff changeset
639 }
20661
f7009167dd67 After discussion with itojun, it was clarified that Tru64 is in error,
Martin v. Löwis <martin@v.loewis.de>
parents: 20654
diff changeset
640 #endif
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
641 if (error) {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
642 PyGAI_Err(error);
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
643 return -1;
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
644 }
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
645 memcpy((char *) addr_ret, res->ai_addr, res->ai_addrlen);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
646 freeaddrinfo(res);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
647 switch (addr_ret->sa_family) {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
648 case AF_INET:
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
649 return 4;
21128
15ff504632ed Remove INET6 define. Use ENABLE_IPV6 instead.
Martin v. Löwis <martin@v.loewis.de>
parents: 21094
diff changeset
650 #ifdef ENABLE_IPV6
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
651 case AF_INET6:
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
652 return 16;
10441
9ba5dffccb1b Jonathan Giddy writes:
Guido van Rossum <guido@python.org>
parents: 10401
diff changeset
653 #endif
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
654 default:
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
655 PyErr_SetString(PySocket_Error, "unknown address family");
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
656 return -1;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
657 }
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
658 }
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
659
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
660
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
661 /* Create a string object representing an IP address.
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
662 This is always a string of the form 'dd.dd.dd.dd' (with variable
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
663 size numbers). */
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
664
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
665 static PyObject *
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
666 makeipaddr(struct sockaddr *addr, int addrlen)
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
667 {
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
668 char buf[NI_MAXHOST];
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
669 int error;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
670
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
671 error = getnameinfo(addr, addrlen, buf, sizeof(buf), NULL, 0,
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
672 NI_NUMERICHOST);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
673 if (error) {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
674 PyGAI_Err(error);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
675 return NULL;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
676 }
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
677 return PyString_FromString(buf);
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
678 }
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
679
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
680
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
681 /* Create an object representing the given socket address,
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
682 suitable for passing it back to bind(), connect() etc.
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
683 The family field of the sockaddr structure is inspected
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
684 to determine what kind of address it really is. */
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
685
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
686 /*ARGSUSED*/
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
687 static PyObject *
16427
c8ef864ba861 fix a couple last-minute bugs in the raw socket support
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16410
diff changeset
688 makesockaddr(int sockfd, struct sockaddr *addr, int addrlen)
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
689 {
925
61143bf03b44 Sometimes, recvfrom() returns an empty address; this is not an error.
Guido van Rossum <guido@python.org>
parents: 902
diff changeset
690 if (addrlen == 0) {
61143bf03b44 Sometimes, recvfrom() returns an empty address; this is not an error.
Guido van Rossum <guido@python.org>
parents: 902
diff changeset
691 /* No address -- may be recvfrom() from known socket */
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
692 Py_INCREF(Py_None);
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
693 return Py_None;
925
61143bf03b44 Sometimes, recvfrom() returns an empty address; this is not an error.
Guido van Rossum <guido@python.org>
parents: 902
diff changeset
694 }
61143bf03b44 Sometimes, recvfrom() returns an empty address; this is not an error.
Guido van Rossum <guido@python.org>
parents: 902
diff changeset
695
8823
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
696 #ifdef __BEOS__
12492
1725e802e3eb Patch by Charles G Waldman:
Guido van Rossum <guido@python.org>
parents: 12479
diff changeset
697 /* XXX: BeOS version of accept() doesn't set family correctly */
8823
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
698 addr->sa_family = AF_INET;
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
699 #endif
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
700
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
701 switch (addr->sa_family) {
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
702
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
703 case AF_INET:
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
704 {
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
705 struct sockaddr_in *a;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
706 PyObject *addrobj = makeipaddr(addr, sizeof(*a));
4871
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
707 PyObject *ret = NULL;
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
708 if (addrobj) {
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
709 a = (struct sockaddr_in *)addr;
4871
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
710 ret = Py_BuildValue("Oi", addrobj, ntohs(a->sin_port));
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
711 Py_DECREF(addrobj);
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
712 }
1207
b564bd4e57e1 * ceval.c: ifdef out the last argument passing compat hack.
Guido van Rossum <guido@python.org>
parents: 1132
diff changeset
713 return ret;
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
714 }
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
715
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
716 #ifdef AF_UNIX
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
717 case AF_UNIX:
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
718 {
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
719 struct sockaddr_un *a = (struct sockaddr_un *) addr;
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
720 return PyString_FromString(a->sun_path);
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
721 }
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
722 #endif /* AF_UNIX */
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
723
21128
15ff504632ed Remove INET6 define. Use ENABLE_IPV6 instead.
Martin v. Löwis <martin@v.loewis.de>
parents: 21094
diff changeset
724 #ifdef ENABLE_IPV6
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
725 case AF_INET6:
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
726 {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
727 struct sockaddr_in6 *a;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
728 PyObject *addrobj = makeipaddr(addr, sizeof(*a));
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
729 PyObject *ret = NULL;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
730 if (addrobj) {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
731 a = (struct sockaddr_in6 *)addr;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
732 ret = Py_BuildValue("Oiii", addrobj, ntohs(a->sin6_port),
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
733 a->sin6_flowinfo, a->sin6_scope_id);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
734 Py_DECREF(addrobj);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
735 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
736 return ret;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
737 }
16410
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
738 #endif
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
739
19151
cd44254360b6 Autotest for netpacket/packet.h, as it is not available on all Linux versions.
Martin v. Löwis <martin@v.loewis.de>
parents: 18997
diff changeset
740 #ifdef HAVE_NETPACKET_PACKET_H
16410
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
741 case AF_PACKET:
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
742 {
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
743 struct sockaddr_ll *a = (struct sockaddr_ll *)addr;
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
744 char *ifname = "";
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
745 struct ifreq ifr;
16427
c8ef864ba861 fix a couple last-minute bugs in the raw socket support
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16410
diff changeset
746 /* need to look up interface name give index */
c8ef864ba861 fix a couple last-minute bugs in the raw socket support
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16410
diff changeset
747 if (a->sll_ifindex) {
16410
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
748 ifr.ifr_ifindex = a->sll_ifindex;
16427
c8ef864ba861 fix a couple last-minute bugs in the raw socket support
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16410
diff changeset
749 if (ioctl(sockfd, SIOCGIFNAME, &ifr) == 0)
16410
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
750 ifname = ifr.ifr_name;
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
751 }
16427
c8ef864ba861 fix a couple last-minute bugs in the raw socket support
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16410
diff changeset
752 return Py_BuildValue("shbhs#", ifname, ntohs(a->sll_protocol),
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
753 a->sll_pkttype, a->sll_hatype,
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
754 a->sll_addr, a->sll_halen);
16410
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
755 }
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
756 #endif
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
757
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
758 /* More cases here... */
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
759
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
760 default:
5436
cf818b70da3e In makesockaddr(), if we don't know the address family, don't raise an
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
761 /* If we don't know the address family, don't raise an
cf818b70da3e In makesockaddr(), if we don't know the address family, don't raise an
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
762 exception -- return it as a tuple. */
cf818b70da3e In makesockaddr(), if we don't know the address family, don't raise an
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
763 return Py_BuildValue("is#",
cf818b70da3e In makesockaddr(), if we don't know the address family, don't raise an
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
764 addr->sa_family,
cf818b70da3e In makesockaddr(), if we don't know the address family, don't raise an
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
765 addr->sa_data,
cf818b70da3e In makesockaddr(), if we don't know the address family, don't raise an
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
766 sizeof(addr->sa_data));
925
61143bf03b44 Sometimes, recvfrom() returns an empty address; this is not an error.
Guido van Rossum <guido@python.org>
parents: 902
diff changeset
767
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
768 }
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
769 }
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
770
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
771
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
772 /* Parse a socket address argument according to the socket object's
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
773 address family. Return 1 if the address was in the proper format,
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
774 0 of not. The address is returned through addr_ret, its length
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
775 through len_ret. */
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
776
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
777 static int
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
778 getsockaddrarg(PySocketSockObject *s, PyObject *args,
16427
c8ef864ba861 fix a couple last-minute bugs in the raw socket support
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16410
diff changeset
779 struct sockaddr **addr_ret, int *len_ret)
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
780 {
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
781 switch (s->sock_family) {
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
782
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
783 #ifdef AF_UNIX
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
784 case AF_UNIX:
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
785 {
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
786 struct sockaddr_un* addr;
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 925
diff changeset
787 char *path;
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
788 int len;
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
789 addr = (struct sockaddr_un* )&(s->sock_addr).un;
9307
928ea5a409e5 Use the t# format where appropriate. Greg Stein.
Guido van Rossum <guido@python.org>
parents: 9203
diff changeset
790 if (!PyArg_Parse(args, "t#", &path, &len))
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
791 return 0;
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
792 if (len > sizeof addr->sun_path) {
4871
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
793 PyErr_SetString(PySocket_Error,
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
794 "AF_UNIX path too long");
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
795 return 0;
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
796 }
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
797 addr->sun_family = s->sock_family;
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
798 memcpy(addr->sun_path, path, len);
2736
37c48fde61b8 add setblocking(); NT changes; null-terminate Unix path
Guido van Rossum <guido@python.org>
parents: 2565
diff changeset
799 addr->sun_path[len] = 0;
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
800 *addr_ret = (struct sockaddr *) addr;
3666
556ec82f4d93 Calculate length of AF_UNIX addr struct portably in getsockaddrarg().
Guido van Rossum <guido@python.org>
parents: 3665
diff changeset
801 *len_ret = len + sizeof(*addr) - sizeof(addr->sun_path);
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
802 return 1;
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
803 }
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
804 #endif /* AF_UNIX */
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
805
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
806 case AF_INET:
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
807 {
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
808 struct sockaddr_in* addr;
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 925
diff changeset
809 char *host;
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
810 int port;
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
811 addr=(struct sockaddr_in*)&(s->sock_addr).in;
15466
9731bbb52fb4 Patch by Michael Hudson to clarify the error message from
Guido van Rossum <guido@python.org>
parents: 15046
diff changeset
812 if (!PyTuple_Check(args)) {
9731bbb52fb4 Patch by Michael Hudson to clarify the error message from
Guido van Rossum <guido@python.org>
parents: 15046
diff changeset
813 PyErr_Format(PyExc_TypeError,
9731bbb52fb4 Patch by Michael Hudson to clarify the error message from
Guido van Rossum <guido@python.org>
parents: 15046
diff changeset
814 "getsockaddrarg: AF_INET address must be tuple, not %.500s",
9731bbb52fb4 Patch by Michael Hudson to clarify the error message from
Guido van Rossum <guido@python.org>
parents: 15046
diff changeset
815 args->ob_type->tp_name);
9731bbb52fb4 Patch by Michael Hudson to clarify the error message from
Guido van Rossum <guido@python.org>
parents: 15046
diff changeset
816 return 0;
9731bbb52fb4 Patch by Michael Hudson to clarify the error message from
Guido van Rossum <guido@python.org>
parents: 15046
diff changeset
817 }
9731bbb52fb4 Patch by Michael Hudson to clarify the error message from
Guido van Rossum <guido@python.org>
parents: 15046
diff changeset
818 if (!PyArg_ParseTuple(args, "si:getsockaddrarg", &host, &port))
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
819 return 0;
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
820 if (setipaddr(host, (struct sockaddr *)addr, AF_INET) < 0)
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
821 return 0;
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
822 addr->sin_family = AF_INET;
5287
5af766a1b531 Tweaks to keep the Microsoft compiler quier.
Guido van Rossum <guido@python.org>
parents: 4871
diff changeset
823 addr->sin_port = htons((short)port);
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
824 *addr_ret = (struct sockaddr *) addr;
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
825 *len_ret = sizeof *addr;
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
826 return 1;
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
827 }
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
828
21128
15ff504632ed Remove INET6 define. Use ENABLE_IPV6 instead.
Martin v. Löwis <martin@v.loewis.de>
parents: 21094
diff changeset
829 #ifdef ENABLE_IPV6
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
830 case AF_INET6:
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
831 {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
832 struct sockaddr_in6* addr;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
833 char *host;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
834 int port, flowinfo, scope_id;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
835 addr = (struct sockaddr_in6*)&(s->sock_addr).in6;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
836 flowinfo = scope_id = 0;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
837 if (!PyArg_ParseTuple(args, "si|ii", &host, &port, &flowinfo,
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
838 &scope_id)) {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
839 return 0;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
840 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
841 if (setipaddr(host, (struct sockaddr *)addr, AF_INET6) < 0)
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
842 return 0;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
843 addr->sin6_family = s->sock_family;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
844 addr->sin6_port = htons((short)port);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
845 addr->sin6_flowinfo = flowinfo;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
846 addr->sin6_scope_id = scope_id;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
847 *addr_ret = (struct sockaddr *) addr;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
848 *len_ret = sizeof *addr;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
849 return 1;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
850 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
851 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
852
19151
cd44254360b6 Autotest for netpacket/packet.h, as it is not available on all Linux versions.
Martin v. Löwis <martin@v.loewis.de>
parents: 18997
diff changeset
853 #ifdef HAVE_NETPACKET_PACKET_H
16410
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
854 case AF_PACKET:
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
855 {
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
856 struct sockaddr_ll* addr;
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
857 struct ifreq ifr;
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
858 char *interfaceName;
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
859 int protoNumber;
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
860 int hatype = 0;
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
861 int pkttype = 0;
16427
c8ef864ba861 fix a couple last-minute bugs in the raw socket support
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16410
diff changeset
862 char *haddr;
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
863
16427
c8ef864ba861 fix a couple last-minute bugs in the raw socket support
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16410
diff changeset
864 if (!PyArg_ParseTuple(args, "si|iis", &interfaceName,
c8ef864ba861 fix a couple last-minute bugs in the raw socket support
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16410
diff changeset
865 &protoNumber, &pkttype, &hatype, &haddr))
16410
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
866 return 0;
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
867 strncpy(ifr.ifr_name, interfaceName, sizeof(ifr.ifr_name));
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
868 ifr.ifr_name[(sizeof(ifr.ifr_name))-1] = '\0';
16427
c8ef864ba861 fix a couple last-minute bugs in the raw socket support
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16410
diff changeset
869 if (ioctl(s->sock_fd, SIOCGIFINDEX, &ifr) < 0) {
20378
2f89b344fdb3 Use PySocket_Err() instead of PyErr_SetFromErrno().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20377
diff changeset
870 PySocket_Err();
16410
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
871 return 0;
16427
c8ef864ba861 fix a couple last-minute bugs in the raw socket support
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16410
diff changeset
872 }
16410
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
873 addr = &(s->sock_addr.ll);
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
874 addr->sll_family = AF_PACKET;
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
875 addr->sll_protocol = htons((short)protoNumber);
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
876 addr->sll_ifindex = ifr.ifr_ifindex;
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
877 addr->sll_pkttype = pkttype;
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
878 addr->sll_hatype = hatype;
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
879 *addr_ret = (struct sockaddr *) addr;
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
880 *len_ret = sizeof *addr;
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
881 return 1;
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
882 }
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
883 #endif
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
884
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
885 /* More cases here... */
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
886
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
887 default:
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
888 PyErr_SetString(PySocket_Error, "getsockaddrarg: bad family");
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
889 return 0;
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
890
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
891 }
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
892 }
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
893
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
894
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
895 /* Get the address length according to the socket object's address family.
900
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
896 Return 1 if the family is known, 0 otherwise. The length is returned
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
897 through len_ret. */
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
898
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
899 static int
13554
906efc1da247 Errare humanum est.
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13538
diff changeset
900 getsockaddrlen(PySocketSockObject *s, socklen_t *len_ret)
900
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
901 {
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
902 switch (s->sock_family) {
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
903
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
904 #ifdef AF_UNIX
900
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
905 case AF_UNIX:
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
906 {
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
907 *len_ret = sizeof (struct sockaddr_un);
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
908 return 1;
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
909 }
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
910 #endif /* AF_UNIX */
900
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
911
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
912 case AF_INET:
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
913 {
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
914 *len_ret = sizeof (struct sockaddr_in);
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
915 return 1;
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
916 }
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
917
21128
15ff504632ed Remove INET6 define. Use ENABLE_IPV6 instead.
Martin v. Löwis <martin@v.loewis.de>
parents: 21094
diff changeset
918 #ifdef ENABLE_IPV6
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
919 case AF_INET6:
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
920 {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
921 *len_ret = sizeof (struct sockaddr_in6);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
922 return 1;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
923 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
924 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
925
19151
cd44254360b6 Autotest for netpacket/packet.h, as it is not available on all Linux versions.
Martin v. Löwis <martin@v.loewis.de>
parents: 18997
diff changeset
926 #ifdef HAVE_NETPACKET_PACKET_H
16410
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
927 case AF_PACKET:
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
928 {
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
929 *len_ret = sizeof (struct sockaddr_ll);
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
930 return 1;
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
931 }
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
932 #endif
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
933
900
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
934 /* More cases here... */
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
935
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
936 default:
12050
b90880c0e5eb Fix all routines to use PyArg_ParseTuple(), and add ":name" to the
Guido van Rossum <guido@python.org>
parents: 11937
diff changeset
937 PyErr_SetString(PySocket_Error, "getsockaddrlen: bad family");
900
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
938 return 0;
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
939
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
940 }
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
941 }
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
942
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
943
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
944 /* s.accept() method */
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
945
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
946 static PyObject *
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
947 PySocketSock_accept(PySocketSockObject *s)
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
948 {
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
949 char addrbuf[256];
13171
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
950 SOCKET_T newfd;
12479
a3e1fecb43c6 Jack Jansen: The GUSI 2.0 I/O library used on the Mac uses the
Guido van Rossum <guido@python.org>
parents: 12436
diff changeset
951 socklen_t addrlen;
4871
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
952 PyObject *sock = NULL;
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
953 PyObject *addr = NULL;
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
954 PyObject *res = NULL;
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
955
900
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
956 if (!getsockaddrlen(s, &addrlen))
58a7438c2e7e Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents: 896
diff changeset
957 return NULL;
17737
0ebfe9a1eb43 Three uses of makesockaddr() used sockaddr buffers that had not be cleared;
Fred Drake <fdrake@acm.org>
parents: 17537
diff changeset
958 memset(addrbuf, 0, addrlen);
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
959 Py_BEGIN_ALLOW_THREADS
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
960 newfd = accept(s->sock_fd, (struct sockaddr *) addrbuf, &addrlen);
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
961 Py_END_ALLOW_THREADS
13171
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
962 #ifdef MS_WINDOWS
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
963 if (newfd == INVALID_SOCKET)
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
964 #else
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
965 if (newfd < 0)
13171
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
966 #endif
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
967 return PySocket_Err();
4871
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
968
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
969 /* Create the new object with unspecified family,
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
970 to avoid calls to bind() etc. on it. */
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
971 sock = (PyObject *) PySocketSock_New(newfd,
1207
b564bd4e57e1 * ceval.c: ifdef out the last argument passing compat hack.
Guido van Rossum <guido@python.org>
parents: 1132
diff changeset
972 s->sock_family,
b564bd4e57e1 * ceval.c: ifdef out the last argument passing compat hack.
Guido van Rossum <guido@python.org>
parents: 1132
diff changeset
973 s->sock_type,
b564bd4e57e1 * ceval.c: ifdef out the last argument passing compat hack.
Guido van Rossum <guido@python.org>
parents: 1132
diff changeset
974 s->sock_proto);
4871
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
975 if (sock == NULL) {
12436
dff7b26116de Use an explicit macro SOCKETCLOSE which expands to closesocket (on
Guido van Rossum <guido@python.org>
parents: 12319
diff changeset
976 SOCKETCLOSE(newfd);
4871
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
977 goto finally;
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
978 }
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
979 addr = makesockaddr(s->sock_fd, (struct sockaddr *)addrbuf,
16427
c8ef864ba861 fix a couple last-minute bugs in the raw socket support
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16410
diff changeset
980 addrlen);
c8ef864ba861 fix a couple last-minute bugs in the raw socket support
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16410
diff changeset
981 if (addr == NULL)
4871
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
982 goto finally;
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
983
16427
c8ef864ba861 fix a couple last-minute bugs in the raw socket support
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16410
diff changeset
984 res = Py_BuildValue("OO", sock, addr);
4871
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
985
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
986 finally:
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
987 Py_XDECREF(sock);
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
988 Py_XDECREF(addr);
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
989 return res;
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
990 }
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
991
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
992 static char accept_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
993 "accept() -> (socket object, address info)\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
994 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
995 Wait for an incoming connection. Return a new socket representing the\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
996 connection, and the address of the client. For IP sockets, the address\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
997 info is a pair (hostaddr, port).";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
998
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
999
1867
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1792
diff changeset
1000 /* s.setblocking(1 | 0) method */
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1792
diff changeset
1001
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1002 static PyObject *
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1003 PySocketSock_setblocking(PySocketSockObject *s, PyObject *arg)
1867
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1792
diff changeset
1004 {
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1792
diff changeset
1005 int block;
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1006 #ifndef RISCOS
5287
5af766a1b531 Tweaks to keep the Microsoft compiler quier.
Guido van Rossum <guido@python.org>
parents: 4871
diff changeset
1007 #ifndef MS_WINDOWS
1867
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1792
diff changeset
1008 int delay_flag;
5287
5af766a1b531 Tweaks to keep the Microsoft compiler quier.
Guido van Rossum <guido@python.org>
parents: 4871
diff changeset
1009 #endif
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1010 #endif
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1011 block = PyInt_AsLong(arg);
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1012 if (block == -1 && PyErr_Occurred())
1867
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1792
diff changeset
1013 return NULL;
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1014 Py_BEGIN_ALLOW_THREADS
8823
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
1015 #ifdef __BEOS__
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
1016 block = !block;
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
1017 setsockopt( s->sock_fd, SOL_SOCKET, SO_NONBLOCK,
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
1018 (void *)(&block), sizeof( int ) );
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
1019 #else
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1020 #ifndef RISCOS
3738
ce74bba8a6a6 Slightly different Windows ifdefs
Guido van Rossum <guido@python.org>
parents: 3702
diff changeset
1021 #ifndef MS_WINDOWS
6626
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
1022 #ifdef PYOS_OS2
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
1023 block = !block;
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
1024 ioctl(s->sock_fd, FIONBIO, (caddr_t)&block, sizeof(block));
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
1025 #else /* !PYOS_OS2 */
1867
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1792
diff changeset
1026 delay_flag = fcntl (s->sock_fd, F_GETFL, 0);
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1792
diff changeset
1027 if (block)
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1792
diff changeset
1028 delay_flag &= (~O_NDELAY);
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1792
diff changeset
1029 else
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1792
diff changeset
1030 delay_flag |= O_NDELAY;
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1792
diff changeset
1031 fcntl (s->sock_fd, F_SETFL, delay_flag);
6626
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
1032 #endif /* !PYOS_OS2 */
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
1033 #else /* MS_WINDOWS */
2736
37c48fde61b8 add setblocking(); NT changes; null-terminate Unix path
Guido van Rossum <guido@python.org>
parents: 2565
diff changeset
1034 block = !block;
37c48fde61b8 add setblocking(); NT changes; null-terminate Unix path
Guido van Rossum <guido@python.org>
parents: 2565
diff changeset
1035 ioctlsocket(s->sock_fd, FIONBIO, (u_long*)&block);
6626
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
1036 #endif /* MS_WINDOWS */
8823
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
1037 #endif /* __BEOS__ */
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1038 #endif /* RISCOS */
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1039 Py_END_ALLOW_THREADS
1867
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1792
diff changeset
1040
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1041 Py_INCREF(Py_None);
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1042 return Py_None;
1867
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1792
diff changeset
1043 }
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1792
diff changeset
1044
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1045 static char setblocking_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1046 "setblocking(flag)\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1047 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1048 Set the socket to blocking (flag is true) or non-blocking (false).\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1049 This uses the FIONBIO ioctl with the O_NDELAY flag.";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1050
1867
758c1374f303 Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents: 1792
diff changeset
1051
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1052 #ifdef RISCOS
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1053 /* s.sleeptaskw(1 | 0) method */
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1054
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1055 static PyObject *
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1056 PySocketSock_sleeptaskw(PySocketSockObject *s,PyObject *args)
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1057 {
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1058 int block;
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1059 int delay_flag;
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1060 if (!PyArg_GetInt(args, &block))
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1061 return NULL;
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1062 Py_BEGIN_ALLOW_THREADS
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1063 socketioctl(s->sock_fd, 0x80046679, (u_long*)&block);
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1064 Py_END_ALLOW_THREADS
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1065
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1066 Py_INCREF(Py_None);
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1067 return Py_None;
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1068 }
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1069 static char sleeptaskw_doc[] =
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1070 "sleeptaskw(flag)\n\
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1071 \n\
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1072 Allow sleeps in taskwindows.";
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1073 #endif
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1074
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1075
1039
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1076 /* s.setsockopt() method.
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1077 With an integer third argument, sets an integer option.
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1078 With a string third argument, sets an option from a buffer;
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1079 use optional built-in module 'struct' to encode the string. */
896
6459e2f21bf6 Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
1080
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1081 static PyObject *
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
1082 PySocketSock_setsockopt(PySocketSockObject *s, PyObject *args)
896
6459e2f21bf6 Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
1083 {
6459e2f21bf6 Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
1084 int level;
6459e2f21bf6 Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
1085 int optname;
1039
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1086 int res;
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1087 char *buf;
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1088 int buflen;
896
6459e2f21bf6 Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
1089 int flag;
6459e2f21bf6 Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
1090
12050
b90880c0e5eb Fix all routines to use PyArg_ParseTuple(), and add ":name" to the
Guido van Rossum <guido@python.org>
parents: 11937
diff changeset
1091 if (PyArg_ParseTuple(args, "iii:setsockopt",
b90880c0e5eb Fix all routines to use PyArg_ParseTuple(), and add ":name" to the
Guido van Rossum <guido@python.org>
parents: 11937
diff changeset
1092 &level, &optname, &flag)) {
1039
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1093 buf = (char *) &flag;
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1094 buflen = sizeof flag;
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1095 }
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1096 else {
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1097 PyErr_Clear();
12050
b90880c0e5eb Fix all routines to use PyArg_ParseTuple(), and add ":name" to the
Guido van Rossum <guido@python.org>
parents: 11937
diff changeset
1098 if (!PyArg_ParseTuple(args, "iis#:setsockopt",
b90880c0e5eb Fix all routines to use PyArg_ParseTuple(), and add ":name" to the
Guido van Rossum <guido@python.org>
parents: 11937
diff changeset
1099 &level, &optname, &buf, &buflen))
1039
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1100 return NULL;
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1101 }
13709
4e2aaf1e722a Use 'void' directly instead of the ANY #define, now that all code is ANSI C.
Thomas Wouters <thomas@python.org>
parents: 13695
diff changeset
1102 res = setsockopt(s->sock_fd, level, optname, (void *)buf, buflen);
896
6459e2f21bf6 Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
1103 if (res < 0)
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1104 return PySocket_Err();
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1105 Py_INCREF(Py_None);
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1106 return Py_None;
896
6459e2f21bf6 Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
1107 }
6459e2f21bf6 Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
1108
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1109 static char setsockopt_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1110 "setsockopt(level, option, value)\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1111 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1112 Set a socket option. See the Unix manual for level and option.\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1113 The value argument can either be an integer or a string.";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1114
896
6459e2f21bf6 Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
1115
1039
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1116 /* s.getsockopt() method.
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1117 With two arguments, retrieves an integer option.
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1118 With a third integer argument, retrieves a string buffer of that size;
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1119 use optional built-in module 'struct' to decode the string. */
896
6459e2f21bf6 Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
1120
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1121 static PyObject *
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
1122 PySocketSock_getsockopt(PySocketSockObject *s, PyObject *args)
896
6459e2f21bf6 Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
1123 {
6459e2f21bf6 Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
1124 int level;
6459e2f21bf6 Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
1125 int optname;
1039
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1126 int res;
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1127 PyObject *buf;
12479
a3e1fecb43c6 Jack Jansen: The GUSI 2.0 I/O library used on the Mac uses the
Guido van Rossum <guido@python.org>
parents: 12436
diff changeset
1128 socklen_t buflen = 0;
896
6459e2f21bf6 Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
1129
8823
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
1130 #ifdef __BEOS__
17806
3380279612a3 Fix a minor style consistency issue.
Fred Drake <fdrake@acm.org>
parents: 17737
diff changeset
1131 /* We have incomplete socket support. */
3380279612a3 Fix a minor style consistency issue.
Fred Drake <fdrake@acm.org>
parents: 17737
diff changeset
1132 PyErr_SetString(PySocket_Error, "getsockopt not supported");
8823
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
1133 return NULL;
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
1134 #else
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
1135
12050
b90880c0e5eb Fix all routines to use PyArg_ParseTuple(), and add ":name" to the
Guido van Rossum <guido@python.org>
parents: 11937
diff changeset
1136 if (!PyArg_ParseTuple(args, "ii|i:getsockopt",
b90880c0e5eb Fix all routines to use PyArg_ParseTuple(), and add ":name" to the
Guido van Rossum <guido@python.org>
parents: 11937
diff changeset
1137 &level, &optname, &buflen))
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1138 return NULL;
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1139
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1140 if (buflen == 0) {
1039
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1141 int flag = 0;
12479
a3e1fecb43c6 Jack Jansen: The GUSI 2.0 I/O library used on the Mac uses the
Guido van Rossum <guido@python.org>
parents: 12436
diff changeset
1142 socklen_t flagsize = sizeof flag;
1413
c914b10bf2ed * timemodule.c: Add hack for Solaris 2.
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
1143 res = getsockopt(s->sock_fd, level, optname,
13709
4e2aaf1e722a Use 'void' directly instead of the ANY #define, now that all code is ANSI C.
Thomas Wouters <thomas@python.org>
parents: 13695
diff changeset
1144 (void *)&flag, &flagsize);
1039
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1145 if (res < 0)
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1146 return PySocket_Err();
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1147 return PyInt_FromLong(flag);
1039
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1148 }
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1149 if (buflen <= 0 || buflen > 1024) {
4871
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
1150 PyErr_SetString(PySocket_Error,
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
1151 "getsockopt buflen out of range");
1039
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1152 return NULL;
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1153 }
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1154 buf = PyString_FromStringAndSize((char *)NULL, buflen);
1039
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1155 if (buf == NULL)
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1156 return NULL;
1413
c914b10bf2ed * timemodule.c: Add hack for Solaris 2.
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
1157 res = getsockopt(s->sock_fd, level, optname,
17806
3380279612a3 Fix a minor style consistency issue.
Fred Drake <fdrake@acm.org>
parents: 17737
diff changeset
1158 (void *)PyString_AS_STRING(buf), &buflen);
1039
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1159 if (res < 0) {
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1160 Py_DECREF(buf);
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1161 return PySocket_Err();
1039
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1162 }
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1163 _PyString_Resize(&buf, buflen);
1039
6aa0ee14ac2e Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents: 926
diff changeset
1164 return buf;
8823
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
1165 #endif /* __BEOS__ */
896
6459e2f21bf6 Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
1166 }
6459e2f21bf6 Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
1167
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1168 static char getsockopt_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1169 "getsockopt(level, option[, buffersize]) -> value\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1170 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1171 Get a socket option. See the Unix manual for level and option.\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1172 If a nonzero buffersize argument is given, the return value is a\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1173 string of that length; otherwise it is an integer.";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1174
896
6459e2f21bf6 Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
1175
13278
3370edad08ce Restore strict checking of socket address values; addresses passed to
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
1176 /* s.bind(sockaddr) method */
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1177
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1178 static PyObject *
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1179 PySocketSock_bind(PySocketSockObject *s, PyObject *addro)
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1180 {
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1181 struct sockaddr *addr;
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1182 int addrlen;
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 925
diff changeset
1183 int res;
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1184
13278
3370edad08ce Restore strict checking of socket address values; addresses passed to
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
1185 if (!getsockaddrarg(s, addro, &addr, &addrlen))
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1186 return NULL;
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1187 Py_BEGIN_ALLOW_THREADS
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 925
diff changeset
1188 res = bind(s->sock_fd, addr, addrlen);
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1189 Py_END_ALLOW_THREADS
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 925
diff changeset
1190 if (res < 0)
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1191 return PySocket_Err();
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1192 Py_INCREF(Py_None);
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1193 return Py_None;
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1194 }
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1195
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1196 static char bind_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1197 "bind(address)\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1198 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1199 Bind the socket to a local address. For IP sockets, the address is a\n\
16410
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
1200 pair (host, port); the host must refer to the local host. For raw packet\n\
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
1201 sockets the address is a tuple (ifname, proto [,pkttype [,hatype]])";
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1202
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1203
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1204 /* s.close() method.
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1205 Set the file descriptor to -1 so operations tried subsequently
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1206 will surely fail. */
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1207
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1208 static PyObject *
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1209 PySocketSock_close(PySocketSockObject *s)
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1210 {
15604
15e1eb1019b8 Adapted from a patch by Barry Scott, SF patch #102875 and SF bug
Guido van Rossum <guido@python.org>
parents: 15466
diff changeset
1211 SOCKET_T fd;
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1212
15604
15e1eb1019b8 Adapted from a patch by Barry Scott, SF patch #102875 and SF bug
Guido van Rossum <guido@python.org>
parents: 15466
diff changeset
1213 if ((fd = s->sock_fd) != -1) {
15e1eb1019b8 Adapted from a patch by Barry Scott, SF patch #102875 and SF bug
Guido van Rossum <guido@python.org>
parents: 15466
diff changeset
1214 s->sock_fd = -1;
4407
7ddd8b3f6802 Don't close an already closed socket.
Guido van Rossum <guido@python.org>
parents: 3738
diff changeset
1215 Py_BEGIN_ALLOW_THREADS
15604
15e1eb1019b8 Adapted from a patch by Barry Scott, SF patch #102875 and SF bug
Guido van Rossum <guido@python.org>
parents: 15466
diff changeset
1216 (void) SOCKETCLOSE(fd);
4407
7ddd8b3f6802 Don't close an already closed socket.
Guido van Rossum <guido@python.org>
parents: 3738
diff changeset
1217 Py_END_ALLOW_THREADS
7ddd8b3f6802 Don't close an already closed socket.
Guido van Rossum <guido@python.org>
parents: 3738
diff changeset
1218 }
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1219 Py_INCREF(Py_None);
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1220 return Py_None;
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1221 }
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1222
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1223 static char close_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1224 "close()\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1225 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1226 Close the socket. It cannot be used after this call.";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1227
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1228
13278
3370edad08ce Restore strict checking of socket address values; addresses passed to
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
1229 /* s.connect(sockaddr) method */
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1230
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1231 static PyObject *
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1232 PySocketSock_connect(PySocketSockObject *s, PyObject *addro)
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1233 {
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1234 struct sockaddr *addr;
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1235 int addrlen;
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 925
diff changeset
1236 int res;
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1237
13278
3370edad08ce Restore strict checking of socket address values; addresses passed to
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
1238 if (!getsockaddrarg(s, addro, &addr, &addrlen))
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1239 return NULL;
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1240 Py_BEGIN_ALLOW_THREADS
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 925
diff changeset
1241 res = connect(s->sock_fd, addr, addrlen);
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1242 Py_END_ALLOW_THREADS
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 925
diff changeset
1243 if (res < 0)
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1244 return PySocket_Err();
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1245 Py_INCREF(Py_None);
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1246 return Py_None;
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1247 }
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1248
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1249 static char connect_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1250 "connect(address)\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1251 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1252 Connect the socket to a remote address. For IP sockets, the address\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1253 is a pair (host, port).";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1254
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1255
13278
3370edad08ce Restore strict checking of socket address values; addresses passed to
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
1256 /* s.connect_ex(sockaddr) method */
6604
f67a6339ede7 Add s.connect_ex() which returns errno instead of raising an exception.
Guido van Rossum <guido@python.org>
parents: 6367
diff changeset
1257
f67a6339ede7 Add s.connect_ex() which returns errno instead of raising an exception.
Guido van Rossum <guido@python.org>
parents: 6367
diff changeset
1258 static PyObject *
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1259 PySocketSock_connect_ex(PySocketSockObject *s, PyObject *addro)
6604
f67a6339ede7 Add s.connect_ex() which returns errno instead of raising an exception.
Guido van Rossum <guido@python.org>
parents: 6367
diff changeset
1260 {
f67a6339ede7 Add s.connect_ex() which returns errno instead of raising an exception.
Guido van Rossum <guido@python.org>
parents: 6367
diff changeset
1261 struct sockaddr *addr;
f67a6339ede7 Add s.connect_ex() which returns errno instead of raising an exception.
Guido van Rossum <guido@python.org>
parents: 6367
diff changeset
1262 int addrlen;
f67a6339ede7 Add s.connect_ex() which returns errno instead of raising an exception.
Guido van Rossum <guido@python.org>
parents: 6367
diff changeset
1263 int res;
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1264
13278
3370edad08ce Restore strict checking of socket address values; addresses passed to
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
1265 if (!getsockaddrarg(s, addro, &addr, &addrlen))
6604
f67a6339ede7 Add s.connect_ex() which returns errno instead of raising an exception.
Guido van Rossum <guido@python.org>
parents: 6367
diff changeset
1266 return NULL;
f67a6339ede7 Add s.connect_ex() which returns errno instead of raising an exception.
Guido van Rossum <guido@python.org>
parents: 6367
diff changeset
1267 Py_BEGIN_ALLOW_THREADS
f67a6339ede7 Add s.connect_ex() which returns errno instead of raising an exception.
Guido van Rossum <guido@python.org>
parents: 6367
diff changeset
1268 res = connect(s->sock_fd, addr, addrlen);
f67a6339ede7 Add s.connect_ex() which returns errno instead of raising an exception.
Guido van Rossum <guido@python.org>
parents: 6367
diff changeset
1269 Py_END_ALLOW_THREADS
20756
828bf317880a PySocketSock_connect_ex(): On Windows, return the correct Windows exit
Tim Peters <tim.peters@gmail.com>
parents: 20730
diff changeset
1270 if (res != 0) {
828bf317880a PySocketSock_connect_ex(): On Windows, return the correct Windows exit
Tim Peters <tim.peters@gmail.com>
parents: 20730
diff changeset
1271 #ifdef MS_WINDOWS
828bf317880a PySocketSock_connect_ex(): On Windows, return the correct Windows exit
Tim Peters <tim.peters@gmail.com>
parents: 20730
diff changeset
1272 res = WSAGetLastError();
828bf317880a PySocketSock_connect_ex(): On Windows, return the correct Windows exit
Tim Peters <tim.peters@gmail.com>
parents: 20730
diff changeset
1273 #else
6604
f67a6339ede7 Add s.connect_ex() which returns errno instead of raising an exception.
Guido van Rossum <guido@python.org>
parents: 6367
diff changeset
1274 res = errno;
20756
828bf317880a PySocketSock_connect_ex(): On Windows, return the correct Windows exit
Tim Peters <tim.peters@gmail.com>
parents: 20730
diff changeset
1275 #endif
828bf317880a PySocketSock_connect_ex(): On Windows, return the correct Windows exit
Tim Peters <tim.peters@gmail.com>
parents: 20730
diff changeset
1276 }
6604
f67a6339ede7 Add s.connect_ex() which returns errno instead of raising an exception.
Guido van Rossum <guido@python.org>
parents: 6367
diff changeset
1277 return PyInt_FromLong((long) res);
f67a6339ede7 Add s.connect_ex() which returns errno instead of raising an exception.
Guido van Rossum <guido@python.org>
parents: 6367
diff changeset
1278 }
f67a6339ede7 Add s.connect_ex() which returns errno instead of raising an exception.
Guido van Rossum <guido@python.org>
parents: 6367
diff changeset
1279
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1280 static char connect_ex_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1281 "connect_ex(address)\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1282 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1283 This is like connect(address), but returns an error code (the errno value)\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1284 instead of raising an exception when an error occurs.";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1285
6604
f67a6339ede7 Add s.connect_ex() which returns errno instead of raising an exception.
Guido van Rossum <guido@python.org>
parents: 6367
diff changeset
1286
902
a4793ae26682 Changes for new UNIX-specific built-in module 'select' and new header for
Guido van Rossum <guido@python.org>
parents: 900
diff changeset
1287 /* s.fileno() method */
a4793ae26682 Changes for new UNIX-specific built-in module 'select' and new header for
Guido van Rossum <guido@python.org>
parents: 900
diff changeset
1288
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1289 static PyObject *
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1290 PySocketSock_fileno(PySocketSockObject *s)
902
a4793ae26682 Changes for new UNIX-specific built-in module 'select' and new header for
Guido van Rossum <guido@python.org>
parents: 900
diff changeset
1291 {
13171
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
1292 #if SIZEOF_SOCKET_T <= SIZEOF_LONG
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1293 return PyInt_FromLong((long) s->sock_fd);
13171
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
1294 #else
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
1295 return PyLong_FromLongLong((LONG_LONG)s->sock_fd);
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
1296 #endif
902
a4793ae26682 Changes for new UNIX-specific built-in module 'select' and new header for
Guido van Rossum <guido@python.org>
parents: 900
diff changeset
1297 }
a4793ae26682 Changes for new UNIX-specific built-in module 'select' and new header for
Guido van Rossum <guido@python.org>
parents: 900
diff changeset
1298
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1299 static char fileno_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1300 "fileno() -> integer\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1301 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1302 Return the integer file descriptor of the socket.";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1303
902
a4793ae26682 Changes for new UNIX-specific built-in module 'select' and new header for
Guido van Rossum <guido@python.org>
parents: 900
diff changeset
1304
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1305 #ifndef NO_DUP
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1306 /* s.dup() method */
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1307
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1308 static PyObject *
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1309 PySocketSock_dup(PySocketSockObject *s)
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1310 {
13171
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
1311 SOCKET_T newfd;
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1312 PyObject *sock;
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1313
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1314 newfd = dup(s->sock_fd);
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1315 if (newfd < 0)
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1316 return PySocket_Err();
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1317 sock = (PyObject *) PySocketSock_New(newfd,
4871
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
1318 s->sock_family,
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
1319 s->sock_type,
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
1320 s->sock_proto);
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1321 if (sock == NULL)
12436
dff7b26116de Use an explicit macro SOCKETCLOSE which expands to closesocket (on
Guido van Rossum <guido@python.org>
parents: 12319
diff changeset
1322 SOCKETCLOSE(newfd);
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1323 return sock;
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1324 }
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1325
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1326 static char dup_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1327 "dup() -> socket object\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1328 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1329 Return a new socket object connected to the same system resource.";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1330
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1331 #endif
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1332
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1333
1094
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1039
diff changeset
1334 /* s.getsockname() method */
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1039
diff changeset
1335
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1336 static PyObject *
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1337 PySocketSock_getsockname(PySocketSockObject *s)
1094
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1039
diff changeset
1338 {
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1039
diff changeset
1339 char addrbuf[256];
12479
a3e1fecb43c6 Jack Jansen: The GUSI 2.0 I/O library used on the Mac uses the
Guido van Rossum <guido@python.org>
parents: 12436
diff changeset
1340 int res;
a3e1fecb43c6 Jack Jansen: The GUSI 2.0 I/O library used on the Mac uses the
Guido van Rossum <guido@python.org>
parents: 12436
diff changeset
1341 socklen_t addrlen;
a3e1fecb43c6 Jack Jansen: The GUSI 2.0 I/O library used on the Mac uses the
Guido van Rossum <guido@python.org>
parents: 12436
diff changeset
1342
1094
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1039
diff changeset
1343 if (!getsockaddrlen(s, &addrlen))
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1039
diff changeset
1344 return NULL;
3335
9bd1e41d6b11 clear addr buffer before calling getsockname
Guido van Rossum <guido@python.org>
parents: 3091
diff changeset
1345 memset(addrbuf, 0, addrlen);
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1346 Py_BEGIN_ALLOW_THREADS
1094
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1039
diff changeset
1347 res = getsockname(s->sock_fd, (struct sockaddr *) addrbuf, &addrlen);
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1348 Py_END_ALLOW_THREADS
1094
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1039
diff changeset
1349 if (res < 0)
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1350 return PySocket_Err();
16427
c8ef864ba861 fix a couple last-minute bugs in the raw socket support
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16410
diff changeset
1351 return makesockaddr(s->sock_fd, (struct sockaddr *) addrbuf, addrlen);
1094
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1039
diff changeset
1352 }
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1039
diff changeset
1353
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1354 static char getsockname_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1355 "getsockname() -> address info\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1356 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1357 Return the address of the local endpoint. For IP sockets, the address\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1358 info is a pair (hostaddr, port).";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1359
1094
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1039
diff changeset
1360
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1361 #ifdef HAVE_GETPEERNAME /* Cray APP doesn't have this :-( */
1094
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1039
diff changeset
1362 /* s.getpeername() method */
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1039
diff changeset
1363
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1364 static PyObject *
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1365 PySocketSock_getpeername(PySocketSockObject *s)
1094
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1039
diff changeset
1366 {
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1039
diff changeset
1367 char addrbuf[256];
12479
a3e1fecb43c6 Jack Jansen: The GUSI 2.0 I/O library used on the Mac uses the
Guido van Rossum <guido@python.org>
parents: 12436
diff changeset
1368 int res;
a3e1fecb43c6 Jack Jansen: The GUSI 2.0 I/O library used on the Mac uses the
Guido van Rossum <guido@python.org>
parents: 12436
diff changeset
1369 socklen_t addrlen;
a3e1fecb43c6 Jack Jansen: The GUSI 2.0 I/O library used on the Mac uses the
Guido van Rossum <guido@python.org>
parents: 12436
diff changeset
1370
1094
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1039
diff changeset
1371 if (!getsockaddrlen(s, &addrlen))
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1039
diff changeset
1372 return NULL;
17737
0ebfe9a1eb43 Three uses of makesockaddr() used sockaddr buffers that had not be cleared;
Fred Drake <fdrake@acm.org>
parents: 17537
diff changeset
1373 memset(addrbuf, 0, addrlen);
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1374 Py_BEGIN_ALLOW_THREADS
1094
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1039
diff changeset
1375 res = getpeername(s->sock_fd, (struct sockaddr *) addrbuf, &addrlen);
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1376 Py_END_ALLOW_THREADS
1094
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1039
diff changeset
1377 if (res < 0)
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1378 return PySocket_Err();
16427
c8ef864ba861 fix a couple last-minute bugs in the raw socket support
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16410
diff changeset
1379 return makesockaddr(s->sock_fd, (struct sockaddr *) addrbuf, addrlen);
1094
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1039
diff changeset
1380 }
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1381
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1382 static char getpeername_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1383 "getpeername() -> address info\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1384 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1385 Return the address of the remote endpoint. For IP sockets, the address\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1386 info is a pair (hostaddr, port).";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1387
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1388 #endif /* HAVE_GETPEERNAME */
1094
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1039
diff changeset
1389
d2af6bdcb6d0 * config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents: 1039
diff changeset
1390
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1391 /* s.listen(n) method */
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1392
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1393 static PyObject *
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1394 PySocketSock_listen(PySocketSockObject *s, PyObject *arg)
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1395 {
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1396 int backlog;
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 925
diff changeset
1397 int res;
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1398
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1399 backlog = PyInt_AsLong(arg);
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1400 if (backlog == -1 && PyErr_Occurred())
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1401 return NULL;
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1402 Py_BEGIN_ALLOW_THREADS
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1403 if (backlog < 1)
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1404 backlog = 1;
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 925
diff changeset
1405 res = listen(s->sock_fd, backlog);
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1406 Py_END_ALLOW_THREADS
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 925
diff changeset
1407 if (res < 0)
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1408 return PySocket_Err();
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1409 Py_INCREF(Py_None);
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1410 return Py_None;
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1411 }
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1412
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1413 static char listen_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1414 "listen(backlog)\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1415 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1416 Enable a server to accept connections. The backlog argument must be at\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1417 least 1; it specifies the number of unaccepted connection that the system\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1418 will allow before refusing new connections.";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1419
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1420
1792
a584b4bbbc59 Changes to make it work and compile on NT, by Mark Hammond.
Guido van Rossum <guido@python.org>
parents: 1760
diff changeset
1421 #ifndef NO_DUP
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1422 /* s.makefile(mode) method.
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1423 Create a new open file object referring to a dupped version of
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1424 the socket's file descriptor. (The dup() call is necessary so
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1425 that the open file and socket objects may be closed independent
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1426 of each other.)
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1427 The mode argument specifies 'r' or 'w' passed to fdopen(). */
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1428
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1429 static PyObject *
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
1430 PySocketSock_makefile(PySocketSockObject *s, PyObject *args)
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1431 {
13447
a89f7f268de4 Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents: 13403
diff changeset
1432 extern int fclose(FILE *);
2532
9e5a09841781 mode and optional bufsize for makefile()
Guido van Rossum <guido@python.org>
parents: 2369
diff changeset
1433 char *mode = "r";
9e5a09841781 mode and optional bufsize for makefile()
Guido van Rossum <guido@python.org>
parents: 2369
diff changeset
1434 int bufsize = -1;
13171
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
1435 #ifdef MS_WIN32
19568
b0f5278a2ab4 SF bug [#456252] Python should never stomp on [u]intptr_t.
Tim Peters <tim.peters@gmail.com>
parents: 19415
diff changeset
1436 Py_intptr_t fd;
13171
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
1437 #else
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1438 int fd;
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1439 #endif
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1440 FILE *fp;
2532
9e5a09841781 mode and optional bufsize for makefile()
Guido van Rossum <guido@python.org>
parents: 2369
diff changeset
1441 PyObject *f;
9e5a09841781 mode and optional bufsize for makefile()
Guido van Rossum <guido@python.org>
parents: 2369
diff changeset
1442
11882
dc65c5f6ad7c Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents: 11527
diff changeset
1443 if (!PyArg_ParseTuple(args, "|si:makefile", &mode, &bufsize))
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1444 return NULL;
3702
3408756ec601 changed windows test symbols; removed debug printf from sockets
Guido van Rossum <guido@python.org>
parents: 3700
diff changeset
1445 #ifdef MS_WIN32
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1446 if (((fd = _open_osfhandle(s->sock_fd, _O_BINARY)) < 0) ||
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1447 ((fd = dup(fd)) < 0) || ((fp = fdopen(fd, mode)) == NULL))
2736
37c48fde61b8 add setblocking(); NT changes; null-terminate Unix path
Guido van Rossum <guido@python.org>
parents: 2565
diff changeset
1448 #else
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1449 if ((fd = dup(s->sock_fd)) < 0 || (fp = fdopen(fd, mode)) == NULL)
2736
37c48fde61b8 add setblocking(); NT changes; null-terminate Unix path
Guido van Rossum <guido@python.org>
parents: 2565
diff changeset
1450 #endif
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1451 {
2532
9e5a09841781 mode and optional bufsize for makefile()
Guido van Rossum <guido@python.org>
parents: 2369
diff changeset
1452 if (fd >= 0)
12436
dff7b26116de Use an explicit macro SOCKETCLOSE which expands to closesocket (on
Guido van Rossum <guido@python.org>
parents: 12319
diff changeset
1453 SOCKETCLOSE(fd);
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1454 return PySocket_Err();
2532
9e5a09841781 mode and optional bufsize for makefile()
Guido van Rossum <guido@python.org>
parents: 2369
diff changeset
1455 }
9e5a09841781 mode and optional bufsize for makefile()
Guido van Rossum <guido@python.org>
parents: 2369
diff changeset
1456 f = PyFile_FromFile(fp, "<socket>", mode, fclose);
9e5a09841781 mode and optional bufsize for makefile()
Guido van Rossum <guido@python.org>
parents: 2369
diff changeset
1457 if (f != NULL)
9e5a09841781 mode and optional bufsize for makefile()
Guido van Rossum <guido@python.org>
parents: 2369
diff changeset
1458 PyFile_SetBufSize(f, bufsize);
9e5a09841781 mode and optional bufsize for makefile()
Guido van Rossum <guido@python.org>
parents: 2369
diff changeset
1459 return f;
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1460 }
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1461
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1462 static char makefile_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1463 "makefile([mode[, buffersize]]) -> file object\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1464 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1465 Return a regular file object corresponding to the socket.\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1466 The mode and buffersize arguments are as for the built-in open() function.";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1467
1792
a584b4bbbc59 Changes to make it work and compile on NT, by Mark Hammond.
Guido van Rossum <guido@python.org>
parents: 1760
diff changeset
1468 #endif /* NO_DUP */
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1469
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1470
1293
ac3c80abbf43 * classobject.c: in instance_getattr, don't make a method out of a
Guido van Rossum <guido@python.org>
parents: 1271
diff changeset
1471 /* s.recv(nbytes [,flags]) method */
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1472
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1473 static PyObject *
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
1474 PySocketSock_recv(PySocketSockObject *s, PyObject *args)
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1475 {
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1476 int len, n, flags = 0;
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1477 PyObject *buf;
11882
dc65c5f6ad7c Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents: 11527
diff changeset
1478 if (!PyArg_ParseTuple(args, "i|i:recv", &len, &flags))
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1479 return NULL;
21022
9f66aaddf8d4 Test for negative buffer sizes. Fixes #482871.
Martin v. Löwis <martin@v.loewis.de>
parents: 20920
diff changeset
1480 if (len < 0) {
9f66aaddf8d4 Test for negative buffer sizes. Fixes #482871.
Martin v. Löwis <martin@v.loewis.de>
parents: 20920
diff changeset
1481 PyErr_SetString(PyExc_ValueError,
9f66aaddf8d4 Test for negative buffer sizes. Fixes #482871.
Martin v. Löwis <martin@v.loewis.de>
parents: 20920
diff changeset
1482 "negative buffersize in connect");
9f66aaddf8d4 Test for negative buffer sizes. Fixes #482871.
Martin v. Löwis <martin@v.loewis.de>
parents: 20920
diff changeset
1483 return NULL;
9f66aaddf8d4 Test for negative buffer sizes. Fixes #482871.
Martin v. Löwis <martin@v.loewis.de>
parents: 20920
diff changeset
1484 }
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1485 buf = PyString_FromStringAndSize((char *) 0, len);
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1486 if (buf == NULL)
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1487 return NULL;
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1488 Py_BEGIN_ALLOW_THREADS
19401
8607bc890b1f It will always be a string, because it is created just before this call.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 19278
diff changeset
1489 n = recv(s->sock_fd, PyString_AS_STRING(buf), len, flags);
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1490 Py_END_ALLOW_THREADS
3091
7ddfb629ac3f plug some leaks
Guido van Rossum <guido@python.org>
parents: 2736
diff changeset
1491 if (n < 0) {
7ddfb629ac3f plug some leaks
Guido van Rossum <guido@python.org>
parents: 2736
diff changeset
1492 Py_DECREF(buf);
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1493 return PySocket_Err();
3091
7ddfb629ac3f plug some leaks
Guido van Rossum <guido@python.org>
parents: 2736
diff changeset
1494 }
3665
5188374377ae Get rid of obsolete allowbroadcast().
Guido van Rossum <guido@python.org>
parents: 3594
diff changeset
1495 if (n != len && _PyString_Resize(&buf, n) < 0)
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1496 return NULL;
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1497 return buf;
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1498 }
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1499
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1500 static char recv_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1501 "recv(buffersize[, flags]) -> data\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1502 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1503 Receive up to buffersize bytes from the socket. For the optional flags\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1504 argument, see the Unix manual. When no data is available, block until\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1505 at least one byte is available or until the remote end is closed. When\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1506 the remote end is closed and all data is read, return the empty string.";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1507
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1508
1293
ac3c80abbf43 * classobject.c: in instance_getattr, don't make a method out of a
Guido van Rossum <guido@python.org>
parents: 1271
diff changeset
1509 /* s.recvfrom(nbytes [,flags]) method */
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1510
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1511 static PyObject *
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
1512 PySocketSock_recvfrom(PySocketSockObject *s, PyObject *args)
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1513 {
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1514 char addrbuf[256];
4871
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
1515 PyObject *buf = NULL;
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
1516 PyObject *addr = NULL;
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
1517 PyObject *ret = NULL;
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
1518
12479
a3e1fecb43c6 Jack Jansen: The GUSI 2.0 I/O library used on the Mac uses the
Guido van Rossum <guido@python.org>
parents: 12436
diff changeset
1519 int len, n, flags = 0;
a3e1fecb43c6 Jack Jansen: The GUSI 2.0 I/O library used on the Mac uses the
Guido van Rossum <guido@python.org>
parents: 12436
diff changeset
1520 socklen_t addrlen;
11882
dc65c5f6ad7c Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents: 11527
diff changeset
1521 if (!PyArg_ParseTuple(args, "i|i:recvfrom", &len, &flags))
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1522 return NULL;
1295
4773d5c3b5a4 * socketmodule.c: fix long-standing bug in recvfrom() -- addrlen
Guido van Rossum <guido@python.org>
parents: 1293
diff changeset
1523 if (!getsockaddrlen(s, &addrlen))
4773d5c3b5a4 * socketmodule.c: fix long-standing bug in recvfrom() -- addrlen
Guido van Rossum <guido@python.org>
parents: 1293
diff changeset
1524 return NULL;
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1525 buf = PyString_FromStringAndSize((char *) 0, len);
1295
4773d5c3b5a4 * socketmodule.c: fix long-standing bug in recvfrom() -- addrlen
Guido van Rossum <guido@python.org>
parents: 1293
diff changeset
1526 if (buf == NULL)
4773d5c3b5a4 * socketmodule.c: fix long-standing bug in recvfrom() -- addrlen
Guido van Rossum <guido@python.org>
parents: 1293
diff changeset
1527 return NULL;
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1528 Py_BEGIN_ALLOW_THREADS
17737
0ebfe9a1eb43 Three uses of makesockaddr() used sockaddr buffers that had not be cleared;
Fred Drake <fdrake@acm.org>
parents: 17537
diff changeset
1529 memset(addrbuf, 0, addrlen);
0ebfe9a1eb43 Three uses of makesockaddr() used sockaddr buffers that had not be cleared;
Fred Drake <fdrake@acm.org>
parents: 17537
diff changeset
1530 n = recvfrom(s->sock_fd, PyString_AS_STRING(buf), len, flags,
3702
3408756ec601 changed windows test symbols; removed debug printf from sockets
Guido van Rossum <guido@python.org>
parents: 3700
diff changeset
1531 #ifndef MS_WINDOWS
6718
32f2eda2946c Left-aligned preprocessor directives and changed C++ comments to C
Guido van Rossum <guido@python.org>
parents: 6626
diff changeset
1532 #if defined(PYOS_OS2)
6626
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
1533 (struct sockaddr *)addrbuf, &addrlen
6718
32f2eda2946c Left-aligned preprocessor directives and changed C++ comments to C
Guido van Rossum <guido@python.org>
parents: 6626
diff changeset
1534 #else
13709
4e2aaf1e722a Use 'void' directly instead of the ANY #define, now that all code is ANSI C.
Thomas Wouters <thomas@python.org>
parents: 13695
diff changeset
1535 (void *)addrbuf, &addrlen
6718
32f2eda2946c Left-aligned preprocessor directives and changed C++ comments to C
Guido van Rossum <guido@python.org>
parents: 6626
diff changeset
1536 #endif
1792
a584b4bbbc59 Changes to make it work and compile on NT, by Mark Hammond.
Guido van Rossum <guido@python.org>
parents: 1760
diff changeset
1537 #else
4871
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
1538 (struct sockaddr *)addrbuf, &addrlen
1792
a584b4bbbc59 Changes to make it work and compile on NT, by Mark Hammond.
Guido van Rossum <guido@python.org>
parents: 1760
diff changeset
1539 #endif
4871
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
1540 );
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1541 Py_END_ALLOW_THREADS
3091
7ddfb629ac3f plug some leaks
Guido van Rossum <guido@python.org>
parents: 2736
diff changeset
1542 if (n < 0) {
7ddfb629ac3f plug some leaks
Guido van Rossum <guido@python.org>
parents: 2736
diff changeset
1543 Py_DECREF(buf);
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1544 return PySocket_Err();
3091
7ddfb629ac3f plug some leaks
Guido van Rossum <guido@python.org>
parents: 2736
diff changeset
1545 }
3665
5188374377ae Get rid of obsolete allowbroadcast().
Guido van Rossum <guido@python.org>
parents: 3594
diff changeset
1546 if (n != len && _PyString_Resize(&buf, n) < 0)
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1547 return NULL;
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1548
16427
c8ef864ba861 fix a couple last-minute bugs in the raw socket support
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16410
diff changeset
1549 if (!(addr = makesockaddr(s->sock_fd, (struct sockaddr *)addrbuf, addrlen)))
4871
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
1550 goto finally;
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
1551
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1552 ret = Py_BuildValue("OO", buf, addr);
4871
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
1553 finally:
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1554 Py_XDECREF(addr);
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1555 Py_XDECREF(buf);
1207
b564bd4e57e1 * ceval.c: ifdef out the last argument passing compat hack.
Guido van Rossum <guido@python.org>
parents: 1132
diff changeset
1556 return ret;
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1557 }
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1558
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1559 static char recvfrom_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1560 "recvfrom(buffersize[, flags]) -> (data, address info)\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1561 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1562 Like recv(buffersize, flags) but also return the sender's address info.";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1563
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1564
1293
ac3c80abbf43 * classobject.c: in instance_getattr, don't make a method out of a
Guido van Rossum <guido@python.org>
parents: 1271
diff changeset
1565 /* s.send(data [,flags]) method */
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1566
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1567 static PyObject *
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
1568 PySocketSock_send(PySocketSockObject *s, PyObject *args)
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1569 {
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 925
diff changeset
1570 char *buf;
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1571 int len, n, flags = 0;
11882
dc65c5f6ad7c Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents: 11527
diff changeset
1572 if (!PyArg_ParseTuple(args, "s#|i:send", &buf, &len, &flags))
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1573 return NULL;
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1574 Py_BEGIN_ALLOW_THREADS
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 925
diff changeset
1575 n = send(s->sock_fd, buf, len, flags);
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1576 Py_END_ALLOW_THREADS
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1577 if (n < 0)
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1578 return PySocket_Err();
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1579 return PyInt_FromLong((long)n);
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1580 }
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1581
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1582 static char send_doc[] =
20679
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1583 "send(data[, flags]) -> count\n\
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1584 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1585 Send a data string to the socket. For the optional flags\n\
20679
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1586 argument, see the Unix manual. Return the number of bytes\n\
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1587 sent; this may be less than len(data) if the network is busy.";
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1588
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1589
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1590 /* s.sendall(data [,flags]) method */
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1591
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1592 static PyObject *
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1593 PySocketSock_sendall(PySocketSockObject *s, PyObject *args)
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1594 {
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1595 char *buf;
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1596 int len, n, flags = 0, total = 0;
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1597 if (!PyArg_ParseTuple(args, "s#|i:sendall", &buf, &len, &flags))
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1598 return NULL;
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1599 Py_BEGIN_ALLOW_THREADS
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1600 do {
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1601 n = send(s->sock_fd, buf, len, flags);
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1602 if (n < 0)
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1603 break;
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1604 total += n;
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1605 buf += n;
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1606 len -= n;
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1607 } while (len > 0);
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1608 Py_END_ALLOW_THREADS
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1609 if (n < 0)
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1610 return PySocket_Err();
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1611 Py_INCREF(Py_None);
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1612 return Py_None;
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1613 }
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1614
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1615 static char sendall_doc[] =
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1616 "sendall(data[, flags])\n\
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1617 \n\
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1618 Send a data string to the socket. For the optional flags\n\
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1619 argument, see the Unix manual. This calls send() repeatedly\n\
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1620 until all data is sent. If an error occurs, it's impossible\n\
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1621 to tell how much data has been sent.";
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1622
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1623
1293
ac3c80abbf43 * classobject.c: in instance_getattr, don't make a method out of a
Guido van Rossum <guido@python.org>
parents: 1271
diff changeset
1624 /* s.sendto(data, [flags,] sockaddr) method */
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1625
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1626 static PyObject *
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
1627 PySocketSock_sendto(PySocketSockObject *s, PyObject *args)
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1628 {
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1629 PyObject *addro;
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 925
diff changeset
1630 char *buf;
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1631 struct sockaddr *addr;
1293
ac3c80abbf43 * classobject.c: in instance_getattr, don't make a method out of a
Guido van Rossum <guido@python.org>
parents: 1271
diff changeset
1632 int addrlen, len, n, flags;
ac3c80abbf43 * classobject.c: in instance_getattr, don't make a method out of a
Guido van Rossum <guido@python.org>
parents: 1271
diff changeset
1633 flags = 0;
12050
b90880c0e5eb Fix all routines to use PyArg_ParseTuple(), and add ":name" to the
Guido van Rossum <guido@python.org>
parents: 11937
diff changeset
1634 if (!PyArg_ParseTuple(args, "s#O:sendto", &buf, &len, &addro)) {
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1635 PyErr_Clear();
12050
b90880c0e5eb Fix all routines to use PyArg_ParseTuple(), and add ":name" to the
Guido van Rossum <guido@python.org>
parents: 11937
diff changeset
1636 if (!PyArg_ParseTuple(args, "s#iO:sendto",
b90880c0e5eb Fix all routines to use PyArg_ParseTuple(), and add ":name" to the
Guido van Rossum <guido@python.org>
parents: 11937
diff changeset
1637 &buf, &len, &flags, &addro))
1293
ac3c80abbf43 * classobject.c: in instance_getattr, don't make a method out of a
Guido van Rossum <guido@python.org>
parents: 1271
diff changeset
1638 return NULL;
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1639 }
1293
ac3c80abbf43 * classobject.c: in instance_getattr, don't make a method out of a
Guido van Rossum <guido@python.org>
parents: 1271
diff changeset
1640 if (!getsockaddrarg(s, addro, &addr, &addrlen))
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1641 return NULL;
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1642 Py_BEGIN_ALLOW_THREADS
1293
ac3c80abbf43 * classobject.c: in instance_getattr, don't make a method out of a
Guido van Rossum <guido@python.org>
parents: 1271
diff changeset
1643 n = sendto(s->sock_fd, buf, len, flags, addr, addrlen);
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1644 Py_END_ALLOW_THREADS
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1645 if (n < 0)
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1646 return PySocket_Err();
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1647 return PyInt_FromLong((long)n);
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1648 }
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1649
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1650 static char sendto_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1651 "sendto(data[, flags], address)\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1652 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1653 Like send(data, flags) but allows specifying the destination address.\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1654 For IP sockets, the address is a pair (hostaddr, port).";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1655
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1656
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1657 /* s.shutdown(how) method */
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1658
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1659 static PyObject *
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1660 PySocketSock_shutdown(PySocketSockObject *s, PyObject *arg)
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1661 {
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1662 int how;
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 925
diff changeset
1663 int res;
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1664
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1665 how = PyInt_AsLong(arg);
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1666 if (how == -1 && PyErr_Occurred())
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1667 return NULL;
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1668 Py_BEGIN_ALLOW_THREADS
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 925
diff changeset
1669 res = shutdown(s->sock_fd, how);
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1670 Py_END_ALLOW_THREADS
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 925
diff changeset
1671 if (res < 0)
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1672 return PySocket_Err();
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1673 Py_INCREF(Py_None);
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1674 return Py_None;
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1675 }
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1676
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1677 static char shutdown_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1678 "shutdown(flag)\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1679 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1680 Shut down the reading side of the socket (flag == 0), the writing side\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1681 of the socket (flag == 1), or both ends (flag == 2).";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1682
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1683
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1684 /* List of methods for socket objects */
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1685
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1686 static PyMethodDef PySocketSock_methods[] = {
20440
9be2cc6b9959 Fix a bunch of warnings reported by Skip.
Guido van Rossum <guido@python.org>
parents: 20412
diff changeset
1687 {"accept", (PyCFunction)PySocketSock_accept, METH_NOARGS,
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1688 accept_doc},
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1689 {"bind", (PyCFunction)PySocketSock_bind, METH_O,
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1690 bind_doc},
20440
9be2cc6b9959 Fix a bunch of warnings reported by Skip.
Guido van Rossum <guido@python.org>
parents: 20412
diff changeset
1691 {"close", (PyCFunction)PySocketSock_close, METH_NOARGS,
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1692 close_doc},
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1693 {"connect", (PyCFunction)PySocketSock_connect, METH_O,
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1694 connect_doc},
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1695 {"connect_ex", (PyCFunction)PySocketSock_connect_ex, METH_O,
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1696 connect_ex_doc},
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1697 #ifndef NO_DUP
20440
9be2cc6b9959 Fix a bunch of warnings reported by Skip.
Guido van Rossum <guido@python.org>
parents: 20412
diff changeset
1698 {"dup", (PyCFunction)PySocketSock_dup, METH_NOARGS,
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1699 dup_doc},
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1700 #endif
20440
9be2cc6b9959 Fix a bunch of warnings reported by Skip.
Guido van Rossum <guido@python.org>
parents: 20412
diff changeset
1701 {"fileno", (PyCFunction)PySocketSock_fileno, METH_NOARGS,
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1702 fileno_doc},
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1703 #ifdef HAVE_GETPEERNAME
20440
9be2cc6b9959 Fix a bunch of warnings reported by Skip.
Guido van Rossum <guido@python.org>
parents: 20412
diff changeset
1704 {"getpeername", (PyCFunction)PySocketSock_getpeername,
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1705 METH_NOARGS, getpeername_doc},
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
1706 #endif
20440
9be2cc6b9959 Fix a bunch of warnings reported by Skip.
Guido van Rossum <guido@python.org>
parents: 20412
diff changeset
1707 {"getsockname", (PyCFunction)PySocketSock_getsockname,
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1708 METH_NOARGS, getsockname_doc},
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1709 {"getsockopt", (PyCFunction)PySocketSock_getsockopt, METH_VARARGS,
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1710 getsockopt_doc},
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1711 {"listen", (PyCFunction)PySocketSock_listen, METH_O,
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1712 listen_doc},
1792
a584b4bbbc59 Changes to make it work and compile on NT, by Mark Hammond.
Guido van Rossum <guido@python.org>
parents: 1760
diff changeset
1713 #ifndef NO_DUP
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1714 {"makefile", (PyCFunction)PySocketSock_makefile, METH_VARARGS,
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1715 makefile_doc},
1792
a584b4bbbc59 Changes to make it work and compile on NT, by Mark Hammond.
Guido van Rossum <guido@python.org>
parents: 1760
diff changeset
1716 #endif
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1717 {"recv", (PyCFunction)PySocketSock_recv, METH_VARARGS,
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1718 recv_doc},
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1719 {"recvfrom", (PyCFunction)PySocketSock_recvfrom, METH_VARARGS,
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1720 recvfrom_doc},
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1721 {"send", (PyCFunction)PySocketSock_send, METH_VARARGS,
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1722 send_doc},
20679
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1723 {"sendall", (PyCFunction)PySocketSock_sendall, METH_VARARGS,
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
1724 sendall_doc},
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1725 {"sendto", (PyCFunction)PySocketSock_sendto, METH_VARARGS,
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1726 sendto_doc},
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1727 {"setblocking", (PyCFunction)PySocketSock_setblocking, METH_O,
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1728 setblocking_doc},
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1729 {"setsockopt", (PyCFunction)PySocketSock_setsockopt, METH_VARARGS,
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1730 setsockopt_doc},
20376
061da22f4203 Convert socket methods to use METH_O and METH_NOARGS where possible.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20369
diff changeset
1731 {"shutdown", (PyCFunction)PySocketSock_shutdown, METH_O,
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1732 shutdown_doc},
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1733 #ifdef RISCOS
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1734 {"sleeptaskw", (PyCFunction)PySocketSock_sleeptaskw, METH_VARARGS,
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1735 sleeptaskw_doc},
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1736 #endif
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1737 {NULL, NULL} /* sentinel */
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1738 };
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1739
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1740
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1741 /* Deallocate a socket object in response to the last Py_DECREF().
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1742 First close the file description. */
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1743
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1744 static void
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
1745 PySocketSock_dealloc(PySocketSockObject *s)
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1746 {
12319
57f34e162e67 In dealloc(), only close the socket if fd != -1.
Guido van Rossum <guido@python.org>
parents: 12229
diff changeset
1747 if (s->sock_fd != -1)
12436
dff7b26116de Use an explicit macro SOCKETCLOSE which expands to closesocket (on
Guido van Rossum <guido@python.org>
parents: 12319
diff changeset
1748 (void) SOCKETCLOSE(s->sock_fd);
20727
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1749 s->ob_type->tp_free((PyObject *)s);
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1750 }
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1751
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1752
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
1753 static PyObject *
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
1754 PySocketSock_repr(PySocketSockObject *s)
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
1755 {
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
1756 char buf[512];
13171
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
1757 #if SIZEOF_SOCKET_T > SIZEOF_LONG
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
1758 if (s->sock_fd > LONG_MAX) {
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
1759 /* this can occur on Win64, and actually there is a special
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
1760 ugly printf formatter for decimal pointer length integer
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
1761 printing, only bother if necessary*/
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
1762 PyErr_SetString(PyExc_OverflowError,
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
1763 "no printf formatter to display the socket descriptor in decimal");
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
1764 return NULL;
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
1765 }
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
1766 #endif
21073
304b34023876 sprintf -> PyOS_snprintf in some "obviously safe" cases.
Tim Peters <tim.peters@gmail.com>
parents: 21060
diff changeset
1767 PyOS_snprintf(buf, sizeof(buf),
304b34023876 sprintf -> PyOS_snprintf in some "obviously safe" cases.
Tim Peters <tim.peters@gmail.com>
parents: 21060
diff changeset
1768 "<socket object, fd=%ld, family=%d, type=%d, protocol=%d>",
304b34023876 sprintf -> PyOS_snprintf in some "obviously safe" cases.
Tim Peters <tim.peters@gmail.com>
parents: 21060
diff changeset
1769 (long)s->sock_fd, s->sock_family,
304b34023876 sprintf -> PyOS_snprintf in some "obviously safe" cases.
Tim Peters <tim.peters@gmail.com>
parents: 21060
diff changeset
1770 s->sock_type,
304b34023876 sprintf -> PyOS_snprintf in some "obviously safe" cases.
Tim Peters <tim.peters@gmail.com>
parents: 21060
diff changeset
1771 s->sock_proto);
3421
90b54312661a remove unused variables
Guido van Rossum <guido@python.org>
parents: 3390
diff changeset
1772 return PyString_FromString(buf);
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
1773 }
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
1774
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
1775
20727
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1776 /* Create a new, uninitialized socket object. */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1777
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1778 static PyObject *
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1779 PySocketSock_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1780 {
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1781 PyObject *new;
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1782
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1783 new = type->tp_alloc(type, 0);
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1784 if (new != NULL)
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1785 ((PySocketSockObject *)new)->sock_fd = -1;
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1786 return new;
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1787 }
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1788
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1789
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1790 /* Initialize a new socket object. */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1791
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1792 /*ARGSUSED*/
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1793 static int
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1794 PySocketSock_init(PyObject *self, PyObject *args, PyObject *kwds)
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1795 {
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1796 PySocketSockObject *s = (PySocketSockObject *)self;
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1797 SOCKET_T fd;
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1798 int family = AF_INET, type = SOCK_STREAM, proto = 0;
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1799 static char *keywords[] = {"family", "type", "proto", 0};
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1800
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1801 if (!PyArg_ParseTupleAndKeywords(args, kwds,
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1802 "|iii:socket", keywords,
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1803 &family, &type, &proto))
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1804 return -1;
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1805 Py_BEGIN_ALLOW_THREADS
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1806 fd = socket(family, type, proto);
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1807 Py_END_ALLOW_THREADS
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1808 #ifdef MS_WINDOWS
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1809 if (fd == INVALID_SOCKET)
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1810 #else
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1811 if (fd < 0)
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1812 #endif
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1813 {
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1814 PySocket_Err();
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1815 return -1;
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1816 }
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1817 init_sockobject(s, fd, family, type, proto);
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1818 /* From now on, ignore SIGPIPE and let the error checking
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1819 do the work. */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1820 #ifdef SIGPIPE
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1821 (void) signal(SIGPIPE, SIG_IGN);
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1822 #endif
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1823 return 0;
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1824 }
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1825
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1826
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1827 /* Type object for socket objects. */
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1828
20727
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1829 static char socket_doc[] =
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1830 "socket([family[, type[, proto]]]) -> socket object\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1831 \n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1832 Open a socket of the given type. The family argument specifies the\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1833 address family; it defaults to AF_INET. The type argument specifies\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1834 whether this is a stream (SOCK_STREAM, this is the default)\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1835 or datagram (SOCK_DGRAM) socket. The protocol argument defaults to 0,\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1836 specifying the default protocol.\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1837 \n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1838 A socket represents one endpoint of a network connection.\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1839 \n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1840 Methods:\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1841 \n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1842 accept() -- accept a connection, returning new socket and client address\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1843 bind() -- bind the socket to a local address\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1844 close() -- close the socket\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1845 connect() -- connect the socket to a remote address\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1846 connect_ex() -- connect, return an error code instead of an exception \n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1847 dup() -- return a new socket object identical to the current one (*)\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1848 fileno() -- return underlying file descriptor\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1849 getpeername() -- return remote address (*)\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1850 getsockname() -- return local address\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1851 getsockopt() -- get socket options\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1852 listen() -- start listening for incoming connections\n\
21060
597d10cf7938 Fix docstring typo
Andrew M. Kuchling <amk@amk.ca>
parents: 21022
diff changeset
1853 makefile() -- return a file object corresponding to the socket (*)\n\
20727
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1854 recv() -- receive data\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1855 recvfrom() -- receive data and sender's address\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1856 send() -- send data, may not send all of it\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1857 sendall() -- send all data\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1858 sendto() -- send data to a given address\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1859 setblocking() -- set or clear the blocking I/O flag\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1860 setsockopt() -- set socket options\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1861 shutdown() -- shut down traffic in one or both directions\n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1862 \n\
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1863 (*) not available on all platforms!)";
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1864
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1865 static PyTypeObject PySocketSock_Type = {
3594
564912267290 Windows/PC changes
Guido van Rossum <guido@python.org>
parents: 3421
diff changeset
1866 PyObject_HEAD_INIT(0) /* Must fill in type value later */
20727
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1867 0, /* ob_size */
20730
73cabe664c11 Oops. In the tp_name field, the name should be "_socket.socket", not
Guido van Rossum <guido@python.org>
parents: 20727
diff changeset
1868 "_socket.socket", /* tp_name */
20727
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1869 sizeof(PySocketSockObject), /* tp_basicsize */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1870 0, /* tp_itemsize */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1871 (destructor)PySocketSock_dealloc, /* tp_dealloc */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1872 0, /* tp_print */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1873 0, /* tp_getattr */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1874 0, /* tp_setattr */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1875 0, /* tp_compare */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1876 (reprfunc)PySocketSock_repr, /* tp_repr */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1877 0, /* tp_as_number */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1878 0, /* tp_as_sequence */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1879 0, /* tp_as_mapping */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1880 0, /* tp_hash */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1881 0, /* tp_call */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1882 0, /* tp_str */
20920
90871fa43f4e Fixes to compile cPickle.c & socketmodule.c on cygwin and possibly
Michael W. Hudson <mwh@python.net>
parents: 20912
diff changeset
1883 0, /* set below */ /* tp_getattro */
20727
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1884 0, /* tp_setattro */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1885 0, /* tp_as_buffer */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1886 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1887 socket_doc, /* tp_doc */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1888 0, /* tp_traverse */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1889 0, /* tp_clear */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1890 0, /* tp_richcompare */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1891 0, /* tp_weaklistoffset */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1892 0, /* tp_iter */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1893 0, /* tp_iternext */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1894 PySocketSock_methods, /* tp_methods */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1895 0, /* tp_members */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1896 0, /* tp_getset */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1897 0, /* tp_base */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1898 0, /* tp_dict */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1899 0, /* tp_descr_get */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1900 0, /* tp_descr_set */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1901 0, /* tp_dictoffset */
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1902 PySocketSock_init, /* tp_init */
20920
90871fa43f4e Fixes to compile cPickle.c & socketmodule.c on cygwin and possibly
Michael W. Hudson <mwh@python.net>
parents: 20912
diff changeset
1903 0, /* set below */ /* tp_alloc */
20727
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
1904 PySocketSock_new, /* tp_new */
20920
90871fa43f4e Fixes to compile cPickle.c & socketmodule.c on cygwin and possibly
Michael W. Hudson <mwh@python.net>
parents: 20912
diff changeset
1905 0, /* set below */ /* tp_free */
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1906 };
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1907
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1908
324
a81020d505bf Add gethostname() and s.avail().
Guido van Rossum <guido@python.org>
parents: 309
diff changeset
1909 /* Python interface to gethostname(). */
a81020d505bf Add gethostname() and s.avail().
Guido van Rossum <guido@python.org>
parents: 309
diff changeset
1910
a81020d505bf Add gethostname() and s.avail().
Guido van Rossum <guido@python.org>
parents: 309
diff changeset
1911 /*ARGSUSED*/
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1912 static PyObject *
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
1913 PySocket_gethostname(PyObject *self, PyObject *args)
324
a81020d505bf Add gethostname() and s.avail().
Guido van Rossum <guido@python.org>
parents: 309
diff changeset
1914 {
a81020d505bf Add gethostname() and s.avail().
Guido van Rossum <guido@python.org>
parents: 309
diff changeset
1915 char buf[1024];
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 925
diff changeset
1916 int res;
12050
b90880c0e5eb Fix all routines to use PyArg_ParseTuple(), and add ":name" to the
Guido van Rossum <guido@python.org>
parents: 11937
diff changeset
1917 if (!PyArg_ParseTuple(args, ":gethostname"))
324
a81020d505bf Add gethostname() and s.avail().
Guido van Rossum <guido@python.org>
parents: 309
diff changeset
1918 return NULL;
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1919 Py_BEGIN_ALLOW_THREADS
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 925
diff changeset
1920 res = gethostname(buf, (int) sizeof buf - 1);
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1921 Py_END_ALLOW_THREADS
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 925
diff changeset
1922 if (res < 0)
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1923 return PySocket_Err();
324
a81020d505bf Add gethostname() and s.avail().
Guido van Rossum <guido@python.org>
parents: 309
diff changeset
1924 buf[sizeof buf - 1] = '\0';
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1925 return PyString_FromString(buf);
324
a81020d505bf Add gethostname() and s.avail().
Guido van Rossum <guido@python.org>
parents: 309
diff changeset
1926 }
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 925
diff changeset
1927
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1928 static char gethostname_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1929 "gethostname() -> string\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1930 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1931 Return the current host name.";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1932
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 925
diff changeset
1933
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1934 /* Python interface to gethostbyname(name). */
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1935
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1936 /*ARGSUSED*/
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
1937 static PyObject *
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
1938 PySocket_gethostbyname(PyObject *self, PyObject *args)
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1939 {
1792
a584b4bbbc59 Changes to make it work and compile on NT, by Mark Hammond.
Guido van Rossum <guido@python.org>
parents: 1760
diff changeset
1940 char *name;
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1941 struct sockaddr_storage addrbuf;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1942
12050
b90880c0e5eb Fix all routines to use PyArg_ParseTuple(), and add ":name" to the
Guido van Rossum <guido@python.org>
parents: 11937
diff changeset
1943 if (!PyArg_ParseTuple(args, "s:gethostbyname", &name))
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1944 return NULL;
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1945 if (setipaddr(name, (struct sockaddr *)&addrbuf, AF_INET) < 0)
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1946 return NULL;
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1947 return makeipaddr((struct sockaddr *)&addrbuf,
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1948 sizeof(struct sockaddr_in));
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1949 }
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
1950
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1951 static char gethostbyname_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1952 "gethostbyname(host) -> address\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1953 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1954 Return the IP address (a string of the form '255.255.255.255') for a host.";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1955
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
1956
8821
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
1957 /* Convenience function common to gethostbyname_ex and gethostbyaddr */
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
1958
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
1959 static PyObject *
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1960 gethost_common(struct hostent *h, struct sockaddr *addr, int alen, int af)
8821
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
1961 {
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
1962 char **pch;
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
1963 PyObject *rtn_tuple = (PyObject *)NULL;
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
1964 PyObject *name_list = (PyObject *)NULL;
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
1965 PyObject *addr_list = (PyObject *)NULL;
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
1966 PyObject *tmp;
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1967
8821
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
1968 if (h == NULL) {
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
1969 /* Let's get real error message to return */
20654
edd9d0b3c47e SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents: 20648
diff changeset
1970 #ifndef RISCOS
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1971 PyH_Err(h_errno);
20654
edd9d0b3c47e SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents: 20648
diff changeset
1972 #else
edd9d0b3c47e SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents: 20648
diff changeset
1973 PyErr_SetString(PySocket_Error, "host not found");
edd9d0b3c47e SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents: 20648
diff changeset
1974 #endif
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1975 return NULL;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1976 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1977 if (h->h_addrtype != af) {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1978 #ifdef HAVE_STRERROR
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1979 /* Let's get real error message to return */
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1980 PyErr_SetString(PySocket_Error, (char *)strerror(EAFNOSUPPORT));
8821
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
1981 #else
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1982 PyErr_SetString(PySocket_Error,
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1983 "Address family not supported by protocol family");
8821
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
1984 #endif
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
1985 return NULL;
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
1986 }
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1987 switch (af) {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1988 case AF_INET:
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1989 if (alen < sizeof(struct sockaddr_in))
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1990 return NULL;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1991 break;
21128
15ff504632ed Remove INET6 define. Use ENABLE_IPV6 instead.
Martin v. Löwis <martin@v.loewis.de>
parents: 21094
diff changeset
1992 #ifdef ENABLE_IPV6
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1993 case AF_INET6:
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1994 if (alen < sizeof(struct sockaddr_in6))
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1995 return NULL;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1996 break;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1997 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
1998 }
8821
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
1999 if ((name_list = PyList_New(0)) == NULL)
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2000 goto err;
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2001 if ((addr_list = PyList_New(0)) == NULL)
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2002 goto err;
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2003 for (pch = h->h_aliases; *pch != NULL; pch++) {
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2004 int status;
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2005 tmp = PyString_FromString(*pch);
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2006 if (tmp == NULL)
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2007 goto err;
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2008 status = PyList_Append(name_list, tmp);
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2009 Py_DECREF(tmp);
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2010 if (status)
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2011 goto err;
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2012 }
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2013 for (pch = h->h_addr_list; *pch != NULL; pch++) {
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2014 int status;
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2015 switch (af) {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2016 case AF_INET:
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2017 {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2018 struct sockaddr_in sin;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2019 memset(&sin, 0, sizeof(sin));
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2020 sin.sin_family = af;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2021 #ifdef HAVE_SOCKADDR_SA_LEN
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2022 sin.sin_len = sizeof(sin);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2023 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2024 memcpy(&sin.sin_addr, *pch, sizeof(sin.sin_addr));
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2025 tmp = makeipaddr((struct sockaddr *)&sin, sizeof(sin));
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2026 if (pch == h->h_addr_list && alen >= sizeof(sin))
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2027 memcpy((char *) addr, &sin, sizeof(sin));
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2028 break;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2029 }
21128
15ff504632ed Remove INET6 define. Use ENABLE_IPV6 instead.
Martin v. Löwis <martin@v.loewis.de>
parents: 21094
diff changeset
2030 #ifdef ENABLE_IPV6
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2031 case AF_INET6:
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2032 {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2033 struct sockaddr_in6 sin6;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2034 memset(&sin6, 0, sizeof(sin6));
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2035 sin6.sin6_family = af;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2036 #ifdef HAVE_SOCKADDR_SA_LEN
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2037 sin6.sin6_len = sizeof(sin6);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2038 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2039 memcpy(&sin6.sin6_addr, *pch, sizeof(sin6.sin6_addr));
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2040 tmp = makeipaddr((struct sockaddr *)&sin6,
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2041 sizeof(sin6));
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2042 if (pch == h->h_addr_list && alen >= sizeof(sin6))
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2043 memcpy((char *) addr, &sin6, sizeof(sin6));
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2044 break;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2045 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2046 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2047 default: /* can't happen */
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2048 PyErr_SetString(PySocket_Error,
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2049 "unsupported address family");
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2050 return NULL;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2051 }
8821
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2052 if (tmp == NULL)
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2053 goto err;
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2054 status = PyList_Append(addr_list, tmp);
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2055 Py_DECREF(tmp);
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2056 if (status)
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2057 goto err;
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2058 }
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2059 rtn_tuple = Py_BuildValue("sOO", h->h_name, name_list, addr_list);
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2060 err:
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2061 Py_XDECREF(name_list);
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2062 Py_XDECREF(addr_list);
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2063 return rtn_tuple;
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2064 }
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2065
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2066
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2067 /* Python interface to gethostbyname_ex(name). */
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2068
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2069 /*ARGSUSED*/
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2070 static PyObject *
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
2071 PySocket_gethostbyname_ex(PyObject *self, PyObject *args)
8821
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2072 {
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2073 char *name;
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2074 struct hostent *h;
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2075 struct sockaddr_storage addr;
18798
d591a96aed06 Instead of accessing ss_family, cast sockaddr_storage to sockaddr and access sa_family.
Martin v. Löwis <martin@v.loewis.de>
parents: 18794
diff changeset
2076 struct sockaddr *sa;
10441
9ba5dffccb1b Jonathan Giddy writes:
Guido van Rossum <guido@python.org>
parents: 10401
diff changeset
2077 PyObject *ret;
8821
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2078 #ifdef HAVE_GETHOSTBYNAME_R
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2079 struct hostent hp_allocated;
10453
5b54fa775e55 Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents: 10442
diff changeset
2080 #ifdef HAVE_GETHOSTBYNAME_R_3_ARG
5b54fa775e55 Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents: 10442
diff changeset
2081 struct hostent_data data;
5b54fa775e55 Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents: 10442
diff changeset
2082 #else
8821
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2083 char buf[16384];
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2084 int buf_len = (sizeof buf) - 1;
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2085 int errnop;
10453
5b54fa775e55 Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents: 10442
diff changeset
2086 #endif
5b54fa775e55 Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents: 10442
diff changeset
2087 #if defined(HAVE_GETHOSTBYNAME_R_3_ARG) || defined(HAVE_GETHOSTBYNAME_R_6_ARG)
10401
f81db738abd9 Patch by Rob Riggs for Linux -- glibc2 has a different argument
Guido van Rossum <guido@python.org>
parents: 9679
diff changeset
2088 int result;
f81db738abd9 Patch by Rob Riggs for Linux -- glibc2 has a different argument
Guido van Rossum <guido@python.org>
parents: 9679
diff changeset
2089 #endif
8821
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2090 #endif /* HAVE_GETHOSTBYNAME_R */
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2091
12050
b90880c0e5eb Fix all routines to use PyArg_ParseTuple(), and add ":name" to the
Guido van Rossum <guido@python.org>
parents: 11937
diff changeset
2092 if (!PyArg_ParseTuple(args, "s:gethostbyname_ex", &name))
8821
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2093 return NULL;
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2094 if (setipaddr(name, (struct sockaddr *)&addr, PF_INET) < 0)
8821
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2095 return NULL;
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2096 Py_BEGIN_ALLOW_THREADS
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2097 #ifdef HAVE_GETHOSTBYNAME_R
10453
5b54fa775e55 Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents: 10442
diff changeset
2098 #if defined(HAVE_GETHOSTBYNAME_R_6_ARG)
10401
f81db738abd9 Patch by Rob Riggs for Linux -- glibc2 has a different argument
Guido van Rossum <guido@python.org>
parents: 9679
diff changeset
2099 result = gethostbyname_r(name, &hp_allocated, buf, buf_len, &h, &errnop);
10453
5b54fa775e55 Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents: 10442
diff changeset
2100 #elif defined(HAVE_GETHOSTBYNAME_R_5_ARG)
8821
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2101 h = gethostbyname_r(name, &hp_allocated, buf, buf_len, &errnop);
10453
5b54fa775e55 Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents: 10442
diff changeset
2102 #else /* HAVE_GETHOSTBYNAME_R_3_ARG */
10454
dad14ffe1c22 Implement two suggestions by Jonathan Giddy: (1) in AIX, clear the
Guido van Rossum <guido@python.org>
parents: 10453
diff changeset
2103 memset((void *) &data, '\0', sizeof(data));
10453
5b54fa775e55 Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents: 10442
diff changeset
2104 result = gethostbyname_r(name, &hp_allocated, &data);
5b54fa775e55 Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents: 10442
diff changeset
2105 h = (result != 0) ? NULL : &hp_allocated;
10401
f81db738abd9 Patch by Rob Riggs for Linux -- glibc2 has a different argument
Guido van Rossum <guido@python.org>
parents: 9679
diff changeset
2106 #endif
8821
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2107 #else /* not HAVE_GETHOSTBYNAME_R */
10442
9184c9e108f9 Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents: 10441
diff changeset
2108 #ifdef USE_GETHOSTBYNAME_LOCK
9184c9e108f9 Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents: 10441
diff changeset
2109 PyThread_acquire_lock(gethostbyname_lock, 1);
8821
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2110 #endif
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2111 h = gethostbyname(name);
10441
9ba5dffccb1b Jonathan Giddy writes:
Guido van Rossum <guido@python.org>
parents: 10401
diff changeset
2112 #endif /* HAVE_GETHOSTBYNAME_R */
9ba5dffccb1b Jonathan Giddy writes:
Guido van Rossum <guido@python.org>
parents: 10401
diff changeset
2113 Py_END_ALLOW_THREADS
18798
d591a96aed06 Instead of accessing ss_family, cast sockaddr_storage to sockaddr and access sa_family.
Martin v. Löwis <martin@v.loewis.de>
parents: 18794
diff changeset
2114 /* Some C libraries would require addr.__ss_family instead of addr.ss_family.
d591a96aed06 Instead of accessing ss_family, cast sockaddr_storage to sockaddr and access sa_family.
Martin v. Löwis <martin@v.loewis.de>
parents: 18794
diff changeset
2115 Therefore, we cast the sockaddr_storage into sockaddr to access sa_family. */
d591a96aed06 Instead of accessing ss_family, cast sockaddr_storage to sockaddr and access sa_family.
Martin v. Löwis <martin@v.loewis.de>
parents: 18794
diff changeset
2116 sa = (struct sockaddr*)&addr;
d591a96aed06 Instead of accessing ss_family, cast sockaddr_storage to sockaddr and access sa_family.
Martin v. Löwis <martin@v.loewis.de>
parents: 18794
diff changeset
2117 ret = gethost_common(h, (struct sockaddr *)&addr, sizeof(addr), sa->sa_family);
10442
9184c9e108f9 Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents: 10441
diff changeset
2118 #ifdef USE_GETHOSTBYNAME_LOCK
9679
877d23bd5bdc Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents: 9588
diff changeset
2119 PyThread_release_lock(gethostbyname_lock);
8821
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2120 #endif
10441
9ba5dffccb1b Jonathan Giddy writes:
Guido van Rossum <guido@python.org>
parents: 10401
diff changeset
2121 return ret;
8821
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2122 }
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2123
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2124 static char ghbn_ex_doc[] =
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2125 "gethostbyname_ex(host) -> (name, aliaslist, addresslist)\n\
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2126 \n\
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2127 Return the true host name, a list of aliases, and a list of IP addresses,\n\
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2128 for a host. The host argument is a string giving a host name or IP number.";
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2129
a1c16a3fa7db Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents: 8631
diff changeset
2130
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
2131 /* Python interface to gethostbyaddr(IP). */
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
2132
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
2133 /*ARGSUSED*/
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
2134 static PyObject *
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
2135 PySocket_gethostbyaddr(PyObject *self, PyObject *args)
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
2136 {
21128
15ff504632ed Remove INET6 define. Use ENABLE_IPV6 instead.
Martin v. Löwis <martin@v.loewis.de>
parents: 21094
diff changeset
2137 #ifdef ENABLE_IPV6
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2138 struct sockaddr_storage addr;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2139 #else
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
2140 struct sockaddr_in addr;
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2141 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2142 struct sockaddr *sa = (struct sockaddr *)&addr;
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
2143 char *ip_num;
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
2144 struct hostent *h;
10442
9184c9e108f9 Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents: 10441
diff changeset
2145 PyObject *ret;
7942
ee2aaa2f722a Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents: 6718
diff changeset
2146 #ifdef HAVE_GETHOSTBYNAME_R
ee2aaa2f722a Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents: 6718
diff changeset
2147 struct hostent hp_allocated;
10453
5b54fa775e55 Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents: 10442
diff changeset
2148 #ifdef HAVE_GETHOSTBYNAME_R_3_ARG
5b54fa775e55 Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents: 10442
diff changeset
2149 struct hostent_data data;
5b54fa775e55 Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents: 10442
diff changeset
2150 #else
7942
ee2aaa2f722a Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents: 6718
diff changeset
2151 char buf[16384];
ee2aaa2f722a Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents: 6718
diff changeset
2152 int buf_len = (sizeof buf) - 1;
ee2aaa2f722a Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents: 6718
diff changeset
2153 int errnop;
10453
5b54fa775e55 Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents: 10442
diff changeset
2154 #endif
5b54fa775e55 Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents: 10442
diff changeset
2155 #if defined(HAVE_GETHOSTBYNAME_R_3_ARG) || defined(HAVE_GETHOSTBYNAME_R_6_ARG)
10401
f81db738abd9 Patch by Rob Riggs for Linux -- glibc2 has a different argument
Guido van Rossum <guido@python.org>
parents: 9679
diff changeset
2156 int result;
f81db738abd9 Patch by Rob Riggs for Linux -- glibc2 has a different argument
Guido van Rossum <guido@python.org>
parents: 9679
diff changeset
2157 #endif
7942
ee2aaa2f722a Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents: 6718
diff changeset
2158 #endif /* HAVE_GETHOSTBYNAME_R */
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2159 char *ap;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2160 int al;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2161 int af;
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
2162
12050
b90880c0e5eb Fix all routines to use PyArg_ParseTuple(), and add ":name" to the
Guido van Rossum <guido@python.org>
parents: 11937
diff changeset
2163 if (!PyArg_ParseTuple(args, "s:gethostbyaddr", &ip_num))
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
2164 return NULL;
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2165 af = PF_UNSPEC;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2166 if (setipaddr(ip_num, sa, af) < 0)
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
2167 return NULL;
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2168 af = sa->sa_family;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2169 ap = NULL;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2170 al = 0;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2171 switch (af) {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2172 case AF_INET:
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2173 ap = (char *)&((struct sockaddr_in *)sa)->sin_addr;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2174 al = sizeof(((struct sockaddr_in *)sa)->sin_addr);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2175 break;
21128
15ff504632ed Remove INET6 define. Use ENABLE_IPV6 instead.
Martin v. Löwis <martin@v.loewis.de>
parents: 21094
diff changeset
2176 #ifdef ENABLE_IPV6
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2177 case AF_INET6:
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2178 ap = (char *)&((struct sockaddr_in6 *)sa)->sin6_addr;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2179 al = sizeof(((struct sockaddr_in6 *)sa)->sin6_addr);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2180 break;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2181 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2182 default:
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2183 PyErr_SetString(PySocket_Error, "unsupported address family");
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2184 return NULL;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2185 }
7942
ee2aaa2f722a Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents: 6718
diff changeset
2186 Py_BEGIN_ALLOW_THREADS
ee2aaa2f722a Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents: 6718
diff changeset
2187 #ifdef HAVE_GETHOSTBYNAME_R
10453
5b54fa775e55 Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents: 10442
diff changeset
2188 #if defined(HAVE_GETHOSTBYNAME_R_6_ARG)
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2189 result = gethostbyaddr_r(ap, al, af,
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2190 &hp_allocated, buf, buf_len,
10401
f81db738abd9 Patch by Rob Riggs for Linux -- glibc2 has a different argument
Guido van Rossum <guido@python.org>
parents: 9679
diff changeset
2191 &h, &errnop);
10453
5b54fa775e55 Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents: 10442
diff changeset
2192 #elif defined(HAVE_GETHOSTBYNAME_R_5_ARG)
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2193 h = gethostbyaddr_r(ap, al, af,
7942
ee2aaa2f722a Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents: 6718
diff changeset
2194 &hp_allocated, buf, buf_len, &errnop);
10453
5b54fa775e55 Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents: 10442
diff changeset
2195 #else /* HAVE_GETHOSTBYNAME_R_3_ARG */
10454
dad14ffe1c22 Implement two suggestions by Jonathan Giddy: (1) in AIX, clear the
Guido van Rossum <guido@python.org>
parents: 10453
diff changeset
2196 memset((void *) &data, '\0', sizeof(data));
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2197 result = gethostbyaddr_r(ap, al, af, &hp_allocated, &data);
10453
5b54fa775e55 Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents: 10442
diff changeset
2198 h = (result != 0) ? NULL : &hp_allocated;
10401
f81db738abd9 Patch by Rob Riggs for Linux -- glibc2 has a different argument
Guido van Rossum <guido@python.org>
parents: 9679
diff changeset
2199 #endif
7942
ee2aaa2f722a Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents: 6718
diff changeset
2200 #else /* not HAVE_GETHOSTBYNAME_R */
10442
9184c9e108f9 Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents: 10441
diff changeset
2201 #ifdef USE_GETHOSTBYNAME_LOCK
9184c9e108f9 Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents: 10441
diff changeset
2202 PyThread_acquire_lock(gethostbyname_lock, 1);
7942
ee2aaa2f722a Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents: 6718
diff changeset
2203 #endif
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2204 h = gethostbyaddr(ap, al, af);
10442
9184c9e108f9 Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents: 10441
diff changeset
2205 #endif /* HAVE_GETHOSTBYNAME_R */
9184c9e108f9 Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents: 10441
diff changeset
2206 Py_END_ALLOW_THREADS
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2207 ret = gethost_common(h, (struct sockaddr *)&addr, sizeof(addr), af);
10442
9184c9e108f9 Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents: 10441
diff changeset
2208 #ifdef USE_GETHOSTBYNAME_LOCK
9679
877d23bd5bdc Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents: 9588
diff changeset
2209 PyThread_release_lock(gethostbyname_lock);
7942
ee2aaa2f722a Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents: 6718
diff changeset
2210 #endif
10442
9184c9e108f9 Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents: 10441
diff changeset
2211 return ret;
2055
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
2212 }
cf31eab6ab5a Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents: 1970
diff changeset
2213
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2214 static char gethostbyaddr_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2215 "gethostbyaddr(host) -> (name, aliaslist, addresslist)\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2216 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2217 Return the true host name, a list of aliases, and a list of IP addresses,\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2218 for a host. The host argument is a string giving a host name or IP number.";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2219
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
2220
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
2221 /* Python interface to getservbyname(name).
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
2222 This only returns the port number, since the other info is already
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
2223 known or not useful (like the list of aliases). */
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
2224
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
2225 /*ARGSUSED*/
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
2226 static PyObject *
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
2227 PySocket_getservbyname(PyObject *self, PyObject *args)
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
2228 {
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 925
diff changeset
2229 char *name, *proto;
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
2230 struct servent *sp;
12050
b90880c0e5eb Fix all routines to use PyArg_ParseTuple(), and add ":name" to the
Guido van Rossum <guido@python.org>
parents: 11937
diff changeset
2231 if (!PyArg_ParseTuple(args, "ss:getservbyname", &name, &proto))
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
2232 return NULL;
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
2233 Py_BEGIN_ALLOW_THREADS
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 925
diff changeset
2234 sp = getservbyname(name, proto);
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
2235 Py_END_ALLOW_THREADS
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
2236 if (sp == NULL) {
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
2237 PyErr_SetString(PySocket_Error, "service/proto not found");
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
2238 return NULL;
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
2239 }
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
2240 return PyInt_FromLong((long) ntohs(sp->s_port));
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
2241 }
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
2242
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2243 static char getservbyname_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2244 "getservbyname(servicename, protocolname) -> integer\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2245 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2246 Return a port number from a service name and protocol name.\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2247 The protocol name should be 'tcp' or 'udp'.";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2248
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
2249
4782
2426a220664b Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents: 4651
diff changeset
2250 /* Python interface to getprotobyname(name).
2426a220664b Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents: 4651
diff changeset
2251 This only returns the protocol number, since the other info is
2426a220664b Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents: 4651
diff changeset
2252 already known or not useful (like the list of aliases). */
2426a220664b Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents: 4651
diff changeset
2253
2426a220664b Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents: 4651
diff changeset
2254 /*ARGSUSED*/
2426a220664b Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents: 4651
diff changeset
2255 static PyObject *
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
2256 PySocket_getprotobyname(PyObject *self, PyObject *args)
4782
2426a220664b Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents: 4651
diff changeset
2257 {
2426a220664b Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents: 4651
diff changeset
2258 char *name;
2426a220664b Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents: 4651
diff changeset
2259 struct protoent *sp;
8823
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
2260 #ifdef __BEOS__
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
2261 /* Not available in BeOS yet. - [cjh] */
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
2262 PyErr_SetString( PySocket_Error, "getprotobyname not supported" );
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
2263 return NULL;
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
2264 #else
12050
b90880c0e5eb Fix all routines to use PyArg_ParseTuple(), and add ":name" to the
Guido van Rossum <guido@python.org>
parents: 11937
diff changeset
2265 if (!PyArg_ParseTuple(args, "s:getprotobyname", &name))
4782
2426a220664b Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents: 4651
diff changeset
2266 return NULL;
2426a220664b Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents: 4651
diff changeset
2267 Py_BEGIN_ALLOW_THREADS
2426a220664b Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents: 4651
diff changeset
2268 sp = getprotobyname(name);
2426a220664b Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents: 4651
diff changeset
2269 Py_END_ALLOW_THREADS
2426a220664b Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents: 4651
diff changeset
2270 if (sp == NULL) {
2426a220664b Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents: 4651
diff changeset
2271 PyErr_SetString(PySocket_Error, "protocol not found");
2426a220664b Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents: 4651
diff changeset
2272 return NULL;
2426a220664b Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents: 4651
diff changeset
2273 }
2426a220664b Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents: 4651
diff changeset
2274 return PyInt_FromLong((long) sp->p_proto);
8823
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
2275 #endif
4782
2426a220664b Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents: 4651
diff changeset
2276 }
2426a220664b Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents: 4651
diff changeset
2277
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2278 static char getprotobyname_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2279 "getprotobyname(name) -> integer\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2280 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2281 Return the protocol number for the named protocol. (Rarely used.)";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2282
4782
2426a220664b Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents: 4651
diff changeset
2283
1792
a584b4bbbc59 Changes to make it work and compile on NT, by Mark Hammond.
Guido van Rossum <guido@python.org>
parents: 1760
diff changeset
2284 #ifndef NO_DUP
1099
3dd7b8255619 socketmodule.c: added socket.fromfd(fd, family, type, [proto]);
Guido van Rossum <guido@python.org>
parents: 1094
diff changeset
2285 /* Create a socket object from a numeric file description.
3dd7b8255619 socketmodule.c: added socket.fromfd(fd, family, type, [proto]);
Guido van Rossum <guido@python.org>
parents: 1094
diff changeset
2286 Useful e.g. if stdin is a socket.
3dd7b8255619 socketmodule.c: added socket.fromfd(fd, family, type, [proto]);
Guido van Rossum <guido@python.org>
parents: 1094
diff changeset
2287 Additional arguments as for socket(). */
3dd7b8255619 socketmodule.c: added socket.fromfd(fd, family, type, [proto]);
Guido van Rossum <guido@python.org>
parents: 1094
diff changeset
2288
3dd7b8255619 socketmodule.c: added socket.fromfd(fd, family, type, [proto]);
Guido van Rossum <guido@python.org>
parents: 1094
diff changeset
2289 /*ARGSUSED*/
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
2290 static PyObject *
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
2291 PySocket_fromfd(PyObject *self, PyObject *args)
1099
3dd7b8255619 socketmodule.c: added socket.fromfd(fd, family, type, [proto]);
Guido van Rossum <guido@python.org>
parents: 1094
diff changeset
2292 {
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
2293 PySocketSockObject *s;
13171
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
2294 SOCKET_T fd;
c17fd2ca6659 Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents: 12712
diff changeset
2295 int family, type, proto = 0;
12050
b90880c0e5eb Fix all routines to use PyArg_ParseTuple(), and add ":name" to the
Guido van Rossum <guido@python.org>
parents: 11937
diff changeset
2296 if (!PyArg_ParseTuple(args, "iii|i:fromfd",
b90880c0e5eb Fix all routines to use PyArg_ParseTuple(), and add ":name" to the
Guido van Rossum <guido@python.org>
parents: 11937
diff changeset
2297 &fd, &family, &type, &proto))
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
2298 return NULL;
1132
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents: 1099
diff changeset
2299 /* Dup the fd so it and the socket can be closed independently */
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents: 1099
diff changeset
2300 fd = dup(fd);
6461dac9a9f2 * mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents: 1099
diff changeset
2301 if (fd < 0)
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
2302 return PySocket_Err();
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
2303 s = PySocketSock_New(fd, family, type, proto);
1099
3dd7b8255619 socketmodule.c: added socket.fromfd(fd, family, type, [proto]);
Guido van Rossum <guido@python.org>
parents: 1094
diff changeset
2304 /* From now on, ignore SIGPIPE and let the error checking
3dd7b8255619 socketmodule.c: added socket.fromfd(fd, family, type, [proto]);
Guido van Rossum <guido@python.org>
parents: 1094
diff changeset
2305 do the work. */
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
2306 #ifdef SIGPIPE
1099
3dd7b8255619 socketmodule.c: added socket.fromfd(fd, family, type, [proto]);
Guido van Rossum <guido@python.org>
parents: 1094
diff changeset
2307 (void) signal(SIGPIPE, SIG_IGN);
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
2308 #endif
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
2309 return (PyObject *) s;
1099
3dd7b8255619 socketmodule.c: added socket.fromfd(fd, family, type, [proto]);
Guido van Rossum <guido@python.org>
parents: 1094
diff changeset
2310 }
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2311
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2312 static char fromfd_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2313 "fromfd(fd, family, type[, proto]) -> socket object\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2314 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2315 Create a socket object from the given file descriptor.\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2316 The remaining arguments are the same as for socket().";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2317
1792
a584b4bbbc59 Changes to make it work and compile on NT, by Mark Hammond.
Guido van Rossum <guido@python.org>
parents: 1760
diff changeset
2318 #endif /* NO_DUP */
1099
3dd7b8255619 socketmodule.c: added socket.fromfd(fd, family, type, [proto]);
Guido van Rossum <guido@python.org>
parents: 1094
diff changeset
2319
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2320
3673
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2321 static PyObject *
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
2322 PySocket_ntohs(PyObject *self, PyObject *args)
3673
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2323 {
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2324 int x1, x2;
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2325
12050
b90880c0e5eb Fix all routines to use PyArg_ParseTuple(), and add ":name" to the
Guido van Rossum <guido@python.org>
parents: 11937
diff changeset
2326 if (!PyArg_ParseTuple(args, "i:ntohs", &x1)) {
3673
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2327 return NULL;
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2328 }
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2329 x2 = (int)ntohs((short)x1);
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2330 return PyInt_FromLong(x2);
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2331 }
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2332
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2333 static char ntohs_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2334 "ntohs(integer) -> integer\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2335 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2336 Convert a 16-bit integer from network to host byte order.";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2337
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2338
3673
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2339 static PyObject *
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
2340 PySocket_ntohl(PyObject *self, PyObject *args)
3673
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2341 {
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2342 int x1, x2;
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2343
12050
b90880c0e5eb Fix all routines to use PyArg_ParseTuple(), and add ":name" to the
Guido van Rossum <guido@python.org>
parents: 11937
diff changeset
2344 if (!PyArg_ParseTuple(args, "i:ntohl", &x1)) {
3673
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2345 return NULL;
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2346 }
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2347 x2 = ntohl(x1);
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2348 return PyInt_FromLong(x2);
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2349 }
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2350
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2351 static char ntohl_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2352 "ntohl(integer) -> integer\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2353 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2354 Convert a 32-bit integer from network to host byte order.";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2355
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2356
3673
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2357 static PyObject *
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
2358 PySocket_htons(PyObject *self, PyObject *args)
3673
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2359 {
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2360 int x1, x2;
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2361
12050
b90880c0e5eb Fix all routines to use PyArg_ParseTuple(), and add ":name" to the
Guido van Rossum <guido@python.org>
parents: 11937
diff changeset
2362 if (!PyArg_ParseTuple(args, "i:htons", &x1)) {
3673
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2363 return NULL;
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2364 }
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2365 x2 = (int)htons((short)x1);
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2366 return PyInt_FromLong(x2);
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2367 }
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2368
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2369 static char htons_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2370 "htons(integer) -> integer\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2371 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2372 Convert a 16-bit integer from host to network byte order.";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2373
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2374
3673
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2375 static PyObject *
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
2376 PySocket_htonl(PyObject *self, PyObject *args)
3673
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2377 {
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2378 int x1, x2;
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2379
12050
b90880c0e5eb Fix all routines to use PyArg_ParseTuple(), and add ":name" to the
Guido van Rossum <guido@python.org>
parents: 11937
diff changeset
2380 if (!PyArg_ParseTuple(args, "i:htonl", &x1)) {
3673
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2381 return NULL;
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2382 }
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2383 x2 = htonl(x1);
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2384 return PyInt_FromLong(x2);
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2385 }
f6ace61c3dfe ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents: 3672
diff changeset
2386
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2387 static char htonl_doc[] =
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2388 "htonl(integer) -> integer\n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2389 \n\
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2390 Convert a 32-bit integer from host to network byte order.";
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2391
11217
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2392 /*
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2393 * socket.inet_aton() and socket.inet_ntoa() functions
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2394 *
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2395 * written 20 Aug 1999 by Ben Gertzfield <che@debian.org> <- blame him!
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2396 *
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2397 */
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2398
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
2399 static char inet_aton_doc[] =
11217
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2400 "inet_aton(string) -> packed 32-bit IP representation\n\
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2401 \n\
11219
2d7331f4dfe3 Port inet_ntoa and inet_aton to Windows:
Guido van Rossum <guido@python.org>
parents: 11217
diff changeset
2402 Convert an IP address in string format (123.45.67.89) to the 32-bit packed\n\
11217
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2403 binary format used in low-level network functions.";
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2404
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2405 static PyObject*
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
2406 PySocket_inet_aton(PyObject *self, PyObject *args)
11217
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2407 {
11268
3fe8d13328c8 It appears that inet_aton() doesn't really exist except in libresolv;
Guido van Rossum <guido@python.org>
parents: 11219
diff changeset
2408 #ifndef INADDR_NONE
3fe8d13328c8 It appears that inet_aton() doesn't really exist except in libresolv;
Guido van Rossum <guido@python.org>
parents: 11219
diff changeset
2409 #define INADDR_NONE (-1)
3fe8d13328c8 It appears that inet_aton() doesn't really exist except in libresolv;
Guido van Rossum <guido@python.org>
parents: 11219
diff changeset
2410 #endif
11217
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2411
11219
2d7331f4dfe3 Port inet_ntoa and inet_aton to Windows:
Guido van Rossum <guido@python.org>
parents: 11217
diff changeset
2412 /* Have to use inet_addr() instead */
2d7331f4dfe3 Port inet_ntoa and inet_aton to Windows:
Guido van Rossum <guido@python.org>
parents: 11217
diff changeset
2413 char *ip_addr;
18753
01692bf02f97 Clean up some warnings from the SGI compiler.
Fred Drake <fdrake@acm.org>
parents: 18743
diff changeset
2414 unsigned long packed_addr;
11219
2d7331f4dfe3 Port inet_ntoa and inet_aton to Windows:
Guido van Rossum <guido@python.org>
parents: 11217
diff changeset
2415
12050
b90880c0e5eb Fix all routines to use PyArg_ParseTuple(), and add ":name" to the
Guido van Rossum <guido@python.org>
parents: 11937
diff changeset
2416 if (!PyArg_ParseTuple(args, "s:inet_aton", &ip_addr)) {
11219
2d7331f4dfe3 Port inet_ntoa and inet_aton to Windows:
Guido van Rossum <guido@python.org>
parents: 11217
diff changeset
2417 return NULL;
2d7331f4dfe3 Port inet_ntoa and inet_aton to Windows:
Guido van Rossum <guido@python.org>
parents: 11217
diff changeset
2418 }
12479
a3e1fecb43c6 Jack Jansen: The GUSI 2.0 I/O library used on the Mac uses the
Guido van Rossum <guido@python.org>
parents: 12436
diff changeset
2419 #ifdef USE_GUSI1
18753
01692bf02f97 Clean up some warnings from the SGI compiler.
Fred Drake <fdrake@acm.org>
parents: 18743
diff changeset
2420 packed_addr = inet_addr(ip_addr).s_addr;
11438
be25aaca11f4 Bugfix by Jack Jansen for Macintosh (for the inet_ntoa/aton changes):
Guido van Rossum <guido@python.org>
parents: 11288
diff changeset
2421 #else
11219
2d7331f4dfe3 Port inet_ntoa and inet_aton to Windows:
Guido van Rossum <guido@python.org>
parents: 11217
diff changeset
2422 packed_addr = inet_addr(ip_addr);
11438
be25aaca11f4 Bugfix by Jack Jansen for Macintosh (for the inet_ntoa/aton changes):
Guido van Rossum <guido@python.org>
parents: 11288
diff changeset
2423 #endif
11219
2d7331f4dfe3 Port inet_ntoa and inet_aton to Windows:
Guido van Rossum <guido@python.org>
parents: 11217
diff changeset
2424
2d7331f4dfe3 Port inet_ntoa and inet_aton to Windows:
Guido van Rossum <guido@python.org>
parents: 11217
diff changeset
2425 if (packed_addr == INADDR_NONE) { /* invalid address */
2d7331f4dfe3 Port inet_ntoa and inet_aton to Windows:
Guido van Rossum <guido@python.org>
parents: 11217
diff changeset
2426 PyErr_SetString(PySocket_Error,
2d7331f4dfe3 Port inet_ntoa and inet_aton to Windows:
Guido van Rossum <guido@python.org>
parents: 11217
diff changeset
2427 "illegal IP address string passed to inet_aton");
2d7331f4dfe3 Port inet_ntoa and inet_aton to Windows:
Guido van Rossum <guido@python.org>
parents: 11217
diff changeset
2428 return NULL;
2d7331f4dfe3 Port inet_ntoa and inet_aton to Windows:
Guido van Rossum <guido@python.org>
parents: 11217
diff changeset
2429 }
2d7331f4dfe3 Port inet_ntoa and inet_aton to Windows:
Guido van Rossum <guido@python.org>
parents: 11217
diff changeset
2430
2d7331f4dfe3 Port inet_ntoa and inet_aton to Windows:
Guido van Rossum <guido@python.org>
parents: 11217
diff changeset
2431 return PyString_FromStringAndSize((char *) &packed_addr,
2d7331f4dfe3 Port inet_ntoa and inet_aton to Windows:
Guido van Rossum <guido@python.org>
parents: 11217
diff changeset
2432 sizeof(packed_addr));
11217
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2433 }
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2434
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
2435 static char inet_ntoa_doc[] =
11937
ef98ee6aeb42 Fixed inet_ntoa() docstring.
Fred Drake <fdrake@acm.org>
parents: 11882
diff changeset
2436 "inet_ntoa(packed_ip) -> ip_address_string\n\
11217
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2437 \n\
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2438 Convert an IP address from 32-bit packed binary format to string format";
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2439
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2440 static PyObject*
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
2441 PySocket_inet_ntoa(PyObject *self, PyObject *args)
11217
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2442 {
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2443 char *packed_str;
11219
2d7331f4dfe3 Port inet_ntoa and inet_aton to Windows:
Guido van Rossum <guido@python.org>
parents: 11217
diff changeset
2444 int addr_len;
11217
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2445 struct in_addr packed_addr;
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2446
12050
b90880c0e5eb Fix all routines to use PyArg_ParseTuple(), and add ":name" to the
Guido van Rossum <guido@python.org>
parents: 11937
diff changeset
2447 if (!PyArg_ParseTuple(args, "s#:inet_ntoa", &packed_str, &addr_len)) {
11217
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2448 return NULL;
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2449 }
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
2450
11217
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2451 if (addr_len != sizeof(packed_addr)) {
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2452 PyErr_SetString(PySocket_Error,
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2453 "packed IP wrong length for inet_ntoa");
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2454 return NULL;
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2455 }
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2456
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2457 memcpy(&packed_addr, packed_str, addr_len);
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2458
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2459 return PyString_FromString(inet_ntoa(packed_addr));
f406e78ec10b Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents: 11182
diff changeset
2460 }
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
2461
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2462 /* Python interface to getaddrinfo(host, port). */
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2463
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2464 /*ARGSUSED*/
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2465 static PyObject *
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2466 PySocket_getaddrinfo(PyObject *self, PyObject *args)
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2467 {
20912
06d95b6877c4 Fix memory leaks detecting in bug report #478003.
Martin v. Löwis <martin@v.loewis.de>
parents: 20871
diff changeset
2468 struct addrinfo hints, *res;
06d95b6877c4 Fix memory leaks detecting in bug report #478003.
Martin v. Löwis <martin@v.loewis.de>
parents: 20871
diff changeset
2469 struct addrinfo *res0 = NULL;
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2470 PyObject *pobj = (PyObject *)NULL;
19197
01a9b7807160 Bump size of sprintf buffer. Suggested by Alex Coventry.
Martin v. Löwis <martin@v.loewis.de>
parents: 19151
diff changeset
2471 char pbuf[30];
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2472 char *hptr, *pptr;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2473 int family, socktype, protocol, flags;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2474 int error;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2475 PyObject *all = (PyObject *)NULL;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2476 PyObject *single = (PyObject *)NULL;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2477
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2478 family = socktype = protocol = flags = 0;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2479 family = PF_UNSPEC;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2480 if (!PyArg_ParseTuple(args, "zO|iiii:getaddrinfo",
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2481 &hptr, &pobj, &family, &socktype,
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2482 &protocol, &flags)) {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2483 return NULL;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2484 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2485 if (PyInt_Check(pobj)) {
18915
510f7f6a877e Enable PyOS_snprintf() et al. during alpha phase of 2.2.0 and
Marc-André Lemburg <mal@egenix.com>
parents: 18879
diff changeset
2486 PyOS_snprintf(pbuf, sizeof(pbuf), "%ld", PyInt_AsLong(pobj));
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2487 pptr = pbuf;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2488 } else if (PyString_Check(pobj)) {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2489 pptr = PyString_AsString(pobj);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2490 } else if (pobj == Py_None) {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2491 pptr = (char *)NULL;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2492 } else {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2493 PyErr_SetString(PySocket_Error, "Int or String expected");
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2494 return NULL;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2495 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2496 memset(&hints, 0, sizeof(hints));
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2497 hints.ai_family = family;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2498 hints.ai_socktype = socktype;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2499 hints.ai_protocol = protocol;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2500 hints.ai_flags = flags;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2501 error = getaddrinfo(hptr, pptr, &hints, &res0);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2502 if (error) {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2503 PyGAI_Err(error);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2504 return NULL;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2505 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2506
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2507 if ((all = PyList_New(0)) == NULL)
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2508 goto err;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2509 for (res = res0; res; res = res->ai_next) {
20389
b47168178d87 PySocket_getaddrinfo(): fix two refcount bugs, both having to do with
Guido van Rossum <guido@python.org>
parents: 20378
diff changeset
2510 PyObject *addr =
b47168178d87 PySocket_getaddrinfo(): fix two refcount bugs, both having to do with
Guido van Rossum <guido@python.org>
parents: 20378
diff changeset
2511 makesockaddr(-1, res->ai_addr, res->ai_addrlen);
b47168178d87 PySocket_getaddrinfo(): fix two refcount bugs, both having to do with
Guido van Rossum <guido@python.org>
parents: 20378
diff changeset
2512 if (addr == NULL)
b47168178d87 PySocket_getaddrinfo(): fix two refcount bugs, both having to do with
Guido van Rossum <guido@python.org>
parents: 20378
diff changeset
2513 goto err;
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2514 single = Py_BuildValue("iiisO", res->ai_family,
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2515 res->ai_socktype, res->ai_protocol,
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2516 res->ai_canonname ? res->ai_canonname : "",
20389
b47168178d87 PySocket_getaddrinfo(): fix two refcount bugs, both having to do with
Guido van Rossum <guido@python.org>
parents: 20378
diff changeset
2517 addr);
b47168178d87 PySocket_getaddrinfo(): fix two refcount bugs, both having to do with
Guido van Rossum <guido@python.org>
parents: 20378
diff changeset
2518 Py_DECREF(addr);
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2519 if (single == NULL)
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2520 goto err;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2521
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2522 if (PyList_Append(all, single))
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2523 goto err;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2524 Py_XDECREF(single);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2525 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2526 return all;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2527 err:
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2528 Py_XDECREF(single);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2529 Py_XDECREF(all);
20912
06d95b6877c4 Fix memory leaks detecting in bug report #478003.
Martin v. Löwis <martin@v.loewis.de>
parents: 20871
diff changeset
2530 if (res0)
06d95b6877c4 Fix memory leaks detecting in bug report #478003.
Martin v. Löwis <martin@v.loewis.de>
parents: 20871
diff changeset
2531 freeaddrinfo(res0);
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2532 return (PyObject *)NULL;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2533 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2534
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2535 static char getaddrinfo_doc[] =
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2536 "socket.getaddrinfo(host, port [, family, socktype, proto, flags])\n\
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2537 --> List of (family, socktype, proto, canonname, sockaddr)\n\
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2538 \n\
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2539 Resolve host and port into addrinfo struct.";
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2540
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2541 /* Python interface to getnameinfo(sa, flags). */
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2542
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2543 /*ARGSUSED*/
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2544 static PyObject *
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2545 PySocket_getnameinfo(PyObject *self, PyObject *args)
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2546 {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2547 PyObject *sa = (PyObject *)NULL;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2548 int flags;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2549 char *hostp;
20853
77bb2ae067c2 Correct getnameinfo refcounting and tuple parsing. Fixes #476648.
Martin v. Löwis <martin@v.loewis.de>
parents: 20756
diff changeset
2550 int port, flowinfo, scope_id;
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2551 char hbuf[NI_MAXHOST], pbuf[NI_MAXSERV];
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2552 struct addrinfo hints, *res = NULL;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2553 int error;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2554 PyObject *ret = (PyObject *)NULL;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2555
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2556 flags = flowinfo = scope_id = 0;
20853
77bb2ae067c2 Correct getnameinfo refcounting and tuple parsing. Fixes #476648.
Martin v. Löwis <martin@v.loewis.de>
parents: 20756
diff changeset
2557 if (!PyArg_ParseTuple(args, "Oi:getnameinfo", &sa, &flags))
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2558 return NULL;
20853
77bb2ae067c2 Correct getnameinfo refcounting and tuple parsing. Fixes #476648.
Martin v. Löwis <martin@v.loewis.de>
parents: 20756
diff changeset
2559 if (!PyArg_ParseTuple(sa, "si|ii", &hostp, &port, &flowinfo, &scope_id))
77bb2ae067c2 Correct getnameinfo refcounting and tuple parsing. Fixes #476648.
Martin v. Löwis <martin@v.loewis.de>
parents: 20756
diff changeset
2560 return NULL;
18915
510f7f6a877e Enable PyOS_snprintf() et al. during alpha phase of 2.2.0 and
Marc-André Lemburg <mal@egenix.com>
parents: 18879
diff changeset
2561 PyOS_snprintf(pbuf, sizeof(pbuf), "%d", port);
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2562 memset(&hints, 0, sizeof(hints));
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2563 hints.ai_family = PF_UNSPEC;
18997
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
2564 hints.ai_socktype = SOCK_DGRAM; /* make numeric port happy */
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2565 error = getaddrinfo(hostp, pbuf, &hints, &res);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2566 if (error) {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2567 PyGAI_Err(error);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2568 goto fail;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2569 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2570 if (res->ai_next) {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2571 PyErr_SetString(PySocket_Error,
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2572 "sockaddr resolved to multiple addresses");
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2573 goto fail;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2574 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2575 switch (res->ai_family) {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2576 case AF_INET:
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2577 {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2578 char *t1;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2579 int t2;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2580 if (PyArg_ParseTuple(sa, "si", &t1, &t2) == 0) {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2581 PyErr_SetString(PySocket_Error,
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2582 "IPv4 sockaddr must be 2 tuple");
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2583 goto fail;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2584 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2585 break;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2586 }
21128
15ff504632ed Remove INET6 define. Use ENABLE_IPV6 instead.
Martin v. Löwis <martin@v.loewis.de>
parents: 21094
diff changeset
2587 #ifdef ENABLE_IPV6
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2588 case AF_INET6:
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2589 {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2590 struct sockaddr_in6 *sin6;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2591 sin6 = (struct sockaddr_in6 *)res->ai_addr;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2592 sin6->sin6_flowinfo = flowinfo;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2593 sin6->sin6_scope_id = scope_id;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2594 break;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2595 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2596 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2597 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2598 error = getnameinfo(res->ai_addr, res->ai_addrlen,
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2599 hbuf, sizeof(hbuf), pbuf, sizeof(pbuf), flags);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2600 if (error) {
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2601 PyGAI_Err(error);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2602 goto fail;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2603 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2604 ret = Py_BuildValue("ss", hbuf, pbuf);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2605
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2606 fail:
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2607 if (res)
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2608 freeaddrinfo(res);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2609 return ret;
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2610 }
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2611
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2612 static char getnameinfo_doc[] =
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2613 "socket.getnameinfo(sockaddr, flags) --> (host, port)\n\
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2614 \n\
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2615 Get host and port for a sockaddr.";
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2616
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2617 /* XXX It might be helpful to augment the error message generated
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2618 below with the name of the SSL function that generated the error.
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2619 I expect it's obvious most of the time.
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2620 */
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2621
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2622 #ifdef USE_SSL
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2623 static PyObject *
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2624 PySSL_SetError(SSL *ssl, int ret)
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2625 {
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2626 PyObject *v, *n, *s;
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2627 char *errstr;
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2628 int err;
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2629
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2630 assert(ret <= 0);
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2631
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2632 err = SSL_get_error(ssl, ret);
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2633 n = PyInt_FromLong(err);
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2634 if (n == NULL)
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2635 return NULL;
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2636 v = PyTuple_New(2);
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2637 if (v == NULL) {
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2638 Py_DECREF(n);
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2639 return NULL;
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2640 }
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2641
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2642 switch (SSL_get_error(ssl, ret)) {
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2643 case SSL_ERROR_ZERO_RETURN:
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2644 errstr = "TLS/SSL connection has been closed";
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2645 break;
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2646 case SSL_ERROR_WANT_READ:
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2647 errstr = "The operation did not complete (read)";
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2648 break;
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2649 case SSL_ERROR_WANT_WRITE:
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2650 errstr = "The operation did not complete (write)";
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2651 break;
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2652 case SSL_ERROR_WANT_X509_LOOKUP:
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2653 errstr = "The operation did not complete (X509 lookup)";
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2654 break;
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2655 case SSL_ERROR_SYSCALL:
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2656 case SSL_ERROR_SSL:
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2657 {
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2658 unsigned long e = ERR_get_error();
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2659 if (e == 0) {
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2660 /* an EOF was observed that violates the protocol */
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2661 errstr = "EOF occurred in violation of protocol";
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2662 } else if (e == -1) {
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2663 /* the underlying BIO reported an I/O error */
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2664 Py_DECREF(v);
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2665 Py_DECREF(n);
20378
2f89b344fdb3 Use PySocket_Err() instead of PyErr_SetFromErrno().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20377
diff changeset
2666 return PySocket_Err();
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2667 } else {
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2668 /* XXX Protected by global interpreter lock */
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2669 errstr = ERR_error_string(e, NULL);
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2670 }
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2671 break;
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2672 }
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2673 default:
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2674 errstr = "Invalid error code";
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2675 }
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2676 s = PyString_FromString(errstr);
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2677 if (s == NULL) {
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2678 Py_DECREF(v);
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2679 Py_DECREF(n);
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2680 }
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2681 PyTuple_SET_ITEM(v, 0, n);
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2682 PyTuple_SET_ITEM(v, 1, s);
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2683 PyErr_SetObject(PySSLErrorObject, v);
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2684 return NULL;
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2685 }
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2686
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2687 /* This is a C function to be called for new object initialization */
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2688 static PySSLObject *
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2689 newPySSLObject(PySocketSockObject *Sock, char *key_file, char *cert_file)
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2690 {
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2691 PySSLObject *self;
20366
7bcaca653388 USe PyObject_SetString() instead of PyObject_SetObject() in newSSLObject().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20360
diff changeset
2692 char *errstr = NULL;
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2693 int ret;
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2694
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2695 self = PyObject_New(PySSLObject, &PySSL_Type); /* Create new object */
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2696 if (self == NULL){
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2697 errstr = "newPySSLObject error";
20358
98f597a17c90 Fix two memory leaks in socket.ssl().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 19568
diff changeset
2698 goto fail;
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2699 }
20377
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2700 memset(self->server, '\0', sizeof(char) * X509_NAME_MAXLEN);
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2701 memset(self->issuer, '\0', sizeof(char) * X509_NAME_MAXLEN);
20360
8a09c855f957 In newSSLObject(), initialize the various members of an SSLObject to NULL.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20359
diff changeset
2702 self->server_cert = NULL;
8a09c855f957 In newSSLObject(), initialize the various members of an SSLObject to NULL.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20359
diff changeset
2703 self->ssl = NULL;
8a09c855f957 In newSSLObject(), initialize the various members of an SSLObject to NULL.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20359
diff changeset
2704 self->ctx = NULL;
8a09c855f957 In newSSLObject(), initialize the various members of an SSLObject to NULL.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20359
diff changeset
2705 self->Socket = NULL;
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
2706
20367
300b1d8bfa4d Do simple error checking before doing any SSL calls.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20366
diff changeset
2707 if ((key_file && !cert_file) || (!key_file && cert_file)) {
300b1d8bfa4d Do simple error checking before doing any SSL calls.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20366
diff changeset
2708 errstr = "Both the key & certificate files must be specified";
300b1d8bfa4d Do simple error checking before doing any SSL calls.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20366
diff changeset
2709 goto fail;
300b1d8bfa4d Do simple error checking before doing any SSL calls.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20366
diff changeset
2710 }
300b1d8bfa4d Do simple error checking before doing any SSL calls.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20366
diff changeset
2711
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2712 self->ctx = SSL_CTX_new(SSLv23_method()); /* Set up context */
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2713 if (self->ctx == NULL) {
20366
7bcaca653388 USe PyObject_SetString() instead of PyObject_SetObject() in newSSLObject().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20360
diff changeset
2714 errstr = "SSL_CTX_new error";
20358
98f597a17c90 Fix two memory leaks in socket.ssl().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 19568
diff changeset
2715 goto fail;
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2716 }
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2717
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2718 if (key_file) {
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2719 if (SSL_CTX_use_PrivateKey_file(self->ctx, key_file,
20358
98f597a17c90 Fix two memory leaks in socket.ssl().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 19568
diff changeset
2720 SSL_FILETYPE_PEM) < 1) {
20366
7bcaca653388 USe PyObject_SetString() instead of PyObject_SetObject() in newSSLObject().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20360
diff changeset
2721 errstr = "SSL_CTX_use_PrivateKey_file error";
20358
98f597a17c90 Fix two memory leaks in socket.ssl().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 19568
diff changeset
2722 goto fail;
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2723 }
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2724
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2725 if (SSL_CTX_use_certificate_chain_file(self->ctx,
20358
98f597a17c90 Fix two memory leaks in socket.ssl().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 19568
diff changeset
2726 cert_file) < 1) {
20366
7bcaca653388 USe PyObject_SetString() instead of PyObject_SetObject() in newSSLObject().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20360
diff changeset
2727 errstr = "SSL_CTX_use_certificate_chain_file error";
20358
98f597a17c90 Fix two memory leaks in socket.ssl().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 19568
diff changeset
2728 goto fail;
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2729 }
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2730 }
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2731
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2732 SSL_CTX_set_verify(self->ctx,
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2733 SSL_VERIFY_NONE, NULL); /* set verify lvl */
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2734 self->ssl = SSL_new(self->ctx); /* New ssl struct */
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2735 SSL_set_fd(self->ssl, Sock->sock_fd); /* Set the socket for SSL */
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2736 SSL_set_connect_state(self->ssl);
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2737
20358
98f597a17c90 Fix two memory leaks in socket.ssl().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 19568
diff changeset
2738 /* Actually negotiate SSL connection */
98f597a17c90 Fix two memory leaks in socket.ssl().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 19568
diff changeset
2739 /* XXX If SSL_connect() returns 0, it's also a failure. */
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2740 ret = SSL_connect(self->ssl);
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2741 if (ret <= 0) {
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2742 PySSL_SetError(self->ssl, ret);
20358
98f597a17c90 Fix two memory leaks in socket.ssl().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 19568
diff changeset
2743 goto fail;
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2744 }
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2745 self->ssl->debug = 1;
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2746
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2747 if ((self->server_cert = SSL_get_peer_certificate(self->ssl))) {
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2748 X509_NAME_oneline(X509_get_subject_name(self->server_cert),
20377
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2749 self->server, X509_NAME_MAXLEN);
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2750 X509_NAME_oneline(X509_get_issuer_name(self->server_cert),
20377
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2751 self->issuer, X509_NAME_MAXLEN);
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2752 }
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2753 self->Socket = Sock;
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2754 Py_INCREF(self->Socket);
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2755 return self;
20358
98f597a17c90 Fix two memory leaks in socket.ssl().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 19568
diff changeset
2756 fail:
20366
7bcaca653388 USe PyObject_SetString() instead of PyObject_SetObject() in newSSLObject().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20360
diff changeset
2757 if (errstr)
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2758 PyErr_SetString(PySSLErrorObject, errstr);
20358
98f597a17c90 Fix two memory leaks in socket.ssl().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 19568
diff changeset
2759 Py_DECREF(self);
98f597a17c90 Fix two memory leaks in socket.ssl().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 19568
diff changeset
2760 return NULL;
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2761 }
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2762
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2763 /* This is the Python function called for new object initialization */
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2764 static PyObject *
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
2765 PySocket_ssl(PyObject *self, PyObject *args)
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2766 {
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2767 PySSLObject *rv;
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2768 PySocketSockObject *Sock;
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2769 char *key_file = NULL;
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2770 char *cert_file = NULL;
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2771
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2772 if (!PyArg_ParseTuple(args, "O!|zz:ssl",
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2773 &PySocketSock_Type, (PyObject*)&Sock,
20359
e191ceee672f A bit of reformatting to match the standard style
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20358
diff changeset
2774 &key_file, &cert_file))
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2775 return NULL;
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
2776
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2777 rv = newPySSLObject(Sock, key_file, cert_file);
20359
e191ceee672f A bit of reformatting to match the standard style
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20358
diff changeset
2778 if (rv == NULL)
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2779 return NULL;
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2780 return (PyObject *)rv;
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2781 }
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2782
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2783 static char ssl_doc[] =
20377
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2784 "ssl(socket, [keyfile, certfile]) -> sslobject";
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2785
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2786 /* SSL object methods */
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2787
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2788 static PyObject *
20377
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2789 PySSL_server(PySSLObject *self)
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2790 {
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2791 return PyString_FromString(self->server);
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2792 }
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2793
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2794 static PyObject *
20377
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2795 PySSL_issuer(PySSLObject *self)
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2796 {
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2797 return PyString_FromString(self->issuer);
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2798 }
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2799
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2800
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2801 static void PySSL_dealloc(PySSLObject *self)
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2802 {
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2803 if (self->server_cert) /* Possible not to have one? */
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2804 X509_free (self->server_cert);
20360
8a09c855f957 In newSSLObject(), initialize the various members of an SSLObject to NULL.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20359
diff changeset
2805 if (self->ssl)
8a09c855f957 In newSSLObject(), initialize the various members of an SSLObject to NULL.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20359
diff changeset
2806 SSL_free(self->ssl);
8a09c855f957 In newSSLObject(), initialize the various members of an SSLObject to NULL.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20359
diff changeset
2807 if (self->ctx)
8a09c855f957 In newSSLObject(), initialize the various members of an SSLObject to NULL.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20359
diff changeset
2808 SSL_CTX_free(self->ctx);
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2809 Py_XDECREF(self->Socket);
12576
1c7c2dd1beb1 Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents: 12493
diff changeset
2810 PyObject_Del(self);
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2811 }
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2812
20377
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2813 static PyObject *PySSL_SSLwrite(PySSLObject *self, PyObject *args)
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2814 {
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2815 char *data;
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2816 int len;
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2817
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2818 if (!PyArg_ParseTuple(args, "s#:write", &data, &len))
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2819 return NULL;
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2820
20679
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
2821 Py_BEGIN_ALLOW_THREADS
20377
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2822 len = SSL_write(self->ssl, data, len);
20679
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
2823 Py_END_ALLOW_THREADS
20377
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2824 if (len > 0)
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2825 return PyInt_FromLong(len);
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2826 else
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2827 return PySSL_SetError(self->ssl, len);
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2828 }
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2829
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2830 static char PySSL_SSLwrite_doc[] =
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2831 "write(s) -> len\n\
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2832 \n\
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2833 Writes the string s into the SSL object. Returns the number\n\
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2834 of bytes written.";
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2835
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2836 static PyObject *PySSL_SSLread(PySSLObject *self, PyObject *args)
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2837 {
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2838 PyObject *buf;
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2839 int count = 0;
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2840 int len = 1024;
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2841
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2842 if (!PyArg_ParseTuple(args, "|i:read", &len))
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2843 return NULL;
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2844
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2845 if (!(buf = PyString_FromStringAndSize((char *) 0, len)))
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2846 return NULL;
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2847
20679
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
2848 Py_BEGIN_ALLOW_THREADS
20377
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2849 count = SSL_read(self->ssl, PyString_AsString(buf), len);
20679
e89c25ca6b29 Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents: 20661
diff changeset
2850 Py_END_ALLOW_THREADS
20377
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2851 if (count <= 0) {
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2852 Py_DECREF(buf);
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2853 return PySSL_SetError(self->ssl, count);
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2854 }
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2855 if (count != len && _PyString_Resize(&buf, count) < 0)
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2856 return NULL;
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2857 return buf;
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2858 }
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2859
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2860 static char PySSL_SSLread_doc[] =
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2861 "read([len]) -> string\n\
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2862 \n\
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2863 Read up to len bytes from the SSL socket.";
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2864
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2865 static PyMethodDef PySSLMethods[] = {
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2866 {"write", (PyCFunction)PySSL_SSLwrite, 1,
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2867 PySSL_SSLwrite_doc},
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2868 {"read", (PyCFunction)PySSL_SSLread, 1,
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2869 PySSL_SSLread_doc},
20440
9be2cc6b9959 Fix a bunch of warnings reported by Skip.
Guido van Rossum <guido@python.org>
parents: 20412
diff changeset
2870 {"server", (PyCFunction)PySSL_server, METH_NOARGS},
9be2cc6b9959 Fix a bunch of warnings reported by Skip.
Guido van Rossum <guido@python.org>
parents: 20412
diff changeset
2871 {"issuer", (PyCFunction)PySSL_issuer, METH_NOARGS},
20377
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2872 {NULL, NULL}
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2873 };
9c2d444674d0 Commit parts of SF patch #462759
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20376
diff changeset
2874
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2875 static PyObject *PySSL_getattr(PySSLObject *self, char *name)
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2876 {
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2877 return Py_FindMethod(PySSLMethods, (PyObject *)self, name);
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2878 }
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2879
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2880 staticforward PyTypeObject PySSL_Type = {
16106
28c414dcb3e1 SF Patch #103185, by jlt63: Some more standard modules cleanup for Cygwin
Guido van Rossum <guido@python.org>
parents: 15994
diff changeset
2881 PyObject_HEAD_INIT(NULL)
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2882 0, /*ob_size*/
20730
73cabe664c11 Oops. In the tp_name field, the name should be "_socket.socket", not
Guido van Rossum <guido@python.org>
parents: 20727
diff changeset
2883 "_socket.SSL", /*tp_name*/
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2884 sizeof(PySSLObject), /*tp_basicsize*/
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2885 0, /*tp_itemsize*/
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2886 /* methods */
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2887 (destructor)PySSL_dealloc, /*tp_dealloc*/
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2888 0, /*tp_print*/
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
2889 (getattrfunc)PySSL_getattr, /*tp_getattr*/
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2890 0, /*tp_setattr*/
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2891 0, /*tp_compare*/
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2892 0, /*tp_repr*/
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2893 0, /*tp_as_number*/
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2894 0, /*tp_as_sequence*/
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2895 0, /*tp_as_mapping*/
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2896 0, /*tp_hash*/
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2897 };
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2898
20505
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2899 /* helper routines for seeding the SSL PRNG */
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2900 static PyObject *
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2901 PySSL_RAND_add(PyObject *self, PyObject *args)
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2902 {
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2903 char *buf;
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2904 int len;
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2905 double entropy;
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2906
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2907 if (!PyArg_ParseTuple(args, "s#d:RAND_add", &buf, &len, &entropy))
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2908 return NULL;
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2909 RAND_add(buf, len, entropy);
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2910 Py_INCREF(Py_None);
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2911 return Py_None;
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2912 }
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2913
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2914 static char PySSL_RAND_add_doc[] =
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2915 "RAND_add(string, entropy)\n\
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2916 \n\
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2917 Mix string into the OpenSSL PRNG state. entropy (a float) is a lower\n\
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2918 bound on the entropy contained in string.";
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2919
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2920 static PyObject *
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2921 PySSL_RAND_status(PyObject *self)
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2922 {
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2923 return PyInt_FromLong(RAND_status());
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2924 }
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2925
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2926 static char PySSL_RAND_status_doc[] =
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2927 "RAND_status() -> 0 or 1\n\
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2928 \n\
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2929 Returns 1 if the OpenSSL PRNG has been seeded with enough data and 0 if not.\n\
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2930 It is necessary to seed the PRNG with RAND_add() on some platforms before\n\
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2931 using the ssl() function.";
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2932
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2933 static PyObject *
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2934 PySSL_RAND_egd(PyObject *self, PyObject *arg)
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2935 {
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2936 int bytes;
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2937
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2938 if (!PyString_Check(arg))
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2939 return PyErr_Format(PyExc_TypeError,
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2940 "RAND_egd() expected string, found %s",
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2941 arg->ob_type->tp_name);
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2942 bytes = RAND_egd(PyString_AS_STRING(arg));
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2943 if (bytes == -1) {
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2944 PyErr_SetString(PySSLErrorObject,
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2945 "EGD connection failed or EGD did not return "
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2946 "enough data to seed the PRNG");
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2947 return NULL;
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2948 }
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2949 return PyInt_FromLong(bytes);
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2950 }
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2951
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2952 static char PySSL_RAND_egd_doc[] =
20564
8dddfffb9f2b (Hopefully) fix SF bug #472675: CVS socketmodule now doesn't compile
Guido van Rossum <guido@python.org>
parents: 20505
diff changeset
2953 "RAND_egd(path) -> bytes\n\
20505
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2954 \n\
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2955 Queries the entropy gather daemon (EGD) on socket path. Returns number\n\
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2956 of bytes read. Raises socket.sslerror if connection to EGD fails or\n\
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2957 if it does provide enough data to seed PRNG.";
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
2958
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2959 #endif /* USE_SSL */
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2960
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2961
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
2962 /* List of functions exported by this module. */
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
2963
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
2964 static PyMethodDef PySocket_methods[] = {
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
2965 {"gethostbyname", PySocket_gethostbyname,
13817
3c0f75a2198f Use METH_VARARGS instead of numeric constant 1 in method def. tables
Andrew M. Kuchling <amk@amk.ca>
parents: 13761
diff changeset
2966 METH_VARARGS, gethostbyname_doc},
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
2967 {"gethostbyname_ex", PySocket_gethostbyname_ex,
13817
3c0f75a2198f Use METH_VARARGS instead of numeric constant 1 in method def. tables
Andrew M. Kuchling <amk@amk.ca>
parents: 13761
diff changeset
2968 METH_VARARGS, ghbn_ex_doc},
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
2969 {"gethostbyaddr", PySocket_gethostbyaddr,
13817
3c0f75a2198f Use METH_VARARGS instead of numeric constant 1 in method def. tables
Andrew M. Kuchling <amk@amk.ca>
parents: 13761
diff changeset
2970 METH_VARARGS, gethostbyaddr_doc},
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
2971 {"gethostname", PySocket_gethostname,
13817
3c0f75a2198f Use METH_VARARGS instead of numeric constant 1 in method def. tables
Andrew M. Kuchling <amk@amk.ca>
parents: 13761
diff changeset
2972 METH_VARARGS, gethostname_doc},
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
2973 {"getservbyname", PySocket_getservbyname,
13817
3c0f75a2198f Use METH_VARARGS instead of numeric constant 1 in method def. tables
Andrew M. Kuchling <amk@amk.ca>
parents: 13761
diff changeset
2974 METH_VARARGS, getservbyname_doc},
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
2975 {"getprotobyname", PySocket_getprotobyname,
13817
3c0f75a2198f Use METH_VARARGS instead of numeric constant 1 in method def. tables
Andrew M. Kuchling <amk@amk.ca>
parents: 13761
diff changeset
2976 METH_VARARGS,getprotobyname_doc},
1792
a584b4bbbc59 Changes to make it work and compile on NT, by Mark Hammond.
Guido van Rossum <guido@python.org>
parents: 1760
diff changeset
2977 #ifndef NO_DUP
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
2978 {"fromfd", PySocket_fromfd,
13817
3c0f75a2198f Use METH_VARARGS instead of numeric constant 1 in method def. tables
Andrew M. Kuchling <amk@amk.ca>
parents: 13761
diff changeset
2979 METH_VARARGS, fromfd_doc},
1792
a584b4bbbc59 Changes to make it work and compile on NT, by Mark Hammond.
Guido van Rossum <guido@python.org>
parents: 1760
diff changeset
2980 #endif
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
2981 {"ntohs", PySocket_ntohs,
13817
3c0f75a2198f Use METH_VARARGS instead of numeric constant 1 in method def. tables
Andrew M. Kuchling <amk@amk.ca>
parents: 13761
diff changeset
2982 METH_VARARGS, ntohs_doc},
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
2983 {"ntohl", PySocket_ntohl,
13817
3c0f75a2198f Use METH_VARARGS instead of numeric constant 1 in method def. tables
Andrew M. Kuchling <amk@amk.ca>
parents: 13761
diff changeset
2984 METH_VARARGS, ntohl_doc},
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
2985 {"htons", PySocket_htons,
13817
3c0f75a2198f Use METH_VARARGS instead of numeric constant 1 in method def. tables
Andrew M. Kuchling <amk@amk.ca>
parents: 13761
diff changeset
2986 METH_VARARGS, htons_doc},
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
2987 {"htonl", PySocket_htonl,
13817
3c0f75a2198f Use METH_VARARGS instead of numeric constant 1 in method def. tables
Andrew M. Kuchling <amk@amk.ca>
parents: 13761
diff changeset
2988 METH_VARARGS, htonl_doc},
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
2989 {"inet_aton", PySocket_inet_aton,
13817
3c0f75a2198f Use METH_VARARGS instead of numeric constant 1 in method def. tables
Andrew M. Kuchling <amk@amk.ca>
parents: 13761
diff changeset
2990 METH_VARARGS, inet_aton_doc},
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
2991 {"inet_ntoa", PySocket_inet_ntoa,
13817
3c0f75a2198f Use METH_VARARGS instead of numeric constant 1 in method def. tables
Andrew M. Kuchling <amk@amk.ca>
parents: 13761
diff changeset
2992 METH_VARARGS, inet_ntoa_doc},
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2993 {"getaddrinfo", PySocket_getaddrinfo,
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2994 METH_VARARGS, getaddrinfo_doc},
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2995 {"getnameinfo", PySocket_getnameinfo,
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
2996 METH_VARARGS, getnameinfo_doc},
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
2997 #ifdef USE_SSL
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
2998 {"ssl", PySocket_ssl,
13817
3c0f75a2198f Use METH_VARARGS instead of numeric constant 1 in method def. tables
Andrew M. Kuchling <amk@amk.ca>
parents: 13761
diff changeset
2999 METH_VARARGS, ssl_doc},
20505
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
3000 {"RAND_add", PySSL_RAND_add, METH_VARARGS,
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
3001 PySSL_RAND_add_doc},
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
3002 {"RAND_egd", PySSL_RAND_egd, METH_O,
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
3003 PySSL_RAND_egd_doc},
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
3004 {"RAND_status", (PyCFunction)PySSL_RAND_status, METH_NOARGS,
93841c5f475b Expose three OpenSSL API calls for dealing with the PRNG.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20440
diff changeset
3005 PySSL_RAND_status_doc},
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
3006 #endif /* USE_SSL */
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
3007 {NULL, NULL} /* Sentinel */
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3008 };
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3009
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
3010
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
3011 /* Convenience routine to export an integer value.
4871
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
3012 *
6367
2c29b8982643 Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents: 5697
diff changeset
3013 * Errors are silently ignored, for better or for worse...
4871
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
3014 */
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3015 static void
13470
75b0e8cb0783 - ANSI-ification
Fredrik Lundh <fredrik@pythonware.com>
parents: 13447
diff changeset
3016 insint(PyObject *d, char *name, int value)
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3017 {
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
3018 PyObject *v = PyInt_FromLong((long) value);
4871
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
3019 if (!v || PyDict_SetItemString(d, name, v))
6367
2c29b8982643 Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents: 5697
diff changeset
3020 PyErr_Clear();
4871
a7159ba0e45d Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents: 4783
diff changeset
3021
6367
2c29b8982643 Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents: 5697
diff changeset
3022 Py_XDECREF(v);
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3023 }
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3024
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
3025
3702
3408756ec601 changed windows test symbols; removed debug printf from sockets
Guido van Rossum <guido@python.org>
parents: 3700
diff changeset
3026 #ifdef MS_WINDOWS
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3027
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3028 /* Additional initialization and cleanup for NT/Windows */
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3029
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3030 static void
13651
8a063423e0b7 Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents: 13554
diff changeset
3031 NTcleanup(void)
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3032 {
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3033 WSACleanup();
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3034 }
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3035
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3036 static int
13651
8a063423e0b7 Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents: 13554
diff changeset
3037 NTinit(void)
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3038 {
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3039 WSADATA WSAData;
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3040 int ret;
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3041 char buf[100];
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3042 ret = WSAStartup(0x0101, &WSAData);
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3043 switch (ret) {
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3044 case 0: /* no error */
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3045 atexit(NTcleanup);
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3046 return 1;
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3047 case WSASYSNOTREADY:
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3048 PyErr_SetString(PyExc_ImportError,
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3049 "WSAStartup failed: network not ready");
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3050 break;
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3051 case WSAVERNOTSUPPORTED:
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3052 case WSAEINVAL:
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3053 PyErr_SetString(PyExc_ImportError,
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3054 "WSAStartup failed: requested version not supported");
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3055 break;
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3056 default:
21073
304b34023876 sprintf -> PyOS_snprintf in some "obviously safe" cases.
Tim Peters <tim.peters@gmail.com>
parents: 21060
diff changeset
3057 PyOS_snprintf(buf, sizeof(buf),
304b34023876 sprintf -> PyOS_snprintf in some "obviously safe" cases.
Tim Peters <tim.peters@gmail.com>
parents: 21060
diff changeset
3058 "WSAStartup failed: error code %d", ret);
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3059 PyErr_SetString(PyExc_ImportError, buf);
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3060 break;
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3061 }
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3062 return 0;
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3063 }
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3064
3702
3408756ec601 changed windows test symbols; removed debug printf from sockets
Guido van Rossum <guido@python.org>
parents: 3700
diff changeset
3065 #endif /* MS_WINDOWS */
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3066
6626
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3067 #if defined(PYOS_OS2)
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3068
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3069 /* Additional initialization and cleanup for OS/2 */
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3070
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3071 static void
13651
8a063423e0b7 Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents: 13554
diff changeset
3072 OS2cleanup(void)
6626
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3073 {
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3074 /* No cleanup is necessary for OS/2 Sockets */
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3075 }
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3076
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3077 static int
13651
8a063423e0b7 Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents: 13554
diff changeset
3078 OS2init(void)
6626
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3079 {
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3080 char reason[64];
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3081 int rc = sock_init();
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3082
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3083 if (rc == 0) {
6718
32f2eda2946c Left-aligned preprocessor directives and changed C++ comments to C
Guido van Rossum <guido@python.org>
parents: 6626
diff changeset
3084 atexit(OS2cleanup);
32f2eda2946c Left-aligned preprocessor directives and changed C++ comments to C
Guido van Rossum <guido@python.org>
parents: 6626
diff changeset
3085 return 1; /* Indicate Success */
6626
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3086 }
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3087
21094
c2150313d9d1 More sprintf -> PyOS_snprintf.
Tim Peters <tim.peters@gmail.com>
parents: 21073
diff changeset
3088 PyOS_snprintf(reason, sizeof(reason),
c2150313d9d1 More sprintf -> PyOS_snprintf.
Tim Peters <tim.peters@gmail.com>
parents: 21073
diff changeset
3089 "OS/2 TCP/IP Error# %d", sock_errno());
6626
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3090 PyErr_SetString(PyExc_ImportError, reason);
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3091
6718
32f2eda2946c Left-aligned preprocessor directives and changed C++ comments to C
Guido van Rossum <guido@python.org>
parents: 6626
diff changeset
3092 return 0; /* Indicate Failure */
6626
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3093 }
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3094
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3095 #endif /* PYOS_OS2 */
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3096
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
3097 /* Initialize this module.
6626
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3098 * This is called when the first 'import socket' is done,
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3099 * via a table in config.c, if config.c is compiled with USE_SOCKET
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3100 * defined.
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3101 *
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3102 * For MS_WINDOWS (which means any Windows variant), this module
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3103 * is actually called "_socket", and there's a wrapper "socket.py"
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3104 * which implements some missing functionality (such as makefile(),
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3105 * dup() and fromfd()). The import of "_socket" may fail with an
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3106 * ImportError exception if initialization of WINSOCK fails. When
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3107 * WINSOCK is initialized succesfully, a call to WSACleanup() is
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3108 * scheduled to be made at exit time.
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3109 *
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3110 * For OS/2, this module is also called "_socket" and uses a wrapper
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3111 * "socket.py" which implements that functionality that is missing
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3112 * when PC operating systems don't put socket descriptors in the
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3113 * operating system's filesystem layer.
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3114 */
295
d7a38dece86a Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents: 294
diff changeset
3115
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
3116 static char module_doc[] =
14008
6c91ad9c0e06 Remove a lot of the confusing conditional compilation from the beginning
Fred Drake <fdrake@acm.org>
parents: 13830
diff changeset
3117 "Implementation module for socket operations. See the socket module\n\
6c91ad9c0e06 Remove a lot of the confusing conditional compilation from the beginning
Fred Drake <fdrake@acm.org>
parents: 13830
diff changeset
3118 for documentation.";
8631
d86733676815 Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents: 8439
diff changeset
3119
9588
38023a425e48 Add DL_EXPORT() to all modules that could possibly be used
Guido van Rossum <guido@python.org>
parents: 9307
diff changeset
3120 DL_EXPORT(void)
13694
b54f11ada91e Create a new section of pyport.h to hold all external function declarations
Thomas Wouters <thomas@python.org>
parents: 13680
diff changeset
3121 init_socket(void)
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3122 {
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
3123 PyObject *m, *d;
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
3124 #ifdef RISCOS
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
3125 _kernel_swi_regs r;
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
3126 r.r[0]=0;
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
3127 _kernel_swi(0x43380, &r, &r);
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
3128 taskwindow = r.r[0];
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
3129 #else
3702
3408756ec601 changed windows test symbols; removed debug printf from sockets
Guido van Rossum <guido@python.org>
parents: 3700
diff changeset
3130 #ifdef MS_WINDOWS
3700
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3131 if (!NTinit())
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3132 return;
931086cb8529 More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents: 3673
diff changeset
3133 #else
6718
32f2eda2946c Left-aligned preprocessor directives and changed C++ comments to C
Guido van Rossum <guido@python.org>
parents: 6626
diff changeset
3134 #if defined(__TOS_OS2__)
6626
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3135 if (!OS2init())
5e31d381fa47 os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents: 6618
diff changeset
3136 return;
14008
6c91ad9c0e06 Remove a lot of the confusing conditional compilation from the beginning
Fred Drake <fdrake@acm.org>
parents: 13830
diff changeset
3137 #endif /* __TOS_OS2__ */
6c91ad9c0e06 Remove a lot of the confusing conditional compilation from the beginning
Fred Drake <fdrake@acm.org>
parents: 13830
diff changeset
3138 #endif /* MS_WINDOWS */
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
3139 #endif /* RISCOS */
20727
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
3140 PySocketSock_Type.ob_type = &PyType_Type;
20920
90871fa43f4e Fixes to compile cPickle.c & socketmodule.c on cygwin and possibly
Michael W. Hudson <mwh@python.net>
parents: 20912
diff changeset
3141 PySocketSock_Type.tp_getattro = PyObject_GenericGetAttr;
90871fa43f4e Fixes to compile cPickle.c & socketmodule.c on cygwin and possibly
Michael W. Hudson <mwh@python.net>
parents: 20912
diff changeset
3142 PySocketSock_Type.tp_alloc = PyType_GenericAlloc;
90871fa43f4e Fixes to compile cPickle.c & socketmodule.c on cygwin and possibly
Michael W. Hudson <mwh@python.net>
parents: 20912
diff changeset
3143 PySocketSock_Type.tp_free = _PyObject_Del;
16106
28c414dcb3e1 SF Patch #103185, by jlt63: Some more standard modules cleanup for Cygwin
Guido van Rossum <guido@python.org>
parents: 15994
diff changeset
3144 #ifdef USE_SSL
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
3145 PySSL_Type.ob_type = &PyType_Type;
16106
28c414dcb3e1 SF Patch #103185, by jlt63: Some more standard modules cleanup for Cygwin
Guido van Rossum <guido@python.org>
parents: 15994
diff changeset
3146 #endif
8823
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
3147 m = Py_InitModule3("_socket", PySocket_methods, module_doc);
1970
84637cfdbc07 new style
Guido van Rossum <guido@python.org>
parents: 1915
diff changeset
3148 d = PyModule_GetDict(m);
6367
2c29b8982643 Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents: 5697
diff changeset
3149 PySocket_Error = PyErr_NewException("socket.error", NULL, NULL);
2c29b8982643 Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents: 5697
diff changeset
3150 if (PySocket_Error == NULL)
2c29b8982643 Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents: 5697
diff changeset
3151 return;
18996
9059e7c1d8b0 Auto-detect hstrerror. Raise socket.herror in PyH_Error. Register the three
Martin v. Löwis <martin@v.loewis.de>
parents: 18954
diff changeset
3152 PyDict_SetItemString(d, "error", PySocket_Error);
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3153 PyH_Error = PyErr_NewException("socket.herror", PySocket_Error, NULL);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3154 if (PyH_Error == NULL)
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3155 return;
18996
9059e7c1d8b0 Auto-detect hstrerror. Raise socket.herror in PyH_Error. Register the three
Martin v. Löwis <martin@v.loewis.de>
parents: 18954
diff changeset
3156 PyDict_SetItemString(d, "herror", PyH_Error);
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3157 PyGAI_Error = PyErr_NewException("socket.gaierror", PySocket_Error,
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3158 NULL);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3159 if (PyGAI_Error == NULL)
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3160 return;
18996
9059e7c1d8b0 Auto-detect hstrerror. Raise socket.herror in PyH_Error. Register the three
Martin v. Löwis <martin@v.loewis.de>
parents: 18954
diff changeset
3161 PyDict_SetItemString(d, "gaierror", PyGAI_Error);
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
3162 #ifdef USE_SSL
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
3163 SSL_load_error_strings();
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
3164 SSLeay_add_ssl_algorithms();
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
3165 PySSLErrorObject = PyErr_NewException("socket.sslerror", NULL, NULL);
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
3166 if (PySSLErrorObject == NULL)
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
3167 return;
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
3168 PyDict_SetItemString(d, "sslerror", PySSLErrorObject);
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
3169 if (PyDict_SetItemString(d, "SSLType",
20368
9e72bceb540b Lots of code reorganization with a few small API changes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20367
diff changeset
3170 (PyObject *)&PySSL_Type) != 0)
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
3171 return;
20369
8830be3209a2 Add a bunch of SSL error constants
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20368
diff changeset
3172 PyModule_AddIntConstant(m, "SSL_ERROR_ZERO_RETURN",
8830be3209a2 Add a bunch of SSL error constants
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20368
diff changeset
3173 SSL_ERROR_ZERO_RETURN);
8830be3209a2 Add a bunch of SSL error constants
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20368
diff changeset
3174 PyModule_AddIntConstant(m, "SSL_ERROR_WANT_READ",
8830be3209a2 Add a bunch of SSL error constants
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20368
diff changeset
3175 SSL_ERROR_WANT_READ);
8830be3209a2 Add a bunch of SSL error constants
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20368
diff changeset
3176 PyModule_AddIntConstant(m, "SSL_ERROR_WANT_WRITE",
8830be3209a2 Add a bunch of SSL error constants
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20368
diff changeset
3177 SSL_ERROR_WANT_WRITE);
8830be3209a2 Add a bunch of SSL error constants
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20368
diff changeset
3178 PyModule_AddIntConstant(m, "SSL_ERROR_WANT_X509_LOOKUP",
8830be3209a2 Add a bunch of SSL error constants
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20368
diff changeset
3179 SSL_ERROR_WANT_X509_LOOKUP);
8830be3209a2 Add a bunch of SSL error constants
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20368
diff changeset
3180 PyModule_AddIntConstant(m, "SSL_ERROR_SYSCALL",
8830be3209a2 Add a bunch of SSL error constants
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20368
diff changeset
3181 SSL_ERROR_SYSCALL);
8830be3209a2 Add a bunch of SSL error constants
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20368
diff changeset
3182 PyModule_AddIntConstant(m, "SSL_ERROR_SSL",
8830be3209a2 Add a bunch of SSL error constants
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20368
diff changeset
3183 SSL_ERROR_SSL);
11527
28b8585354de OpenSSL support. This is based on patches for a version of SSLeay by
Guido van Rossum <guido@python.org>
parents: 11438
diff changeset
3184 #endif /* USE_SSL */
5697
88b0b2a3aab5 socket_type -> SocketType
Guido van Rossum <guido@python.org>
parents: 5572
diff changeset
3185 if (PyDict_SetItemString(d, "SocketType",
5572
b231855a9474 Add socket.socket_type, as discussed on c.l.p.
Guido van Rossum <guido@python.org>
parents: 5534
diff changeset
3186 (PyObject *)&PySocketSock_Type) != 0)
6367
2c29b8982643 Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents: 5697
diff changeset
3187 return;
20727
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
3188 if (PyDict_SetItemString(d, "socket",
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
3189 (PyObject *)&PySocketSock_Type) != 0)
abd71e89840f Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents: 20679
diff changeset
3190 return;
11182
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3191
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3192 /* Address families (we only support AF_INET and AF_UNIX) */
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3193 #ifdef AF_UNSPEC
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3194 insint(d, "AF_UNSPEC", AF_UNSPEC);
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3195 #endif
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3196 insint(d, "AF_INET", AF_INET);
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3197 #ifdef AF_INET6
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3198 insint(d, "AF_INET6", AF_INET6);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3199 #endif /* AF_INET6 */
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
3200 #ifdef AF_UNIX
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3201 insint(d, "AF_UNIX", AF_UNIX);
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
3202 #endif /* AF_UNIX */
11182
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3203 #ifdef AF_AX25
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3204 insint(d, "AF_AX25", AF_AX25); /* Amateur Radio AX.25 */
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3205 #endif
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3206 #ifdef AF_IPX
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3207 insint(d, "AF_IPX", AF_IPX); /* Novell IPX */
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3208 #endif
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3209 #ifdef AF_APPLETALK
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3210 insint(d, "AF_APPLETALK", AF_APPLETALK); /* Appletalk DDP */
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3211 #endif
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3212 #ifdef AF_NETROM
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3213 insint(d, "AF_NETROM", AF_NETROM); /* Amateur radio NetROM */
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3214 #endif
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3215 #ifdef AF_BRIDGE
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3216 insint(d, "AF_BRIDGE", AF_BRIDGE); /* Multiprotocol bridge */
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3217 #endif
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3218 #ifdef AF_AAL5
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3219 insint(d, "AF_AAL5", AF_AAL5); /* Reserved for Werner's ATM */
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3220 #endif
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3221 #ifdef AF_X25
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3222 insint(d, "AF_X25", AF_X25); /* Reserved for X.25 project */
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3223 #endif
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3224 #ifdef AF_INET6
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3225 insint(d, "AF_INET6", AF_INET6); /* IP version 6 */
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3226 #endif
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3227 #ifdef AF_ROSE
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3228 insint(d, "AF_ROSE", AF_ROSE); /* Amateur Radio X.25 PLP */
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3229 #endif
19151
cd44254360b6 Autotest for netpacket/packet.h, as it is not available on all Linux versions.
Martin v. Löwis <martin@v.loewis.de>
parents: 18997
diff changeset
3230 #ifdef HAVE_NETPACKET_PACKET_H
16410
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
3231 insint(d, "AF_PACKET", AF_PACKET);
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
3232 insint(d, "PF_PACKET", PF_PACKET);
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
3233 insint(d, "PACKET_HOST", PACKET_HOST);
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
3234 insint(d, "PACKET_BROADCAST", PACKET_BROADCAST);
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
3235 insint(d, "PACKET_MULTICAST", PACKET_MULTICAST);
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
3236 insint(d, "PACKET_OTHERHOST", PACKET_OTHERHOST);
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
3237 insint(d, "PACKET_OUTGOING", PACKET_OUTGOING);
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
3238 insint(d, "PACKET_LOOPBACK", PACKET_LOOPBACK);
3d4a7cd0bf17 SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16400
diff changeset
3239 insint(d, "PACKET_FASTROUTE", PACKET_FASTROUTE);
16947
b25131bc6ec7 RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents: 16472
diff changeset
3240 #endif
11182
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3241
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3242 /* Socket types */
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3243 insint(d, "SOCK_STREAM", SOCK_STREAM);
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3244 insint(d, "SOCK_DGRAM", SOCK_DGRAM);
8823
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
3245 #ifndef __BEOS__
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
3246 /* We have incomplete socket support. */
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3247 insint(d, "SOCK_RAW", SOCK_RAW);
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3248 insint(d, "SOCK_SEQPACKET", SOCK_SEQPACKET);
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3249 insint(d, "SOCK_RDM", SOCK_RDM);
8823
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8821
diff changeset
3250 #endif
2299
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3251
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3252 #ifdef SO_DEBUG
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3253 insint(d, "SO_DEBUG", SO_DEBUG);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3254 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3255 #ifdef SO_ACCEPTCONN
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3256 insint(d, "SO_ACCEPTCONN", SO_ACCEPTCONN);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3257 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3258 #ifdef SO_REUSEADDR
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3259 insint(d, "SO_REUSEADDR", SO_REUSEADDR);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3260 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3261 #ifdef SO_KEEPALIVE
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3262 insint(d, "SO_KEEPALIVE", SO_KEEPALIVE);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3263 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3264 #ifdef SO_DONTROUTE
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3265 insint(d, "SO_DONTROUTE", SO_DONTROUTE);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3266 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3267 #ifdef SO_BROADCAST
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3268 insint(d, "SO_BROADCAST", SO_BROADCAST);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3269 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3270 #ifdef SO_USELOOPBACK
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3271 insint(d, "SO_USELOOPBACK", SO_USELOOPBACK);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3272 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3273 #ifdef SO_LINGER
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3274 insint(d, "SO_LINGER", SO_LINGER);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3275 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3276 #ifdef SO_OOBINLINE
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3277 insint(d, "SO_OOBINLINE", SO_OOBINLINE);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3278 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3279 #ifdef SO_REUSEPORT
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3280 insint(d, "SO_REUSEPORT", SO_REUSEPORT);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3281 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3282 #ifdef SO_SNDBUF
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3283 insint(d, "SO_SNDBUF", SO_SNDBUF);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3284 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3285 #ifdef SO_RCVBUF
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3286 insint(d, "SO_RCVBUF", SO_RCVBUF);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3287 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3288 #ifdef SO_SNDLOWAT
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3289 insint(d, "SO_SNDLOWAT", SO_SNDLOWAT);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3290 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3291 #ifdef SO_RCVLOWAT
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3292 insint(d, "SO_RCVLOWAT", SO_RCVLOWAT);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3293 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3294 #ifdef SO_SNDTIMEO
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3295 insint(d, "SO_SNDTIMEO", SO_SNDTIMEO);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3296 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3297 #ifdef SO_RCVTIMEO
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3298 insint(d, "SO_RCVTIMEO", SO_RCVTIMEO);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3299 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3300 #ifdef SO_ERROR
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3301 insint(d, "SO_ERROR", SO_ERROR);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3302 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3303 #ifdef SO_TYPE
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3304 insint(d, "SO_TYPE", SO_TYPE);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3305 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3306
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3307 /* Maximum number of connections for "listen" */
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3308 #ifdef SOMAXCONN
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3309 insint(d, "SOMAXCONN", SOMAXCONN);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3310 #else
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3311 insint(d, "SOMAXCONN", 5); /* Common value */
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3312 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3313
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3314 /* Flags for send, recv */
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3315 #ifdef MSG_OOB
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3316 insint(d, "MSG_OOB", MSG_OOB);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3317 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3318 #ifdef MSG_PEEK
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3319 insint(d, "MSG_PEEK", MSG_PEEK);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3320 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3321 #ifdef MSG_DONTROUTE
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3322 insint(d, "MSG_DONTROUTE", MSG_DONTROUTE);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3323 #endif
12492
1725e802e3eb Patch by Charles G Waldman:
Guido van Rossum <guido@python.org>
parents: 12479
diff changeset
3324 #ifdef MSG_DONTWAIT
12493
04cfa1341a50 Fix typo in last patch -- the symbol's name is MSG_DONWAIT, not
Guido van Rossum <guido@python.org>
parents: 12492
diff changeset
3325 insint(d, "MSG_DONTWAIT", MSG_DONTWAIT);
12492
1725e802e3eb Patch by Charles G Waldman:
Guido van Rossum <guido@python.org>
parents: 12479
diff changeset
3326 #endif
2299
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3327 #ifdef MSG_EOR
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3328 insint(d, "MSG_EOR", MSG_EOR);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3329 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3330 #ifdef MSG_TRUNC
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3331 insint(d, "MSG_TRUNC", MSG_TRUNC);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3332 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3333 #ifdef MSG_CTRUNC
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3334 insint(d, "MSG_CTRUNC", MSG_CTRUNC);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3335 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3336 #ifdef MSG_WAITALL
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3337 insint(d, "MSG_WAITALL", MSG_WAITALL);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3338 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3339 #ifdef MSG_BTAG
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3340 insint(d, "MSG_BTAG", MSG_BTAG);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3341 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3342 #ifdef MSG_ETAG
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3343 insint(d, "MSG_ETAG", MSG_ETAG);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3344 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3345
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3346 /* Protocol level and numbers, usable for [gs]etsockopt */
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3347 #ifdef SOL_SOCKET
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3348 insint(d, "SOL_SOCKET", SOL_SOCKET);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3349 #endif
11182
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3350 #ifdef SOL_IP
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3351 insint(d, "SOL_IP", SOL_IP);
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3352 #else
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3353 insint(d, "SOL_IP", 0);
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3354 #endif
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3355 #ifdef SOL_IPX
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3356 insint(d, "SOL_IPX", SOL_IPX);
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3357 #endif
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3358 #ifdef SOL_AX25
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3359 insint(d, "SOL_AX25", SOL_AX25);
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3360 #endif
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3361 #ifdef SOL_ATALK
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3362 insint(d, "SOL_ATALK", SOL_ATALK);
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3363 #endif
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3364 #ifdef SOL_NETROM
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3365 insint(d, "SOL_NETROM", SOL_NETROM);
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3366 #endif
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3367 #ifdef SOL_ROSE
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3368 insint(d, "SOL_ROSE", SOL_ROSE);
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3369 #endif
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3370 #ifdef SOL_TCP
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3371 insint(d, "SOL_TCP", SOL_TCP);
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3372 #else
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3373 insint(d, "SOL_TCP", 6);
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3374 #endif
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3375 #ifdef SOL_UDP
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3376 insint(d, "SOL_UDP", SOL_UDP);
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3377 #else
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3378 insint(d, "SOL_UDP", 17);
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3379 #endif
2299
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3380 #ifdef IPPROTO_IP
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3381 insint(d, "IPPROTO_IP", IPPROTO_IP);
8439
534602746079 Some systems (e.g. Linux) use enums for some symbols (like IPPROTO_IP)
Guido van Rossum <guido@python.org>
parents: 7942
diff changeset
3382 #else
534602746079 Some systems (e.g. Linux) use enums for some symbols (like IPPROTO_IP)
Guido van Rossum <guido@python.org>
parents: 7942
diff changeset
3383 insint(d, "IPPROTO_IP", 0);
2299
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3384 #endif
18997
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3385 #ifdef IPPROTO_HOPOPTS
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3386 insint(d, "IPPROTO_HOPOPTS", IPPROTO_HOPOPTS);
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3387 #endif
2299
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3388 #ifdef IPPROTO_ICMP
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3389 insint(d, "IPPROTO_ICMP", IPPROTO_ICMP);
8439
534602746079 Some systems (e.g. Linux) use enums for some symbols (like IPPROTO_IP)
Guido van Rossum <guido@python.org>
parents: 7942
diff changeset
3390 #else
534602746079 Some systems (e.g. Linux) use enums for some symbols (like IPPROTO_IP)
Guido van Rossum <guido@python.org>
parents: 7942
diff changeset
3391 insint(d, "IPPROTO_ICMP", 1);
2299
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3392 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3393 #ifdef IPPROTO_IGMP
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3394 insint(d, "IPPROTO_IGMP", IPPROTO_IGMP);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3395 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3396 #ifdef IPPROTO_GGP
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3397 insint(d, "IPPROTO_GGP", IPPROTO_GGP);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3398 #endif
18997
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3399 #ifdef IPPROTO_IPV4
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3400 insint(d, "IPPROTO_IPV4", IPPROTO_IPV4);
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3401 #endif
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3402 #ifdef IPPROTO_IPIP
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3403 insint(d, "IPPROTO_IPIP", IPPROTO_IPIP);
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3404 #endif
2299
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3405 #ifdef IPPROTO_TCP
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3406 insint(d, "IPPROTO_TCP", IPPROTO_TCP);
8439
534602746079 Some systems (e.g. Linux) use enums for some symbols (like IPPROTO_IP)
Guido van Rossum <guido@python.org>
parents: 7942
diff changeset
3407 #else
534602746079 Some systems (e.g. Linux) use enums for some symbols (like IPPROTO_IP)
Guido van Rossum <guido@python.org>
parents: 7942
diff changeset
3408 insint(d, "IPPROTO_TCP", 6);
2299
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3409 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3410 #ifdef IPPROTO_EGP
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3411 insint(d, "IPPROTO_EGP", IPPROTO_EGP);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3412 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3413 #ifdef IPPROTO_PUP
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3414 insint(d, "IPPROTO_PUP", IPPROTO_PUP);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3415 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3416 #ifdef IPPROTO_UDP
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3417 insint(d, "IPPROTO_UDP", IPPROTO_UDP);
8439
534602746079 Some systems (e.g. Linux) use enums for some symbols (like IPPROTO_IP)
Guido van Rossum <guido@python.org>
parents: 7942
diff changeset
3418 #else
534602746079 Some systems (e.g. Linux) use enums for some symbols (like IPPROTO_IP)
Guido van Rossum <guido@python.org>
parents: 7942
diff changeset
3419 insint(d, "IPPROTO_UDP", 17);
2299
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3420 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3421 #ifdef IPPROTO_IDP
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3422 insint(d, "IPPROTO_IDP", IPPROTO_IDP);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3423 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3424 #ifdef IPPROTO_HELLO
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3425 insint(d, "IPPROTO_HELLO", IPPROTO_HELLO);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3426 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3427 #ifdef IPPROTO_ND
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3428 insint(d, "IPPROTO_ND", IPPROTO_ND);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3429 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3430 #ifdef IPPROTO_TP
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3431 insint(d, "IPPROTO_TP", IPPROTO_TP);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3432 #endif
18997
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3433 #ifdef IPPROTO_IPV6
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3434 insint(d, "IPPROTO_IPV6", IPPROTO_IPV6);
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3435 #endif
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3436 #ifdef IPPROTO_ROUTING
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3437 insint(d, "IPPROTO_ROUTING", IPPROTO_ROUTING);
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3438 #endif
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3439 #ifdef IPPROTO_FRAGMENT
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3440 insint(d, "IPPROTO_FRAGMENT", IPPROTO_FRAGMENT);
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3441 #endif
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3442 #ifdef IPPROTO_RSVP
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3443 insint(d, "IPPROTO_RSVP", IPPROTO_RSVP);
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3444 #endif
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3445 #ifdef IPPROTO_GRE
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3446 insint(d, "IPPROTO_GRE", IPPROTO_GRE);
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3447 #endif
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3448 #ifdef IPPROTO_ESP
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3449 insint(d, "IPPROTO_ESP", IPPROTO_ESP);
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3450 #endif
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3451 #ifdef IPPROTO_AH
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3452 insint(d, "IPPROTO_AH", IPPROTO_AH);
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3453 #endif
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3454 #ifdef IPPROTO_MOBILE
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3455 insint(d, "IPPROTO_MOBILE", IPPROTO_MOBILE);
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3456 #endif
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3457 #ifdef IPPROTO_ICMPV6
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3458 insint(d, "IPPROTO_ICMPV6", IPPROTO_ICMPV6);
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3459 #endif
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3460 #ifdef IPPROTO_NONE
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3461 insint(d, "IPPROTO_NONE", IPPROTO_NONE);
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3462 #endif
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3463 #ifdef IPPROTO_DSTOPTS
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3464 insint(d, "IPPROTO_DSTOPTS", IPPROTO_DSTOPTS);
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3465 #endif
2299
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3466 #ifdef IPPROTO_XTP
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3467 insint(d, "IPPROTO_XTP", IPPROTO_XTP);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3468 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3469 #ifdef IPPROTO_EON
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3470 insint(d, "IPPROTO_EON", IPPROTO_EON);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3471 #endif
18997
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3472 #ifdef IPPROTO_PIM
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3473 insint(d, "IPPROTO_PIM", IPPROTO_PIM);
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3474 #endif
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3475 #ifdef IPPROTO_IPCOMP
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3476 insint(d, "IPPROTO_IPCOMP", IPPROTO_IPCOMP);
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3477 #endif
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3478 #ifdef IPPROTO_VRRP
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3479 insint(d, "IPPROTO_VRRP", IPPROTO_VRRP);
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3480 #endif
2299
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3481 #ifdef IPPROTO_BIP
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3482 insint(d, "IPPROTO_BIP", IPPROTO_BIP);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3483 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3484 /**/
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3485 #ifdef IPPROTO_RAW
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3486 insint(d, "IPPROTO_RAW", IPPROTO_RAW);
8439
534602746079 Some systems (e.g. Linux) use enums for some symbols (like IPPROTO_IP)
Guido van Rossum <guido@python.org>
parents: 7942
diff changeset
3487 #else
534602746079 Some systems (e.g. Linux) use enums for some symbols (like IPPROTO_IP)
Guido van Rossum <guido@python.org>
parents: 7942
diff changeset
3488 insint(d, "IPPROTO_RAW", 255);
2299
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3489 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3490 #ifdef IPPROTO_MAX
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3491 insint(d, "IPPROTO_MAX", IPPROTO_MAX);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3492 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3493
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3494 /* Some port configuration */
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3495 #ifdef IPPORT_RESERVED
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3496 insint(d, "IPPORT_RESERVED", IPPORT_RESERVED);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3497 #else
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3498 insint(d, "IPPORT_RESERVED", 1024);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3499 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3500 #ifdef IPPORT_USERRESERVED
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3501 insint(d, "IPPORT_USERRESERVED", IPPORT_USERRESERVED);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3502 #else
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3503 insint(d, "IPPORT_USERRESERVED", 5000);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3504 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3505
2369
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3506 /* Some reserved IP v.4 addresses */
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3507 #ifdef INADDR_ANY
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3508 insint(d, "INADDR_ANY", INADDR_ANY);
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3509 #else
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3510 insint(d, "INADDR_ANY", 0x00000000);
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3511 #endif
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3512 #ifdef INADDR_BROADCAST
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3513 insint(d, "INADDR_BROADCAST", INADDR_BROADCAST);
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3514 #else
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3515 insint(d, "INADDR_BROADCAST", 0xffffffff);
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3516 #endif
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3517 #ifdef INADDR_LOOPBACK
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3518 insint(d, "INADDR_LOOPBACK", INADDR_LOOPBACK);
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3519 #else
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3520 insint(d, "INADDR_LOOPBACK", 0x7F000001);
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3521 #endif
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3522 #ifdef INADDR_UNSPEC_GROUP
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3523 insint(d, "INADDR_UNSPEC_GROUP", INADDR_UNSPEC_GROUP);
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3524 #else
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3525 insint(d, "INADDR_UNSPEC_GROUP", 0xe0000000);
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3526 #endif
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3527 #ifdef INADDR_ALLHOSTS_GROUP
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3528 insint(d, "INADDR_ALLHOSTS_GROUP", INADDR_ALLHOSTS_GROUP);
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3529 #else
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3530 insint(d, "INADDR_ALLHOSTS_GROUP", 0xe0000001);
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3531 #endif
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3532 #ifdef INADDR_MAX_LOCAL_GROUP
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3533 insint(d, "INADDR_MAX_LOCAL_GROUP", INADDR_MAX_LOCAL_GROUP);
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3534 #else
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3535 insint(d, "INADDR_MAX_LOCAL_GROUP", 0xe00000ff);
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3536 #endif
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3537 #ifdef INADDR_NONE
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3538 insint(d, "INADDR_NONE", INADDR_NONE);
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3539 #else
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3540 insint(d, "INADDR_NONE", 0xffffffff);
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3541 #endif
ba1b76c09041 add INADDR_* symbols
Guido van Rossum <guido@python.org>
parents: 2299
diff changeset
3542
18997
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3543 /* IPv4 [gs]etsockopt options */
2299
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3544 #ifdef IP_OPTIONS
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3545 insint(d, "IP_OPTIONS", IP_OPTIONS);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3546 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3547 #ifdef IP_HDRINCL
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3548 insint(d, "IP_HDRINCL", IP_HDRINCL);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3549 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3550 #ifdef IP_TOS
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3551 insint(d, "IP_TOS", IP_TOS);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3552 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3553 #ifdef IP_TTL
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3554 insint(d, "IP_TTL", IP_TTL);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3555 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3556 #ifdef IP_RECVOPTS
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3557 insint(d, "IP_RECVOPTS", IP_RECVOPTS);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3558 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3559 #ifdef IP_RECVRETOPTS
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3560 insint(d, "IP_RECVRETOPTS", IP_RECVRETOPTS);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3561 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3562 #ifdef IP_RECVDSTADDR
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3563 insint(d, "IP_RECVDSTADDR", IP_RECVDSTADDR);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3564 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3565 #ifdef IP_RETOPTS
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3566 insint(d, "IP_RETOPTS", IP_RETOPTS);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3567 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3568 #ifdef IP_MULTICAST_IF
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3569 insint(d, "IP_MULTICAST_IF", IP_MULTICAST_IF);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3570 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3571 #ifdef IP_MULTICAST_TTL
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3572 insint(d, "IP_MULTICAST_TTL", IP_MULTICAST_TTL);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3573 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3574 #ifdef IP_MULTICAST_LOOP
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3575 insint(d, "IP_MULTICAST_LOOP", IP_MULTICAST_LOOP);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3576 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3577 #ifdef IP_ADD_MEMBERSHIP
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3578 insint(d, "IP_ADD_MEMBERSHIP", IP_ADD_MEMBERSHIP);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3579 #endif
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3580 #ifdef IP_DROP_MEMBERSHIP
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3581 insint(d, "IP_DROP_MEMBERSHIP", IP_DROP_MEMBERSHIP);
990099ed7810 add socket related constants
Guido van Rossum <guido@python.org>
parents: 2123
diff changeset
3582 #endif
11182
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3583 #ifdef IP_DEFAULT_MULTICAST_TTL
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3584 insint(d, "IP_DEFAULT_MULTICAST_TTL", IP_DEFAULT_MULTICAST_TTL);
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3585 #endif
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3586 #ifdef IP_DEFAULT_MULTICAST_LOOP
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3587 insint(d, "IP_DEFAULT_MULTICAST_LOOP", IP_DEFAULT_MULTICAST_LOOP);
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3588 #endif
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3589 #ifdef IP_MAX_MEMBERSHIPS
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3590 insint(d, "IP_MAX_MEMBERSHIPS", IP_MAX_MEMBERSHIPS);
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3591 #endif
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3592
18997
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3593 /* IPv6 [gs]etsockopt options, defined in RFC2553 */
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3594 #ifdef IPV6_JOIN_GROUP
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3595 insint(d, "IPV6_JOIN_GROUP", IPV6_JOIN_GROUP);
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3596 #endif
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3597 #ifdef IPV6_LEAVE_GROUP
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3598 insint(d, "IPV6_LEAVE_GROUP", IPV6_LEAVE_GROUP);
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3599 #endif
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3600 #ifdef IPV6_MULTICAST_HOPS
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3601 insint(d, "IPV6_MULTICAST_HOPS", IPV6_MULTICAST_HOPS);
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3602 #endif
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3603 #ifdef IPV6_MULTICAST_IF
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3604 insint(d, "IPV6_MULTICAST_IF", IPV6_MULTICAST_IF);
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3605 #endif
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3606 #ifdef IPV6_MULTICAST_LOOP
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3607 insint(d, "IPV6_MULTICAST_LOOP", IPV6_MULTICAST_LOOP);
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3608 #endif
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3609 #ifdef IPV6_UNICAST_HOPS
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3610 insint(d, "IPV6_UNICAST_HOPS", IPV6_UNICAST_HOPS);
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3611 #endif
9fc4a5abb369 Add more constants. Contributed by itojun.
Martin v. Löwis <martin@v.loewis.de>
parents: 18996
diff changeset
3612
11182
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3613 /* TCP options */
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3614 #ifdef TCP_NODELAY
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3615 insint(d, "TCP_NODELAY", TCP_NODELAY);
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3616 #endif
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3617 #ifdef TCP_MAXSEG
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3618 insint(d, "TCP_MAXSEG", TCP_MAXSEG);
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3619 #endif
21575
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3620 #ifdef TCP_CORK
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3621 insint(d, "TCP_CORK", TCP_CORK);
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3622 #endif
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3623 #ifdef TCP_KEEPIDLE
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3624 insint(d, "TCP_KEEPIDLE", TCP_KEEPIDLE);
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3625 #endif
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3626 #ifdef TCP_KEEPINTVL
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3627 insint(d, "TCP_KEEPINTVL", TCP_KEEPINTVL);
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3628 #endif
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3629 #ifdef TCP_KEEPCNT
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3630 insint(d, "TCP_KEEPCNT", TCP_KEEPCNT);
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3631 #endif
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3632 #ifdef TCP_SYNCNT
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3633 insint(d, "TCP_SYNCNT", TCP_SYNCNT);
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3634 #endif
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3635 #ifdef TCP_LINGER2
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3636 insint(d, "TCP_LINGER2", TCP_LINGER2);
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3637 #endif
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3638 #ifdef TCP_DEFER_ACCEPT
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3639 insint(d, "TCP_DEFER_ACCEPT", TCP_DEFER_ACCEPT);
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3640 #endif
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3641 #ifdef TCP_WINDOW_CLAMP
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3642 insint(d, "TCP_WINDOW_CLAMP", TCP_WINDOW_CLAMP);
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3643 #endif
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3644 #ifdef TCP_INFO
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3645 insint(d, "TCP_INFO", TCP_INFO);
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3646 #endif
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3647 #ifdef TCP_QUICKACK
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3648 insint(d, "TCP_QUICKACK", TCP_QUICKACK);
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3649 #endif
8d51c7539719 Backport loewis' checkin of version 1.201:
Michael W. Hudson <mwh@python.net>
parents: 21128
diff changeset
3650
11182
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3651
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3652 /* IPX options */
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3653 #ifdef IPX_TYPE
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3654 insint(d, "IPX_TYPE", IPX_TYPE);
35e0d03f2b02 Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents: 10579
diff changeset
3655 #endif
7942
ee2aaa2f722a Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents: 6718
diff changeset
3656
18794
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3657 /* get{addr,name}info parameters */
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3658 #ifdef EAI_ADDRFAMILY
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3659 insint(d, "EAI_ADDRFAMILY", EAI_ADDRFAMILY);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3660 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3661 #ifdef EAI_AGAIN
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3662 insint(d, "EAI_AGAIN", EAI_AGAIN);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3663 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3664 #ifdef EAI_BADFLAGS
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3665 insint(d, "EAI_BADFLAGS", EAI_BADFLAGS);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3666 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3667 #ifdef EAI_FAIL
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3668 insint(d, "EAI_FAIL", EAI_FAIL);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3669 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3670 #ifdef EAI_FAMILY
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3671 insint(d, "EAI_FAMILY", EAI_FAMILY);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3672 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3673 #ifdef EAI_MEMORY
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3674 insint(d, "EAI_MEMORY", EAI_MEMORY);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3675 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3676 #ifdef EAI_NODATA
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3677 insint(d, "EAI_NODATA", EAI_NODATA);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3678 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3679 #ifdef EAI_NONAME
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3680 insint(d, "EAI_NONAME", EAI_NONAME);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3681 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3682 #ifdef EAI_SERVICE
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3683 insint(d, "EAI_SERVICE", EAI_SERVICE);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3684 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3685 #ifdef EAI_SOCKTYPE
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3686 insint(d, "EAI_SOCKTYPE", EAI_SOCKTYPE);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3687 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3688 #ifdef EAI_SYSTEM
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3689 insint(d, "EAI_SYSTEM", EAI_SYSTEM);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3690 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3691 #ifdef EAI_BADHINTS
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3692 insint(d, "EAI_BADHINTS", EAI_BADHINTS);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3693 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3694 #ifdef EAI_PROTOCOL
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3695 insint(d, "EAI_PROTOCOL", EAI_PROTOCOL);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3696 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3697 #ifdef EAI_MAX
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3698 insint(d, "EAI_MAX", EAI_MAX);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3699 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3700 #ifdef AI_PASSIVE
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3701 insint(d, "AI_PASSIVE", AI_PASSIVE);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3702 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3703 #ifdef AI_CANONNAME
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3704 insint(d, "AI_CANONNAME", AI_CANONNAME);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3705 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3706 #ifdef AI_NUMERICHOST
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3707 insint(d, "AI_NUMERICHOST", AI_NUMERICHOST);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3708 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3709 #ifdef AI_MASK
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3710 insint(d, "AI_MASK", AI_MASK);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3711 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3712 #ifdef AI_ALL
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3713 insint(d, "AI_ALL", AI_ALL);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3714 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3715 #ifdef AI_V4MAPPED_CFG
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3716 insint(d, "AI_V4MAPPED_CFG", AI_V4MAPPED_CFG);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3717 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3718 #ifdef AI_ADDRCONFIG
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3719 insint(d, "AI_ADDRCONFIG", AI_ADDRCONFIG);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3720 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3721 #ifdef AI_V4MAPPED
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3722 insint(d, "AI_V4MAPPED", AI_V4MAPPED);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3723 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3724 #ifdef AI_DEFAULT
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3725 insint(d, "AI_DEFAULT", AI_DEFAULT);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3726 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3727 #ifdef NI_MAXHOST
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3728 insint(d, "NI_MAXHOST", NI_MAXHOST);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3729 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3730 #ifdef NI_MAXSERV
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3731 insint(d, "NI_MAXSERV", NI_MAXSERV);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3732 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3733 #ifdef NI_NOFQDN
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3734 insint(d, "NI_NOFQDN", NI_NOFQDN);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3735 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3736 #ifdef NI_NUMERICHOST
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3737 insint(d, "NI_NUMERICHOST", NI_NUMERICHOST);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3738 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3739 #ifdef NI_NAMEREQD
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3740 insint(d, "NI_NAMEREQD", NI_NAMEREQD);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3741 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3742 #ifdef NI_NUMERICSERV
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3743 insint(d, "NI_NUMERICSERV", NI_NUMERICSERV);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3744 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3745 #ifdef NI_DGRAM
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3746 insint(d, "NI_DGRAM", NI_DGRAM);
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3747 #endif
4d0ea4c2386d Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 18790
diff changeset
3748
7942
ee2aaa2f722a Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents: 6718
diff changeset
3749 /* Initialize gethostbyname lock */
10442
9184c9e108f9 Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents: 10441
diff changeset
3750 #ifdef USE_GETHOSTBYNAME_LOCK
9679
877d23bd5bdc Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents: 9588
diff changeset
3751 gethostbyname_lock = PyThread_allocate_lock();
7942
ee2aaa2f722a Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents: 6718
diff changeset
3752 #endif
294
8938b3132caa Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3753 }
18262
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3754
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3755 /* Simplistic emulation code for inet_pton that only works for IPv4 */
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3756 #ifndef HAVE_INET_PTON
18264
3d9164d95e78 Fix typos in inet_pton/inet_ntop.
Martin v. Löwis <martin@v.loewis.de>
parents: 18263
diff changeset
3757 int
18790
7cd22bf56d7b Silence warnings in MSVC++: hide unused variables, add constness back to
Martin v. Löwis <martin@v.loewis.de>
parents: 18753
diff changeset
3758 inet_pton (int af, const char *src, void *dst)
18262
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3759 {
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3760 if(af == AF_INET){
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3761 long packed_addr;
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3762 #ifdef USE_GUSI1
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3763 packed_addr = (long)inet_addr(src).s_addr;
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3764 #else
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3765 packed_addr = inet_addr(src);
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3766 #endif
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3767 if (packed_addr == INADDR_NONE)
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3768 return 0;
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3769 memcpy(dst, &packed_addr, 4);
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3770 return 1;
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3771 }
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3772 /* Should set errno to EAFNOSUPPORT */
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3773 return -1;
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3774 }
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3775
18790
7cd22bf56d7b Silence warnings in MSVC++: hide unused variables, add constness back to
Martin v. Löwis <martin@v.loewis.de>
parents: 18753
diff changeset
3776 const char *
7cd22bf56d7b Silence warnings in MSVC++: hide unused variables, add constness back to
Martin v. Löwis <martin@v.loewis.de>
parents: 18753
diff changeset
3777 inet_ntop(int af, const void *src, char *dst, socklen_t size)
18262
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3778 {
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3779 if (af == AF_INET) {
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3780 struct in_addr packed_addr;
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3781 if (size < 16)
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3782 /* Should set errno to ENOSPC. */
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3783 return NULL;
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3784 memcpy(&packed_addr, src, sizeof(packed_addr));
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3785 return strncpy(dst, inet_ntoa(packed_addr), size);
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3786 }
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3787 /* Should set errno to EAFNOSUPPORT */
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3788 return NULL;
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3789 }
6b0a8157be3b Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents: 18253
diff changeset
3790 #endif