Mercurial > cpython-lru_cache-weakref
diff Modules/socketmodule.h @ 61465:e38335d4df91 2.6
Recorded merge of revisions 81029 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r81029 | antoine.pitrou | 2010-05-09 16:46:46 +0200 (dim., 09 mai 2010) | 3 lines
Untabify C files. Will watch buildbots.
........
| author | Antoine Pitrou <solipsis@pitrou.net> |
|---|---|
| date | Sun, 09 May 2010 15:15:40 +0000 |
| parents | e9c935cd7888 |
| children | b36cb4602e21 |
line wrap: on
line diff
--- a/Modules/socketmodule.h Sun May 09 14:07:57 2010 +0000 +++ b/Modules/socketmodule.h Sun May 09 15:15:40 2010 +0000 @@ -17,7 +17,7 @@ # include <ws2tcpip.h> /* VC6 is shipped with old platform headers, and does not have MSTcpIP.h * Separate SDKs have all the functions we want, but older ones don't have - * any version information. + * any version information. * I use SIO_GET_MULTICAST_FILTER to detect a decent SDK. */ # ifdef SIO_GET_MULTICAST_FILTER @@ -76,43 +76,43 @@ #endif /* Python module and C API name */ -#define PySocket_MODULE_NAME "_socket" -#define PySocket_CAPI_NAME "CAPI" +#define PySocket_MODULE_NAME "_socket" +#define PySocket_CAPI_NAME "CAPI" /* Abstract the socket file descriptor type */ #ifdef MS_WINDOWS typedef SOCKET SOCKET_T; -# ifdef MS_WIN64 -# define SIZEOF_SOCKET_T 8 -# else -# define SIZEOF_SOCKET_T 4 -# endif +# ifdef MS_WIN64 +# define SIZEOF_SOCKET_T 8 +# else +# define SIZEOF_SOCKET_T 4 +# endif #else typedef int SOCKET_T; -# define SIZEOF_SOCKET_T SIZEOF_INT +# define SIZEOF_SOCKET_T SIZEOF_INT #endif /* Socket address */ typedef union sock_addr { - struct sockaddr_in in; + struct sockaddr_in in; #ifdef AF_UNIX - struct sockaddr_un un; + struct sockaddr_un un; #endif #ifdef AF_NETLINK - struct sockaddr_nl nl; + struct sockaddr_nl nl; #endif #ifdef ENABLE_IPV6 - struct sockaddr_in6 in6; - struct sockaddr_storage storage; + struct sockaddr_in6 in6; + struct sockaddr_storage storage; #endif #ifdef HAVE_BLUETOOTH_BLUETOOTH_H - struct sockaddr_l2 bt_l2; - struct sockaddr_rc bt_rc; - struct sockaddr_sco bt_sco; - struct sockaddr_hci bt_hci; + struct sockaddr_l2 bt_l2; + struct sockaddr_rc bt_rc; + struct sockaddr_sco bt_sco; + struct sockaddr_hci bt_hci; #endif #ifdef HAVE_NETPACKET_PACKET_H - struct sockaddr_ll ll; + struct sockaddr_ll ll; #endif } sock_addr_t; @@ -121,16 +121,16 @@ arguments properly. */ typedef struct { - PyObject_HEAD - SOCKET_T sock_fd; /* Socket file descriptor */ - int sock_family; /* Address family, e.g., AF_INET */ - int sock_type; /* Socket type, e.g., SOCK_STREAM */ - int sock_proto; /* Protocol type, usually 0 */ - PyObject *(*errorhandler)(void); /* Error handler; checks - errno, returns NULL and - sets a Python exception */ - double sock_timeout; /* Operation timeout in seconds; - 0.0 means non-blocking */ + PyObject_HEAD + SOCKET_T sock_fd; /* Socket file descriptor */ + int sock_family; /* Address family, e.g., AF_INET */ + int sock_type; /* Socket type, e.g., SOCK_STREAM */ + int sock_proto; /* Protocol type, usually 0 */ + PyObject *(*errorhandler)(void); /* Error handler; checks + errno, returns NULL and + sets a Python exception */ + double sock_timeout; /* Operation timeout in seconds; + 0.0 means non-blocking */ } PySocketSockObject; /* --- C API ----------------------------------------------------*/ @@ -138,7 +138,7 @@ /* Short explanation of what this C API export mechanism does and how it works: - The _ssl module needs access to the type object defined in + The _ssl module needs access to the type object defined in the _socket module. Since cross-DLL linking introduces a lot of problems on many platforms, the "trick" is to wrap the C API of a module in a struct which then gets exported to @@ -160,24 +160,24 @@ Load _socket module and its C API; this sets up the global PySocketModule: - - if (PySocketModule_ImportModuleAndAPI()) - return; + + if (PySocketModule_ImportModuleAndAPI()) + return; Now use the C API as if it were defined in the using module: - if (!PyArg_ParseTuple(args, "O!|zz:ssl", + if (!PyArg_ParseTuple(args, "O!|zz:ssl", - PySocketModule.Sock_Type, + PySocketModule.Sock_Type, - (PyObject*)&Sock, - &key_file, &cert_file)) - return NULL; + (PyObject*)&Sock, + &key_file, &cert_file)) + return NULL; Support could easily be extended to export more C APIs/symbols - this way. Currently, only the type object is exported, + this way. Currently, only the type object is exported, other candidates would be socket constructors and socket access functions. @@ -185,13 +185,13 @@ /* C API for usage by other Python modules */ typedef struct { - PyTypeObject *Sock_Type; - PyObject *error; + PyTypeObject *Sock_Type; + PyObject *error; } PySocketModule_APIObject; /* XXX The net effect of the following appears to be to define a function XXX named PySocketModule_APIObject in _ssl.c. It's unclear why it isn't - XXX defined there directly. + XXX defined there directly. >>> It's defined here because other modules might also want to use >>> the C API. @@ -207,8 +207,8 @@ if (!PyArg_ParseTuple(args, "O!|zz:ssl", &PySocketModule.Sock_Type, (PyObject*)&Sock, - &key_file, &cert_file)) - return NULL; + &key_file, &cert_file)) + return NULL; ... */ @@ -226,34 +226,34 @@ static int PySocketModule_ImportModuleAndAPI(void) { - PyObject *mod = 0, *v = 0; - char *apimodule = PySocket_MODULE_NAME; - char *apiname = PySocket_CAPI_NAME; - void *api; + PyObject *mod = 0, *v = 0; + char *apimodule = PySocket_MODULE_NAME; + char *apiname = PySocket_CAPI_NAME; + void *api; - DPRINTF("Importing the %s C API...\n", apimodule); - mod = PyImport_ImportModuleNoBlock(apimodule); - if (mod == NULL) - goto onError; - DPRINTF(" %s package found\n", apimodule); - v = PyObject_GetAttrString(mod, apiname); - if (v == NULL) - goto onError; - Py_DECREF(mod); - DPRINTF(" API object %s found\n", apiname); - api = PyCObject_AsVoidPtr(v); - if (api == NULL) - goto onError; - Py_DECREF(v); - memcpy(&PySocketModule, api, sizeof(PySocketModule)); - DPRINTF(" API object loaded and initialized.\n"); - return 0; + DPRINTF("Importing the %s C API...\n", apimodule); + mod = PyImport_ImportModuleNoBlock(apimodule); + if (mod == NULL) + goto onError; + DPRINTF(" %s package found\n", apimodule); + v = PyObject_GetAttrString(mod, apiname); + if (v == NULL) + goto onError; + Py_DECREF(mod); + DPRINTF(" API object %s found\n", apiname); + api = PyCObject_AsVoidPtr(v); + if (api == NULL) + goto onError; + Py_DECREF(v); + memcpy(&PySocketModule, api, sizeof(PySocketModule)); + DPRINTF(" API object loaded and initialized.\n"); + return 0; onError: - DPRINTF(" not found.\n"); - Py_XDECREF(mod); - Py_XDECREF(v); - return -1; + DPRINTF(" not found.\n"); + Py_XDECREF(mod); + Py_XDECREF(v); + return -1; } #endif /* !PySocket_BUILDING_SOCKET */
