You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

345 lines
8.2 KiB

Merged revisions 53623-53858 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r53624 | peter.astrand | 2007-02-02 20:06:36 +0100 (Fri, 02 Feb 2007) | 1 line We had several if statements checking the value of a fd. This is unsafe, since valid fds might be zero. We should check for not None instead. ........ r53635 | kurt.kaiser | 2007-02-05 07:03:18 +0100 (Mon, 05 Feb 2007) | 2 lines Add 'raw' support to configHandler. Patch 1650174 Tal Einat. ........ r53641 | kurt.kaiser | 2007-02-06 00:02:16 +0100 (Tue, 06 Feb 2007) | 5 lines 1. Calltips now 'handle' tuples in the argument list (display '<tuple>' :) Suggested solution by Christos Georgiou, Bug 791968. 2. Clean up tests, were not failing when they should have been. 4. Remove some camelcase and an unneeded try/except block. ........ r53644 | kurt.kaiser | 2007-02-06 04:21:40 +0100 (Tue, 06 Feb 2007) | 2 lines Clean up ModifiedInterpreter.runcode() structure ........ r53646 | peter.astrand | 2007-02-06 16:37:50 +0100 (Tue, 06 Feb 2007) | 1 line Applied patch 1124861.3.patch to solve bug #1124861: Automatically create pipes on Windows, if GetStdHandle fails. Will backport. ........ r53648 | lars.gustaebel | 2007-02-06 19:38:13 +0100 (Tue, 06 Feb 2007) | 4 lines Patch #1652681: create nonexistent files in append mode and allow appending to empty files. ........ r53649 | kurt.kaiser | 2007-02-06 20:09:43 +0100 (Tue, 06 Feb 2007) | 4 lines Updated patch (CodeContext.061217.patch) to [ 1362975 ] CodeContext - Improved text indentation Tal Einat 16Dec06 ........ r53650 | kurt.kaiser | 2007-02-06 20:21:19 +0100 (Tue, 06 Feb 2007) | 2 lines narrow exception per [ 1540849 ] except too broad ........ r53653 | kurt.kaiser | 2007-02-07 04:39:41 +0100 (Wed, 07 Feb 2007) | 4 lines [ 1621265 ] Auto-completion list placement Move AC window below input line unless not enough space, then put it above. Patch: Tal Einat ........ r53654 | kurt.kaiser | 2007-02-07 09:07:13 +0100 (Wed, 07 Feb 2007) | 2 lines Handle AttributeError during calltip lookup ........ r53656 | raymond.hettinger | 2007-02-07 21:08:22 +0100 (Wed, 07 Feb 2007) | 3 lines SF #1615701: make d.update(m) honor __getitem__() and keys() in dict subclasses ........ r53658 | raymond.hettinger | 2007-02-07 22:04:20 +0100 (Wed, 07 Feb 2007) | 1 line SF: 1397711 Set docs conflated immutable and hashable ........ r53660 | raymond.hettinger | 2007-02-07 22:42:17 +0100 (Wed, 07 Feb 2007) | 1 line Check for a common user error with defaultdict(). ........ r53662 | raymond.hettinger | 2007-02-07 23:24:07 +0100 (Wed, 07 Feb 2007) | 1 line Bug #1575169: operator.isSequenceType() now returns False for subclasses of dict. ........ r53664 | raymond.hettinger | 2007-02-08 00:49:03 +0100 (Thu, 08 Feb 2007) | 1 line Silence compiler warning ........ r53666 | raymond.hettinger | 2007-02-08 01:07:32 +0100 (Thu, 08 Feb 2007) | 1 line Do not let overflows in enumerate() and count() pass silently. ........ r53668 | raymond.hettinger | 2007-02-08 01:50:39 +0100 (Thu, 08 Feb 2007) | 1 line Bypass set specific optimizations for set and frozenset subclasses. ........ r53670 | raymond.hettinger | 2007-02-08 02:42:35 +0100 (Thu, 08 Feb 2007) | 1 line Fix docstring bug ........ r53671 | martin.v.loewis | 2007-02-08 10:13:36 +0100 (Thu, 08 Feb 2007) | 3 lines Bug #1653736: Complain about keyword arguments to time.isoformat. Will backport to 2.5. ........ r53679 | kurt.kaiser | 2007-02-08 23:58:18 +0100 (Thu, 08 Feb 2007) | 6 lines Corrected some bugs in AutoComplete. Also, Page Up/Down in ACW implemented; mouse and cursor selection in ACWindow implemented; double Tab inserts current selection and closes ACW (similar to double-click and Return); scroll wheel now works in ACW. Added AutoComplete instructions to IDLE Help. ........ r53689 | martin.v.loewis | 2007-02-09 13:19:32 +0100 (Fri, 09 Feb 2007) | 3 lines Bug #1653736: Properly discard third argument to slot_nb_inplace_power. Will backport. ........ r53691 | martin.v.loewis | 2007-02-09 13:36:48 +0100 (Fri, 09 Feb 2007) | 4 lines Bug #1600860: Search for shared python library in LIBDIR, not lib/python/config, on "linux" and "gnu" systems. Will backport. ........ r53693 | martin.v.loewis | 2007-02-09 13:58:49 +0100 (Fri, 09 Feb 2007) | 2 lines Update broken link. Will backport to 2.5. ........ r53697 | georg.brandl | 2007-02-09 19:48:41 +0100 (Fri, 09 Feb 2007) | 2 lines Bug #1656078: typo in in profile docs. ........ r53731 | brett.cannon | 2007-02-11 06:36:00 +0100 (Sun, 11 Feb 2007) | 3 lines Change a very minor inconsistency (that is purely cosmetic) in the AST definition. ........ r53735 | skip.montanaro | 2007-02-11 19:24:37 +0100 (Sun, 11 Feb 2007) | 1 line fix trace.py --ignore-dir ........ r53741 | brett.cannon | 2007-02-11 20:44:41 +0100 (Sun, 11 Feb 2007) | 3 lines Check in changed Python-ast.c from a cosmetic change to Python.asdl (in r53731). ........ r53751 | brett.cannon | 2007-02-12 04:51:02 +0100 (Mon, 12 Feb 2007) | 5 lines Modify Parser/asdl_c.py so that the __version__ number for Python/Python-ast.c is specified at the top of the file. Also add a note that Python/Python-ast.c needs to be committed separately after a change to the AST grammar to capture the revision number of the change (which is what __version__ is set to). ........ r53752 | lars.gustaebel | 2007-02-12 10:25:53 +0100 (Mon, 12 Feb 2007) | 3 lines Bug #1656581: Point out that external file objects are supposed to be at position 0. ........ r53754 | martin.v.loewis | 2007-02-12 13:21:10 +0100 (Mon, 12 Feb 2007) | 3 lines Patch 1463026: Support default namespace in XMLGenerator. Fixes #847665. Will backport. ........ r53757 | armin.rigo | 2007-02-12 17:23:24 +0100 (Mon, 12 Feb 2007) | 4 lines Fix the line to what is my guess at the original author's meaning. (The line has no effect anyway, but is present because it's customary call the base class __init__). ........ r53763 | martin.v.loewis | 2007-02-13 09:34:45 +0100 (Tue, 13 Feb 2007) | 3 lines Patch #685268: Consider a package's __path__ in imputil. Will backport. ........ r53765 | martin.v.loewis | 2007-02-13 10:49:38 +0100 (Tue, 13 Feb 2007) | 2 lines Patch #698833: Support file decryption in zipfile. ........ r53766 | martin.v.loewis | 2007-02-13 11:10:39 +0100 (Tue, 13 Feb 2007) | 3 lines Patch #1517891: Make 'a' create the file if it doesn't exist. Fixes #1514451. ........ r53767 | martin.v.loewis | 2007-02-13 13:08:24 +0100 (Tue, 13 Feb 2007) | 3 lines Bug #1658794: Remove extraneous 'this'. Will backport to 2.5. ........ r53769 | martin.v.loewis | 2007-02-13 13:14:19 +0100 (Tue, 13 Feb 2007) | 3 lines Patch #1657276: Make NETLINK_DNRTMSG conditional. Will backport. ........ r53771 | lars.gustaebel | 2007-02-13 17:09:24 +0100 (Tue, 13 Feb 2007) | 4 lines Patch #1647484: Renamed GzipFile's filename attribute to name. The filename attribute is still accessible as a property that emits a DeprecationWarning. ........ r53772 | lars.gustaebel | 2007-02-13 17:24:00 +0100 (Tue, 13 Feb 2007) | 3 lines Strip the '.gz' extension from the filename that is written to the gzip header. ........ r53774 | martin.v.loewis | 2007-02-14 11:07:37 +0100 (Wed, 14 Feb 2007) | 2 lines Patch #1432399: Add HCI sockets. ........ r53775 | martin.v.loewis | 2007-02-14 12:30:07 +0100 (Wed, 14 Feb 2007) | 2 lines Update 1432399 to removal of _BT_SOCKADDR_MEMB. ........ r53776 | martin.v.loewis | 2007-02-14 12:30:56 +0100 (Wed, 14 Feb 2007) | 3 lines Ignore directory time stamps when considering whether to rerun libffi configure. ........ r53778 | lars.gustaebel | 2007-02-14 15:45:12 +0100 (Wed, 14 Feb 2007) | 4 lines A missing binary mode in AppendTest caused failures in Windows Buildbot. ........ r53782 | martin.v.loewis | 2007-02-15 10:51:35 +0100 (Thu, 15 Feb 2007) | 2 lines Patch #1397848: add the reasoning behind no-resize-on-shrinkage. ........ r53783 | georg.brandl | 2007-02-15 11:37:59 +0100 (Thu, 15 Feb 2007) | 2 lines Make functools.wraps() docs a bit clearer. ........ r53785 | georg.brandl | 2007-02-15 12:29:04 +0100 (Thu, 15 Feb 2007) | 2 lines Patch #1494140: Add documentation for the new struct.Struct object. ........ r53787 | georg.brandl | 2007-02-15 12:29:55 +0100 (Thu, 15 Feb 2007) | 2 lines Add missing \versionadded. ........ r53800 | brett.cannon | 2007-02-15 23:54:39 +0100 (Thu, 15 Feb 2007) | 11 lines Update the encoding package's search function to use absolute imports when calling __import__. This helps make the expected search locations for encoding modules be more explicit. One could use an explicit value for __path__ when making the call to __import__ to force the exact location searched for encodings. This would give the most strict search path possible if one is worried about malicious code being imported. The unfortunate side-effect of that is that if __path__ was modified on 'encodings' on purpose in a safe way it would not be picked up in future __import__ calls. ........ r53801 | brett.cannon | 2007-02-16 20:33:01 +0100 (Fri, 16 Feb 2007) | 2 lines Make the __import__ call in encodings.__init__ absolute with a level 0 call. ........ r53809 | vinay.sajip | 2007-02-16 23:36:24 +0100 (Fri, 16 Feb 2007) | 1 line Minor fix for currentframe (SF #1652788). ........ r53818 | raymond.hettinger | 2007-02-19 03:03:19 +0100 (Mon, 19 Feb 2007) | 3 lines Extend work on revision 52962: Eliminate redundant calls to PyObject_Hash(). ........ r53820 | raymond.hettinger | 2007-02-19 05:08:43 +0100 (Mon, 19 Feb 2007) | 1 line Add merge() function to heapq. ........ r53821 | raymond.hettinger | 2007-02-19 06:28:28 +0100 (Mon, 19 Feb 2007) | 1 line Add tie-breaker count to preserve sort stability. ........ r53822 | raymond.hettinger | 2007-02-19 07:59:32 +0100 (Mon, 19 Feb 2007) | 1 line Use C heapreplace() instead of slower _siftup() in pure python. ........ r53823 | raymond.hettinger | 2007-02-19 08:30:21 +0100 (Mon, 19 Feb 2007) | 1 line Add test for merge stability ........ r53824 | raymond.hettinger | 2007-02-19 10:14:10 +0100 (Mon, 19 Feb 2007) | 1 line Provide an example of defaultdict with non-zero constant factory function. ........ r53825 | lars.gustaebel | 2007-02-19 10:54:47 +0100 (Mon, 19 Feb 2007) | 2 lines Moved misplaced news item. ........ r53826 | martin.v.loewis | 2007-02-19 11:55:19 +0100 (Mon, 19 Feb 2007) | 3 lines Patch #1490190: posixmodule now includes os.chflags() and os.lchflags() functions on platforms where the underlying system calls are available. ........ r53827 | raymond.hettinger | 2007-02-19 19:15:04 +0100 (Mon, 19 Feb 2007) | 1 line Fixup docstrings for merge(). ........ r53829 | raymond.hettinger | 2007-02-19 21:44:04 +0100 (Mon, 19 Feb 2007) | 1 line Fixup set/dict interoperability. ........ r53837 | raymond.hettinger | 2007-02-21 06:20:38 +0100 (Wed, 21 Feb 2007) | 1 line Add itertools.izip_longest(). ........ r53838 | raymond.hettinger | 2007-02-21 18:22:05 +0100 (Wed, 21 Feb 2007) | 1 line Remove filler struct item and fix leak. ........
19 years ago
  1. /* Socket module header file */
  2. /* Includes needed for the sockaddr_* symbols below */
  3. #ifndef MS_WINDOWS
  4. #ifdef __VMS
  5. # include <socket.h>
  6. # else
  7. # include <sys/socket.h>
  8. # endif
  9. # include <netinet/in.h>
  10. # if !defined(__CYGWIN__)
  11. # include <netinet/tcp.h>
  12. # endif
  13. #else /* MS_WINDOWS */
  14. # include <winsock2.h>
  15. /*
  16. * If Windows has bluetooth support, include bluetooth constants.
  17. */
  18. #ifdef AF_BTH
  19. # include <ws2bth.h>
  20. # include <pshpack1.h>
  21. /*
  22. * The current implementation assumes the bdaddr in the sockaddr structs
  23. * will be a bdaddr_t. We treat this as an opaque type: on *nix systems, it
  24. * will be a struct with a single member (an array of six bytes). On windows,
  25. * we typedef this to ULONGLONG to match the Windows definition.
  26. */
  27. typedef ULONGLONG bdaddr_t;
  28. /*
  29. * Redefine SOCKADDR_BTH to provide names compatible with _BT_RC_MEMB() macros.
  30. */
  31. struct SOCKADDR_BTH_REDEF {
  32. union {
  33. USHORT addressFamily;
  34. USHORT family;
  35. };
  36. union {
  37. ULONGLONG btAddr;
  38. bdaddr_t bdaddr;
  39. };
  40. GUID serviceClassId;
  41. union {
  42. ULONG port;
  43. ULONG channel;
  44. };
  45. };
  46. # include <poppack.h>
  47. #endif
  48. /* Windows 'supports' CMSG_LEN, but does not follow the POSIX standard
  49. * interface at all, so there is no point including the code that
  50. * attempts to use it.
  51. */
  52. # ifdef PySocket_BUILDING_SOCKET
  53. # undef CMSG_LEN
  54. # endif
  55. # include <ws2tcpip.h>
  56. /* VC6 is shipped with old platform headers, and does not have MSTcpIP.h
  57. * Separate SDKs have all the functions we want, but older ones don't have
  58. * any version information.
  59. * I use SIO_GET_MULTICAST_FILTER to detect a decent SDK.
  60. */
  61. # ifdef SIO_GET_MULTICAST_FILTER
  62. # include <mstcpip.h> /* for SIO_RCVALL */
  63. # define HAVE_ADDRINFO
  64. # define HAVE_SOCKADDR_STORAGE
  65. # define HAVE_GETADDRINFO
  66. # define HAVE_GETNAMEINFO
  67. # define ENABLE_IPV6
  68. # else
  69. typedef int socklen_t;
  70. # endif /* IPPROTO_IPV6 */
  71. #endif /* MS_WINDOWS */
  72. #ifdef HAVE_SYS_UN_H
  73. # include <sys/un.h>
  74. #else
  75. # undef AF_UNIX
  76. #endif
  77. #ifdef HAVE_LINUX_NETLINK_H
  78. # ifdef HAVE_ASM_TYPES_H
  79. # include <asm/types.h>
  80. # endif
  81. # include <linux/netlink.h>
  82. #else
  83. # undef AF_NETLINK
  84. #endif
  85. #ifdef HAVE_LINUX_QRTR_H
  86. # ifdef HAVE_ASM_TYPES_H
  87. # include <asm/types.h>
  88. # endif
  89. # include <linux/qrtr.h>
  90. #else
  91. # undef AF_QIPCRTR
  92. #endif
  93. #ifdef HAVE_BLUETOOTH_BLUETOOTH_H
  94. #include <bluetooth/bluetooth.h>
  95. #include <bluetooth/rfcomm.h>
  96. #include <bluetooth/l2cap.h>
  97. #include <bluetooth/sco.h>
  98. #include <bluetooth/hci.h>
  99. #endif
  100. #ifdef HAVE_BLUETOOTH_H
  101. #include <bluetooth.h>
  102. #endif
  103. #ifdef HAVE_NET_IF_H
  104. # include <net/if.h>
  105. #endif
  106. #ifdef HAVE_NETPACKET_PACKET_H
  107. # include <sys/ioctl.h>
  108. # include <netpacket/packet.h>
  109. #endif
  110. #ifdef HAVE_LINUX_TIPC_H
  111. # include <linux/tipc.h>
  112. #endif
  113. #ifdef HAVE_LINUX_CAN_H
  114. # include <linux/can.h>
  115. #else
  116. # undef AF_CAN
  117. # undef PF_CAN
  118. #endif
  119. #ifdef HAVE_LINUX_CAN_RAW_H
  120. #include <linux/can/raw.h>
  121. #endif
  122. #ifdef HAVE_LINUX_CAN_BCM_H
  123. #include <linux/can/bcm.h>
  124. #endif
  125. #ifdef HAVE_SYS_SYS_DOMAIN_H
  126. #include <sys/sys_domain.h>
  127. #endif
  128. #ifdef HAVE_SYS_KERN_CONTROL_H
  129. #include <sys/kern_control.h>
  130. #endif
  131. #ifdef HAVE_LINUX_VM_SOCKETS_H
  132. # include <linux/vm_sockets.h>
  133. #else
  134. # undef AF_VSOCK
  135. #endif
  136. #ifdef HAVE_SOCKADDR_ALG
  137. # include <linux/if_alg.h>
  138. # ifndef AF_ALG
  139. # define AF_ALG 38
  140. # endif
  141. # ifndef SOL_ALG
  142. # define SOL_ALG 279
  143. # endif
  144. /* Linux 3.19 */
  145. # ifndef ALG_SET_AEAD_ASSOCLEN
  146. # define ALG_SET_AEAD_ASSOCLEN 4
  147. # endif
  148. # ifndef ALG_SET_AEAD_AUTHSIZE
  149. # define ALG_SET_AEAD_AUTHSIZE 5
  150. # endif
  151. /* Linux 4.8 */
  152. # ifndef ALG_SET_PUBKEY
  153. # define ALG_SET_PUBKEY 6
  154. # endif
  155. # ifndef ALG_OP_SIGN
  156. # define ALG_OP_SIGN 2
  157. # endif
  158. # ifndef ALG_OP_VERIFY
  159. # define ALG_OP_VERIFY 3
  160. # endif
  161. #endif /* HAVE_SOCKADDR_ALG */
  162. #ifndef Py__SOCKET_H
  163. #define Py__SOCKET_H
  164. #ifdef __cplusplus
  165. extern "C" {
  166. #endif
  167. /* Python module and C API name */
  168. #define PySocket_MODULE_NAME "_socket"
  169. #define PySocket_CAPI_NAME "CAPI"
  170. #define PySocket_CAPSULE_NAME PySocket_MODULE_NAME "." PySocket_CAPI_NAME
  171. /* Abstract the socket file descriptor type */
  172. #ifdef MS_WINDOWS
  173. typedef SOCKET SOCKET_T;
  174. # ifdef MS_WIN64
  175. # define SIZEOF_SOCKET_T 8
  176. # else
  177. # define SIZEOF_SOCKET_T 4
  178. # endif
  179. #else
  180. typedef int SOCKET_T;
  181. # define SIZEOF_SOCKET_T SIZEOF_INT
  182. #endif
  183. #if SIZEOF_SOCKET_T <= SIZEOF_LONG
  184. #define PyLong_FromSocket_t(fd) PyLong_FromLong((SOCKET_T)(fd))
  185. #define PyLong_AsSocket_t(fd) (SOCKET_T)PyLong_AsLong(fd)
  186. #else
  187. #define PyLong_FromSocket_t(fd) PyLong_FromLongLong((SOCKET_T)(fd))
  188. #define PyLong_AsSocket_t(fd) (SOCKET_T)PyLong_AsLongLong(fd)
  189. #endif
  190. /* Socket address */
  191. typedef union sock_addr {
  192. struct sockaddr_in in;
  193. struct sockaddr sa;
  194. #ifdef AF_UNIX
  195. struct sockaddr_un un;
  196. #endif
  197. #ifdef AF_NETLINK
  198. struct sockaddr_nl nl;
  199. #endif
  200. #ifdef ENABLE_IPV6
  201. struct sockaddr_in6 in6;
  202. struct sockaddr_storage storage;
  203. #endif
  204. #ifdef HAVE_BLUETOOTH_BLUETOOTH_H
  205. struct sockaddr_l2 bt_l2;
  206. struct sockaddr_rc bt_rc;
  207. struct sockaddr_sco bt_sco;
  208. struct sockaddr_hci bt_hci;
  209. #elif defined(MS_WINDOWS)
  210. struct SOCKADDR_BTH_REDEF bt_rc;
  211. #endif
  212. #ifdef HAVE_NETPACKET_PACKET_H
  213. struct sockaddr_ll ll;
  214. #endif
  215. #ifdef HAVE_LINUX_CAN_H
  216. struct sockaddr_can can;
  217. #endif
  218. #ifdef HAVE_SYS_KERN_CONTROL_H
  219. struct sockaddr_ctl ctl;
  220. #endif
  221. #ifdef HAVE_SOCKADDR_ALG
  222. struct sockaddr_alg alg;
  223. #endif
  224. #ifdef AF_QIPCRTR
  225. struct sockaddr_qrtr sq;
  226. #endif
  227. #ifdef AF_VSOCK
  228. struct sockaddr_vm vm;
  229. #endif
  230. } sock_addr_t;
  231. /* The object holding a socket. It holds some extra information,
  232. like the address family, which is used to decode socket address
  233. arguments properly. */
  234. typedef struct {
  235. PyObject_HEAD
  236. SOCKET_T sock_fd; /* Socket file descriptor */
  237. int sock_family; /* Address family, e.g., AF_INET */
  238. int sock_type; /* Socket type, e.g., SOCK_STREAM */
  239. int sock_proto; /* Protocol type, usually 0 */
  240. PyObject *(*errorhandler)(void); /* Error handler; checks
  241. errno, returns NULL and
  242. sets a Python exception */
  243. _PyTime_t sock_timeout; /* Operation timeout in seconds;
  244. 0.0 means non-blocking */
  245. } PySocketSockObject;
  246. /* --- C API ----------------------------------------------------*/
  247. /* Short explanation of what this C API export mechanism does
  248. and how it works:
  249. The _ssl module needs access to the type object defined in
  250. the _socket module. Since cross-DLL linking introduces a lot of
  251. problems on many platforms, the "trick" is to wrap the
  252. C API of a module in a struct which then gets exported to
  253. other modules via a PyCapsule.
  254. The code in socketmodule.c defines this struct (which currently
  255. only contains the type object reference, but could very
  256. well also include other C APIs needed by other modules)
  257. and exports it as PyCapsule via the module dictionary
  258. under the name "CAPI".
  259. Other modules can now include the socketmodule.h file
  260. which defines the needed C APIs to import and set up
  261. a static copy of this struct in the importing module.
  262. After initialization, the importing module can then
  263. access the C APIs from the _socket module by simply
  264. referring to the static struct, e.g.
  265. Load _socket module and its C API; this sets up the global
  266. PySocketModule:
  267. if (PySocketModule_ImportModuleAndAPI())
  268. return;
  269. Now use the C API as if it were defined in the using
  270. module:
  271. if (!PyArg_ParseTuple(args, "O!|zz:ssl",
  272. PySocketModule.Sock_Type,
  273. (PyObject*)&Sock,
  274. &key_file, &cert_file))
  275. return NULL;
  276. Support could easily be extended to export more C APIs/symbols
  277. this way. Currently, only the type object is exported,
  278. other candidates would be socket constructors and socket
  279. access functions.
  280. */
  281. /* C API for usage by other Python modules */
  282. typedef struct {
  283. PyTypeObject *Sock_Type;
  284. PyObject *error;
  285. PyObject *timeout_error;
  286. } PySocketModule_APIObject;
  287. #define PySocketModule_ImportModuleAndAPI() PyCapsule_Import(PySocket_CAPSULE_NAME, 1)
  288. #ifdef __cplusplus
  289. }
  290. #endif
  291. #endif /* !Py__SOCKET_H */