annotate Modules/socketmodule.h @ 80661:94de77bd0b4b 2.7

Issue #16194: document imp.load_dynamic problems when read several extension modules from the same binary object file.
author Andrew Svetlov <andrew.svetlov@gmail.com>
date Thu, 29 Nov 2012 19:51:28 +0200
parents b36cb4602e21
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21959
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1 /* Socket module header file */
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
2
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
3 /* Includes needed for the sockaddr_* symbols below */
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
4 #ifndef MS_WINDOWS
28949
ac487a7f7f2c Patch #708495: Port more stuff to OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents: 23815
diff changeset
5 #ifdef __VMS
ac487a7f7f2c Patch #708495: Port more stuff to OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents: 23815
diff changeset
6 # include <socket.h>
ac487a7f7f2c Patch #708495: Port more stuff to OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents: 23815
diff changeset
7 # else
ac487a7f7f2c Patch #708495: Port more stuff to OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents: 23815
diff changeset
8 # include <sys/socket.h>
ac487a7f7f2c Patch #708495: Port more stuff to OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents: 23815
diff changeset
9 # endif
21959
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
10 # include <netinet/in.h>
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
11 # if !(defined(__BEOS__) || defined(__CYGWIN__) || (defined(PYOS_OS2) && defined(PYCC_VACPP)))
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
12 # include <netinet/tcp.h>
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
13 # endif
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
14
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
15 #else /* MS_WINDOWS */
22096
9e5ff6747437 Patch #520062: Support IPv6 with VC.NET.
Martin v. Löwis <martin@v.loewis.de>
parents: 22041
diff changeset
16 # include <winsock2.h>
9e5ff6747437 Patch #520062: Support IPv6 with VC.NET.
Martin v. Löwis <martin@v.loewis.de>
parents: 22041
diff changeset
17 # include <ws2tcpip.h>
47666
fcfe10f3dc14 Restore support for Microsoft VC6 compiler.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 44561
diff changeset
18 /* VC6 is shipped with old platform headers, and does not have MSTcpIP.h
fcfe10f3dc14 Restore support for Microsoft VC6 compiler.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 44561
diff changeset
19 * Separate SDKs have all the functions we want, but older ones don't have
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
20 * any version information.
47714
e9c935cd7888 on windows, r64214 broke compilation with some recent SDKs,
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47666
diff changeset
21 * I use SIO_GET_MULTICAST_FILTER to detect a decent SDK.
47666
fcfe10f3dc14 Restore support for Microsoft VC6 compiler.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 44561
diff changeset
22 */
47714
e9c935cd7888 on windows, r64214 broke compilation with some recent SDKs,
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47666
diff changeset
23 # ifdef SIO_GET_MULTICAST_FILTER
47666
fcfe10f3dc14 Restore support for Microsoft VC6 compiler.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 44561
diff changeset
24 # include <MSTcpIP.h> /* for SIO_RCVALL */
fcfe10f3dc14 Restore support for Microsoft VC6 compiler.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 44561
diff changeset
25 # define HAVE_ADDRINFO
fcfe10f3dc14 Restore support for Microsoft VC6 compiler.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 44561
diff changeset
26 # define HAVE_SOCKADDR_STORAGE
fcfe10f3dc14 Restore support for Microsoft VC6 compiler.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 44561
diff changeset
27 # define HAVE_GETADDRINFO
fcfe10f3dc14 Restore support for Microsoft VC6 compiler.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 44561
diff changeset
28 # define HAVE_GETNAMEINFO
fcfe10f3dc14 Restore support for Microsoft VC6 compiler.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 44561
diff changeset
29 # define ENABLE_IPV6
fcfe10f3dc14 Restore support for Microsoft VC6 compiler.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 44561
diff changeset
30 # else
fcfe10f3dc14 Restore support for Microsoft VC6 compiler.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 44561
diff changeset
31 typedef int socklen_t;
fcfe10f3dc14 Restore support for Microsoft VC6 compiler.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 44561
diff changeset
32 # endif /* IPPROTO_IPV6 */
fcfe10f3dc14 Restore support for Microsoft VC6 compiler.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 44561
diff changeset
33 #endif /* MS_WINDOWS */
21959
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
34
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
35 #ifdef HAVE_SYS_UN_H
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
36 # include <sys/un.h>
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
37 #else
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
38 # undef AF_UNIX
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
39 #endif
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
40
36286
ae4480935016 Patch #1103116: AF_NETLINK sockets basic support.
Martin v. Löwis <martin@v.loewis.de>
parents: 35551
diff changeset
41 #ifdef HAVE_LINUX_NETLINK_H
36298
9eeaa33f9640 Get socketmodule to build after adding netlink support.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36286
diff changeset
42 # ifdef HAVE_ASM_TYPES_H
9eeaa33f9640 Get socketmodule to build after adding netlink support.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36286
diff changeset
43 # include <asm/types.h>
9eeaa33f9640 Get socketmodule to build after adding netlink support.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36286
diff changeset
44 # endif
36286
ae4480935016 Patch #1103116: AF_NETLINK sockets basic support.
Martin v. Löwis <martin@v.loewis.de>
parents: 35551
diff changeset
45 # include <linux/netlink.h>
ae4480935016 Patch #1103116: AF_NETLINK sockets basic support.
Martin v. Löwis <martin@v.loewis.de>
parents: 35551
diff changeset
46 #else
ae4480935016 Patch #1103116: AF_NETLINK sockets basic support.
Martin v. Löwis <martin@v.loewis.de>
parents: 35551
diff changeset
47 # undef AF_NETLINK
ae4480935016 Patch #1103116: AF_NETLINK sockets basic support.
Martin v. Löwis <martin@v.loewis.de>
parents: 35551
diff changeset
48 #endif
ae4480935016 Patch #1103116: AF_NETLINK sockets basic support.
Martin v. Löwis <martin@v.loewis.de>
parents: 35551
diff changeset
49
31441
493707692671 Patch #874083: Bluetooth support for socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 28949
diff changeset
50 #ifdef HAVE_BLUETOOTH_BLUETOOTH_H
493707692671 Patch #874083: Bluetooth support for socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 28949
diff changeset
51 #include <bluetooth/bluetooth.h>
493707692671 Patch #874083: Bluetooth support for socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 28949
diff changeset
52 #include <bluetooth/rfcomm.h>
493707692671 Patch #874083: Bluetooth support for socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 28949
diff changeset
53 #include <bluetooth/l2cap.h>
493707692671 Patch #874083: Bluetooth support for socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 28949
diff changeset
54 #include <bluetooth/sco.h>
40842
90e22fea8363 Patch #1432399: Add HCI sockets.
Martin v. Löwis <martin@v.loewis.de>
parents: 40416
diff changeset
55 #include <bluetooth/hci.h>
31441
493707692671 Patch #874083: Bluetooth support for socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 28949
diff changeset
56 #endif
493707692671 Patch #874083: Bluetooth support for socket module.
Martin v. Löwis <martin@v.loewis.de>
parents: 28949
diff changeset
57
31444
a282801b06b6 Add FreeBSD support for bluetooth sockets. (SF Patch #888148)
Hye-Shik Chang <hyeshik@gmail.com>
parents: 31441
diff changeset
58 #ifdef HAVE_BLUETOOTH_H
a282801b06b6 Add FreeBSD support for bluetooth sockets. (SF Patch #888148)
Hye-Shik Chang <hyeshik@gmail.com>
parents: 31441
diff changeset
59 #include <bluetooth.h>
a282801b06b6 Add FreeBSD support for bluetooth sockets. (SF Patch #888148)
Hye-Shik Chang <hyeshik@gmail.com>
parents: 31441
diff changeset
60 #endif
a282801b06b6 Add FreeBSD support for bluetooth sockets. (SF Patch #888148)
Hye-Shik Chang <hyeshik@gmail.com>
parents: 31441
diff changeset
61
21959
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
62 #ifdef HAVE_NETPACKET_PACKET_H
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
63 # include <sys/ioctl.h>
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
64 # include <net/if.h>
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
65 # include <netpacket/packet.h>
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
66 #endif
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
67
44561
ac51cfe5c5c6 Issue #1646: Make socket support TIPC. The socket module now has support
Christian Heimes <christian@cheimes.de>
parents: 44474
diff changeset
68 #ifdef HAVE_LINUX_TIPC_H
ac51cfe5c5c6 Issue #1646: Make socket support TIPC. The socket module now has support
Christian Heimes <christian@cheimes.de>
parents: 44474
diff changeset
69 # include <linux/tipc.h>
ac51cfe5c5c6 Issue #1646: Make socket support TIPC. The socket module now has support
Christian Heimes <christian@cheimes.de>
parents: 44474
diff changeset
70 #endif
ac51cfe5c5c6 Issue #1646: Make socket support TIPC. The socket module now has support
Christian Heimes <christian@cheimes.de>
parents: 44474
diff changeset
71
21959
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
72 #ifndef Py__SOCKET_H
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
73 #define Py__SOCKET_H
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
74 #ifdef __cplusplus
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
75 extern "C" {
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
76 #endif
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
77
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
78 /* Python module and C API name */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
79 #define PySocket_MODULE_NAME "_socket"
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
80 #define PySocket_CAPI_NAME "CAPI"
59998
d11fbc796499 Backported PyCapsule from 3.1, and converted most uses of
Larry Hastings <larry@hastings.org>
parents: 47714
diff changeset
81 #define PySocket_CAPSULE_NAME (PySocket_MODULE_NAME "." PySocket_CAPI_NAME)
21959
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
82
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
83 /* Abstract the socket file descriptor type */
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
84 #ifdef MS_WINDOWS
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
85 typedef SOCKET SOCKET_T;
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
86 # ifdef MS_WIN64
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
87 # define SIZEOF_SOCKET_T 8
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
88 # else
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
89 # define SIZEOF_SOCKET_T 4
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
90 # endif
21959
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
91 #else
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
92 typedef int SOCKET_T;
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
93 # define SIZEOF_SOCKET_T SIZEOF_INT
21959
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
94 #endif
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
95
35551
57f630a9de26 - Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents: 31790
diff changeset
96 /* Socket address */
57f630a9de26 - Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents: 31790
diff changeset
97 typedef union sock_addr {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
98 struct sockaddr_in in;
35551
57f630a9de26 - Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents: 31790
diff changeset
99 #ifdef AF_UNIX
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
100 struct sockaddr_un un;
35551
57f630a9de26 - Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents: 31790
diff changeset
101 #endif
36286
ae4480935016 Patch #1103116: AF_NETLINK sockets basic support.
Martin v. Löwis <martin@v.loewis.de>
parents: 35551
diff changeset
102 #ifdef AF_NETLINK
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
103 struct sockaddr_nl nl;
36286
ae4480935016 Patch #1103116: AF_NETLINK sockets basic support.
Martin v. Löwis <martin@v.loewis.de>
parents: 35551
diff changeset
104 #endif
35551
57f630a9de26 - Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents: 31790
diff changeset
105 #ifdef ENABLE_IPV6
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
106 struct sockaddr_in6 in6;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
107 struct sockaddr_storage storage;
35551
57f630a9de26 - Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents: 31790
diff changeset
108 #endif
57f630a9de26 - Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents: 31790
diff changeset
109 #ifdef HAVE_BLUETOOTH_BLUETOOTH_H
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
110 struct sockaddr_l2 bt_l2;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
111 struct sockaddr_rc bt_rc;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
112 struct sockaddr_sco bt_sco;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
113 struct sockaddr_hci bt_hci;
35551
57f630a9de26 - Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents: 31790
diff changeset
114 #endif
57f630a9de26 - Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents: 31790
diff changeset
115 #ifdef HAVE_NETPACKET_PACKET_H
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
116 struct sockaddr_ll ll;
35551
57f630a9de26 - Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents: 31790
diff changeset
117 #endif
57f630a9de26 - Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents: 31790
diff changeset
118 } sock_addr_t;
57f630a9de26 - Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents: 31790
diff changeset
119
21959
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
120 /* The object holding a socket. It holds some extra information,
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
121 like the address family, which is used to decode socket address
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
122 arguments properly. */
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
123
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
124 typedef struct {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
125 PyObject_HEAD
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
126 SOCKET_T sock_fd; /* Socket file descriptor */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
127 int sock_family; /* Address family, e.g., AF_INET */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
128 int sock_type; /* Socket type, e.g., SOCK_STREAM */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
129 int sock_proto; /* Protocol type, usually 0 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
130 PyObject *(*errorhandler)(void); /* Error handler; checks
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
131 errno, returns NULL and
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
132 sets a Python exception */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
133 double sock_timeout; /* Operation timeout in seconds;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
134 0.0 means non-blocking */
21959
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
135 } PySocketSockObject;
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
136
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
137 /* --- C API ----------------------------------------------------*/
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
138
22041
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
139 /* Short explanation of what this C API export mechanism does
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
140 and how it works:
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
141
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
142 The _ssl module needs access to the type object defined in
22041
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
143 the _socket module. Since cross-DLL linking introduces a lot of
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
144 problems on many platforms, the "trick" is to wrap the
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
145 C API of a module in a struct which then gets exported to
59998
d11fbc796499 Backported PyCapsule from 3.1, and converted most uses of
Larry Hastings <larry@hastings.org>
parents: 47714
diff changeset
146 other modules via a PyCapsule.
22041
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
147
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
148 The code in socketmodule.c defines this struct (which currently
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
149 only contains the type object reference, but could very
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
150 well also include other C APIs needed by other modules)
59998
d11fbc796499 Backported PyCapsule from 3.1, and converted most uses of
Larry Hastings <larry@hastings.org>
parents: 47714
diff changeset
151 and exports it as PyCapsule via the module dictionary
22041
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
152 under the name "CAPI".
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
153
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
154 Other modules can now include the socketmodule.h file
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
155 which defines the needed C APIs to import and set up
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
156 a static copy of this struct in the importing module.
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
157
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
158 After initialization, the importing module can then
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
159 access the C APIs from the _socket module by simply
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
160 referring to the static struct, e.g.
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
161
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
162 Load _socket module and its C API; this sets up the global
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
163 PySocketModule:
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
164
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
165 if (PySocketModule_ImportModuleAndAPI())
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
166 return;
22041
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
167
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
168
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
169 Now use the C API as if it were defined in the using
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
170 module:
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
171
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
172 if (!PyArg_ParseTuple(args, "O!|zz:ssl",
22041
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
173
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
174 PySocketModule.Sock_Type,
22041
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
175
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
176 (PyObject*)&Sock,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
177 &key_file, &cert_file))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
178 return NULL;
22041
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
179
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
180 Support could easily be extended to export more C APIs/symbols
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
181 this way. Currently, only the type object is exported,
22041
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
182 other candidates would be socket constructors and socket
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
183 access functions.
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
184
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
185 */
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
186
21959
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
187 /* C API for usage by other Python modules */
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
188 typedef struct {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
189 PyTypeObject *Sock_Type;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
190 PyObject *error;
21969
72c95448ee4b For readability, switch to tab indents; was using a mix of tab indents,
Tim Peters <tim.peters@gmail.com>
parents: 21959
diff changeset
191 } PySocketModule_APIObject;
21959
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
192
21969
72c95448ee4b For readability, switch to tab indents; was using a mix of tab indents,
Tim Peters <tim.peters@gmail.com>
parents: 21959
diff changeset
193 /* XXX The net effect of the following appears to be to define a function
72c95448ee4b For readability, switch to tab indents; was using a mix of tab indents,
Tim Peters <tim.peters@gmail.com>
parents: 21959
diff changeset
194 XXX named PySocketModule_APIObject in _ssl.c. It's unclear why it isn't
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
195 XXX defined there directly.
22041
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
196
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
197 >>> It's defined here because other modules might also want to use
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
198 >>> the C API.
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
199
e0a288db022d Add documentation about how the inter-module linking works.
Marc-André Lemburg <mal@egenix.com>
parents: 21970
diff changeset
200 */
21959
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
201 #ifndef PySocket_BUILDING_SOCKET
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
202
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
203 /* --- C API ----------------------------------------------------*/
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
204
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
205 /* Interfacestructure to C API for other modules.
23724
db239ec307e0 Repair a comment.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
206 Call PySocketModule_ImportModuleAndAPI() to initialize this
21959
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
207 structure. After that usage is simple:
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
208
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
209 if (!PyArg_ParseTuple(args, "O!|zz:ssl",
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
210 &PySocketModule.Sock_Type, (PyObject*)&Sock,
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
211 &key_file, &cert_file))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
212 return NULL;
21959
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
213 ...
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
214 */
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
215
21969
72c95448ee4b For readability, switch to tab indents; was using a mix of tab indents,
Tim Peters <tim.peters@gmail.com>
parents: 21959
diff changeset
216 static
21959
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
217 PySocketModule_APIObject PySocketModule;
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
218
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
219 /* You *must* call this before using any of the functions in
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
220 PySocketModule and check its outcome; otherwise all accesses will
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
221 result in a segfault. Returns 0 on success. */
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
222
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
223 #ifndef DPRINTF
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
224 # define DPRINTF if (0) printf
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
225 #endif
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
226
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
227 static
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
228 int PySocketModule_ImportModuleAndAPI(void)
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
229 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
230 void *api;
21969
72c95448ee4b For readability, switch to tab indents; was using a mix of tab indents,
Tim Peters <tim.peters@gmail.com>
parents: 21959
diff changeset
231
59998
d11fbc796499 Backported PyCapsule from 3.1, and converted most uses of
Larry Hastings <larry@hastings.org>
parents: 47714
diff changeset
232 DPRINTF(" Loading capsule %s\n", PySocket_CAPSULE_NAME);
d11fbc796499 Backported PyCapsule from 3.1, and converted most uses of
Larry Hastings <larry@hastings.org>
parents: 47714
diff changeset
233 api = PyCapsule_Import(PySocket_CAPSULE_NAME, 1);
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
234 if (api == NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
235 goto onError;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
236 memcpy(&PySocketModule, api, sizeof(PySocketModule));
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
237 DPRINTF(" API object loaded and initialized.\n");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
238 return 0;
21969
72c95448ee4b For readability, switch to tab indents; was using a mix of tab indents,
Tim Peters <tim.peters@gmail.com>
parents: 21959
diff changeset
239
21959
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
240 onError:
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
241 DPRINTF(" not found.\n");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47714
diff changeset
242 return -1;
21959
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
243 }
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
244
21969
72c95448ee4b For readability, switch to tab indents; was using a mix of tab indents,
Tim Peters <tim.peters@gmail.com>
parents: 21959
diff changeset
245 #endif /* !PySocket_BUILDING_SOCKET */
21959
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
246
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
247 #ifdef __cplusplus
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
248 }
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
249 #endif
3957d155f8c5 Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
250 #endif /* !Py__SOCKET_H */