同步操作将从 OpenHarmony-SIG/python 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
/* Socket module header file *//* Includes needed for the sockaddr_* symbols below */#ifndef MS_WINDOWS#ifdef __VMS# include <socket.h># else# include <sys/socket.h># endif# include <netinet/in.h># if !defined(__CYGWIN__)# include <netinet/tcp.h># endif#else /* MS_WINDOWS */# include <winsock2.h>/* Windows 'supports' CMSG_LEN, but does not follow the POSIX standard* interface at all, so there is no point including the code that* attempts to use it.*/# ifdef PySocket_BUILDING_SOCKET# undef CMSG_LEN# endif# 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.* I use SIO_GET_MULTICAST_FILTER to detect a decent SDK.*/# ifdef SIO_GET_MULTICAST_FILTER# include <mstcpip.h> /* for SIO_RCVALL */# define HAVE_ADDRINFO# define HAVE_SOCKADDR_STORAGE# define HAVE_GETADDRINFO# define HAVE_GETNAMEINFO# define ENABLE_IPV6# elsetypedef int socklen_t;# endif /* IPPROTO_IPV6 */#endif /* MS_WINDOWS */#ifdef HAVE_SYS_UN_H# include <sys/un.h>#else# undef AF_UNIX#endif#ifdef HAVE_LINUX_NETLINK_H# ifdef HAVE_ASM_TYPES_H# include <asm/types.h># endif# include <linux/netlink.h>#else# undef AF_NETLINK#endif#ifdef HAVE_LINUX_QRTR_H# ifdef HAVE_ASM_TYPES_H# include <asm/types.h># endif# include <linux/qrtr.h>#else# undef AF_QIPCRTR#endif#ifdef HAVE_BLUETOOTH_BLUETOOTH_H#include <bluetooth/bluetooth.h>#include <bluetooth/rfcomm.h>#include <bluetooth/l2cap.h>#include <bluetooth/sco.h>#include <bluetooth/hci.h>#endif#ifdef HAVE_BLUETOOTH_H#include <bluetooth.h>#endif#ifdef HAVE_NET_IF_H# include <net/if.h>#endif#ifdef HAVE_NETPACKET_PACKET_H# include <sys/ioctl.h># include <netpacket/packet.h>#endif#ifdef HAVE_LINUX_TIPC_H# include <linux/tipc.h>#endif#ifdef HAVE_LINUX_CAN_H# include <linux/can.h>#else# undef AF_CAN# undef PF_CAN#endif#ifdef HAVE_LINUX_CAN_RAW_H#include <linux/can/raw.h>#endif#ifdef HAVE_LINUX_CAN_BCM_H#include <linux/can/bcm.h>#endif#ifdef HAVE_SYS_SYS_DOMAIN_H#include <sys/sys_domain.h>#endif#ifdef HAVE_SYS_KERN_CONTROL_H#include <sys/kern_control.h>#endif#ifdef HAVE_LINUX_VM_SOCKETS_H# include <linux/vm_sockets.h>#else# undef AF_VSOCK#endif#ifdef HAVE_SOCKADDR_ALG# include <linux/if_alg.h># ifndef AF_ALG# define AF_ALG 38# endif# ifndef SOL_ALG# define SOL_ALG 279# endif/* Linux 3.19 */# ifndef ALG_SET_AEAD_ASSOCLEN# define ALG_SET_AEAD_ASSOCLEN 4# endif# ifndef ALG_SET_AEAD_AUTHSIZE# define ALG_SET_AEAD_AUTHSIZE 5# endif/* Linux 4.8 */# ifndef ALG_SET_PUBKEY# define ALG_SET_PUBKEY 6# endif# ifndef ALG_OP_SIGN# define ALG_OP_SIGN 2# endif# ifndef ALG_OP_VERIFY# define ALG_OP_VERIFY 3# endif#endif /* HAVE_SOCKADDR_ALG */#ifndef Py__SOCKET_H#define Py__SOCKET_H#ifdef __cplusplusextern "C" {#endif/* Python module and C API name */#define PySocket_MODULE_NAME "_socket"#define PySocket_CAPI_NAME "CAPI"#define PySocket_CAPSULE_NAME PySocket_MODULE_NAME "." PySocket_CAPI_NAME/* Abstract the socket file descriptor type */#ifdef MS_WINDOWStypedef SOCKET SOCKET_T;# ifdef MS_WIN64# define SIZEOF_SOCKET_T 8# else# define SIZEOF_SOCKET_T 4# endif#elsetypedef int SOCKET_T;# define SIZEOF_SOCKET_T SIZEOF_INT#endif#if SIZEOF_SOCKET_T <= SIZEOF_LONG#define PyLong_FromSocket_t(fd) PyLong_FromLong((SOCKET_T)(fd))#define PyLong_AsSocket_t(fd) (SOCKET_T)PyLong_AsLong(fd)#else#define PyLong_FromSocket_t(fd) PyLong_FromLongLong((SOCKET_T)(fd))#define PyLong_AsSocket_t(fd) (SOCKET_T)PyLong_AsLongLong(fd)#endif/* Socket address */typedef union sock_addr {struct sockaddr_in in;struct sockaddr sa;#ifdef AF_UNIXstruct sockaddr_un un;#endif#ifdef AF_NETLINKstruct sockaddr_nl nl;#endif#ifdef ENABLE_IPV6struct sockaddr_in6 in6;struct sockaddr_storage storage;#endif#ifdef HAVE_BLUETOOTH_BLUETOOTH_Hstruct sockaddr_l2 bt_l2;struct sockaddr_rc bt_rc;struct sockaddr_sco bt_sco;struct sockaddr_hci bt_hci;#endif#ifdef HAVE_NETPACKET_PACKET_Hstruct sockaddr_ll ll;#endif#ifdef HAVE_LINUX_CAN_Hstruct sockaddr_can can;#endif#ifdef HAVE_SYS_KERN_CONTROL_Hstruct sockaddr_ctl ctl;#endif#ifdef HAVE_SOCKADDR_ALGstruct sockaddr_alg alg;#endif#ifdef AF_QIPCRTRstruct sockaddr_qrtr sq;#endif#ifdef AF_VSOCKstruct sockaddr_vm vm;#endif} sock_addr_t;/* The object holding a socket. It holds some extra information,like the address family, which is used to decode socket addressarguments properly. */typedef struct {PyObject_HEADSOCKET_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; checkserrno, returns NULL andsets a Python exception */_PyTime_t sock_timeout; /* Operation timeout in seconds;0.0 means non-blocking */} PySocketSockObject;/* --- C API ----------------------------------------------------*//* Short explanation of what this C API export mechanism doesand how it works:The _ssl module needs access to the type object defined inthe _socket module. Since cross-DLL linking introduces a lot ofproblems on many platforms, the "trick" is to wrap theC API of a module in a struct which then gets exported toother modules via a PyCapsule.The code in socketmodule.c defines this struct (which currentlyonly contains the type object reference, but could verywell also include other C APIs needed by other modules)and exports it as PyCapsule via the module dictionaryunder the name "CAPI".Other modules can now include the socketmodule.h filewhich defines the needed C APIs to import and set upa static copy of this struct in the importing module.After initialization, the importing module can thenaccess the C APIs from the _socket module by simplyreferring to the static struct, e.g.Load _socket module and its C API; this sets up the globalPySocketModule:if (PySocketModule_ImportModuleAndAPI())return;Now use the C API as if it were defined in the usingmodule:if (!PyArg_ParseTuple(args, "O!|zz:ssl",PySocketModule.Sock_Type,(PyObject*)&Sock,&key_file, &cert_file))return NULL;Support could easily be extended to export more C APIs/symbolsthis way. Currently, only the type object is exported,other candidates would be socket constructors and socketaccess functions.*//* C API for usage by other Python modules */typedef struct {PyTypeObject *Sock_Type;PyObject *error;PyObject *timeout_error;} PySocketModule_APIObject;#define PySocketModule_ImportModuleAndAPI() PyCapsule_Import(PySocket_CAPSULE_NAME, 1)#ifdef __cplusplus}#endif#endif /* !Py__SOCKET_H */
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。