5 This module provides an interface to Berkeley socket IPC.
9 - Only AF_INET, AF_INET6 and AF_UNIX address families are supported in a
10 portable manner, though AF_PACKET, AF_NETLINK and AF_TIPC are supported
12 - No read/write operations (use sendall/recv or makefile instead).
13 - Additional restrictions apply on some non-Unix platforms (compensated
18 - socket.error: exception raised for socket specific errors
19 - socket.gaierror: exception raised for getaddrinfo/getnameinfo errors,
20 a subclass of socket.error
21 - socket.herror: exception raised for gethostby* errors,
22 a subclass of socket.error
23 - socket.fromfd(fd, family, type[, proto]) --> new socket object (created
24 from an existing file descriptor)
25 - socket.gethostbyname(hostname) --> host IP address (string: 'dd.dd.dd.dd')
26 - socket.gethostbyaddr(IP address) --> (hostname, [alias, ...], [IP addr, ...])
27 - socket.gethostname() --> host name (string: 'spam' or 'spam.domain.com')
28 - socket.getprotobyname(protocolname) --> protocol number
29 - socket.getservbyname(servicename[, protocolname]) --> port number
30 - socket.getservbyport(portnumber[, protocolname]) --> service name
31 - socket.socket([family[, type [, proto]]]) --> new socket object
32 - socket.socketpair([family[, type [, proto]]]) --> (socket, socket)
33 - socket.ntohs(16 bit value) --> new int object
34 - socket.ntohl(32 bit value) --> new int object
35 - socket.htons(16 bit value) --> new int object
36 - socket.htonl(32 bit value) --> new int object
37 - socket.getaddrinfo(host, port [, family, socktype, proto, flags])
38 --> List of (family, socktype, proto, canonname, sockaddr)
39 - socket.getnameinfo(sockaddr, flags) --> (host, port)
40 - socket.AF_INET, socket.SOCK_STREAM, etc.: constants from <socket.h>
41 - socket.has_ipv6: boolean value indicating if IPv6 is supported
42 - socket.inet_aton(IP address) -> 32-bit packed IP representation
43 - socket.inet_ntoa(packed IP) -> IP address string
44 - socket.getdefaulttimeout() -> None | float
45 - socket.setdefaulttimeout(None | float)
46 - an Internet socket address is a pair (hostname, port)
47 where hostname can be anything recognized by gethostbyname()
48 (including the dd.dd.dd.dd notation) and port is in host byte order
49 - where a hostname is returned, the dd.dd.dd.dd notation is used
50 - a UNIX domain socket address is a string specifying the pathname
51 - an AF_PACKET socket address is a tuple containing a string
52 specifying the ethernet interface and an integer specifying
53 the Ethernet protocol number to be received. For example:
54 ("eth0",0x1234). Optional 3rd,4th,5th elements in the tuple
55 specify packet-type and ha-type/addr.
56 - an AF_TIPC socket address is expressed as
57 (addr_type, v1, v2, v3 [, scope]); where addr_type can be one of:
58 TIPC_ADDR_NAMESEQ, TIPC_ADDR_NAME, and TIPC_ADDR_ID;
59 and scope can be one of:
60 TIPC_ZONE_SCOPE, TIPC_CLUSTER_SCOPE, and TIPC_NODE_SCOPE.
61 The meaning of v1, v2 and v3 depends on the value of addr_type:
62 if addr_type is TIPC_ADDR_NAME:
64 v2 is the port identifier
66 if addr_type is TIPC_ADDR_NAMESEQ:
68 v2 is the lower port number
69 v3 is the upper port number
70 if addr_type is TIPC_ADDR_ID:
76 Local naming conventions:
78 - names starting with sock_ are socket object methods
79 - names starting with socket_ are module-level functions
80 - names starting with PySocket are exported through socketmodule.h
86 * inet_aton is not available on OSX 10.3, yet we want to use a binary
87 * that was build on 10.4 or later to work on that release, weak linking
88 * comes to the rescue.
90 # pragma weak inet_aton
94 #include "structmember.h"
97 #define MAX(x, y) ((x) < (y) ? (y) : (x))
99 /* Socket object documentation */
100 PyDoc_STRVAR(sock_doc
,
101 "socket([family[, type[, proto]]]) -> socket object\n\
103 Open a socket of the given type. The family argument specifies the\n\
104 address family; it defaults to AF_INET. The type argument specifies\n\
105 whether this is a stream (SOCK_STREAM, this is the default)\n\
106 or datagram (SOCK_DGRAM) socket. The protocol argument defaults to 0,\n\
107 specifying the default protocol. Keyword arguments are accepted.\n\
109 A socket object represents one endpoint of a network connection.\n\
111 Methods of socket objects (keyword arguments not allowed):\n\
113 accept() -- accept a connection, returning new socket and client address\n\
114 bind(addr) -- bind the socket to a local address\n\
115 close() -- close the socket\n\
116 connect(addr) -- connect the socket to a remote address\n\
117 connect_ex(addr) -- connect, return an error code instead of an exception\n\
118 dup() -- return a new socket object identical to the current one [*]\n\
119 fileno() -- return underlying file descriptor\n\
120 getpeername() -- return remote address [*]\n\
121 getsockname() -- return local address\n\
122 getsockopt(level, optname[, buflen]) -- get socket options\n\
123 gettimeout() -- return timeout or None\n\
124 listen(n) -- start listening for incoming connections\n\
125 makefile([mode, [bufsize]]) -- return a file object for the socket [*]\n\
126 recv(buflen[, flags]) -- receive data\n\
127 recv_into(buffer[, nbytes[, flags]]) -- receive data (into a buffer)\n\
128 recvfrom(buflen[, flags]) -- receive data and sender\'s address\n\
129 recvfrom_into(buffer[, nbytes, [, flags])\n\
130 -- receive data and sender\'s address (into a buffer)\n\
131 sendall(data[, flags]) -- send all data\n\
132 send(data[, flags]) -- send data, may not send all of it\n\
133 sendto(data[, flags], addr) -- send data to a given address\n\
134 setblocking(0 | 1) -- set or clear the blocking I/O flag\n\
135 setsockopt(level, optname, value) -- set socket options\n\
136 settimeout(None | float) -- set or clear the timeout\n\
137 shutdown(how) -- shut down traffic in one or both directions\n\
139 [*] not available on all platforms!");
141 /* XXX This is a terrible mess of platform-dependent preprocessor hacks.
142 I hope some day someone can clean this up please... */
144 /* Hacks for gethostbyname_r(). On some non-Linux platforms, the configure
145 script doesn't get this right, so we hardcode some platform checks below.
146 On the other hand, not all Linux versions agree, so there the settings
147 computed by the configure script are needed! */
150 # undef HAVE_GETHOSTBYNAME_R_3_ARG
151 # undef HAVE_GETHOSTBYNAME_R_5_ARG
152 # undef HAVE_GETHOSTBYNAME_R_6_ARG
156 # undef HAVE_GETHOSTBYNAME_R
159 #ifdef HAVE_GETHOSTBYNAME_R
160 # if defined(_AIX) || defined(__osf__)
161 # define HAVE_GETHOSTBYNAME_R_3_ARG
162 # elif defined(__sun) || defined(__sgi)
163 # define HAVE_GETHOSTBYNAME_R_5_ARG
164 # elif defined(linux)
165 /* Rely on the configure script */
167 # undef HAVE_GETHOSTBYNAME_R
171 #if !defined(HAVE_GETHOSTBYNAME_R) && defined(WITH_THREAD) && \
173 # define USE_GETHOSTBYNAME_LOCK
176 /* To use __FreeBSD_version */
177 #ifdef HAVE_SYS_PARAM_H
178 #include <sys/param.h>
180 /* On systems on which getaddrinfo() is believed to not be thread-safe,
181 (this includes the getaddrinfo emulation) protect access with a lock. */
182 #if defined(WITH_THREAD) && (defined(__APPLE__) || \
183 (defined(__FreeBSD__) && __FreeBSD_version+0 < 503000) || \
184 defined(__OpenBSD__) || defined(__NetBSD__) || \
185 defined(__VMS) || !defined(HAVE_GETADDRINFO))
186 #define USE_GETADDRINFO_LOCK
189 #ifdef USE_GETADDRINFO_LOCK
190 #define ACQUIRE_GETADDRINFO_LOCK PyThread_acquire_lock(netdb_lock, 1);
191 #define RELEASE_GETADDRINFO_LOCK PyThread_release_lock(netdb_lock);
193 #define ACQUIRE_GETADDRINFO_LOCK
194 #define RELEASE_GETADDRINFO_LOCK
197 #if defined(USE_GETHOSTBYNAME_LOCK) || defined(USE_GETADDRINFO_LOCK)
198 # include "pythread.h"
201 #if defined(PYCC_VACPP)
204 # include <sys/ioctl.h>
213 #if defined(PYOS_OS2)
215 # define INCL_DOSERRORS
216 # define INCL_NOPMAPI
220 #if defined(__sgi) && _COMPILER_VERSION>700 && !_SGIAPI
221 /* make sure that the reentrant (gethostbyaddr_r etc)
222 functions are declared correctly if compiling with
223 MIPSPro 7.x in ANSI C mode (default) */
225 /* XXX Using _SGIAPI is the wrong thing,
226 but I don't know what the right thing is. */
227 #undef _SGIAPI /* to avoid warning */
231 #include <sys/socket.h>
232 #include <sys/types.h>
233 #include <netinet/in.h>
235 #define HAVE_GETADDRINFO 1
236 #define HAVE_GETNAMEINFO 1
239 #define HAVE_INET_PTON
243 /* Irix 6.5 fails to define this variable at all. This is needed
244 for both GCC and SGI's compiler. I'd say that the SGI headers
245 are just busted. Same thing for Solaris. */
246 #if (defined(__sgi) || defined(sun)) && !defined(INET_ADDRSTRLEN)
247 #define INET_ADDRSTRLEN 16
250 /* Generic includes */
251 #ifdef HAVE_SYS_TYPES_H
252 #include <sys/types.h>
255 /* Generic socket object definitions and includes */
256 #define PySocket_BUILDING_SOCKET
257 #include "socketmodule.h"
259 /* Addressing includes */
263 /* Non-MS WINDOWS includes */
266 /* Headers needed for inet_ntoa() and inet_addr() */
268 # include <net/netdb.h>
269 # elif defined(PYOS_OS2) && defined(PYCC_VACPP)
271 typedef size_t socklen_t
;
273 # include <arpa/inet.h>
279 # include <sys/ioctl.h>
280 # include <socklib.h>
282 int h_errno
; /* not used */
283 # define INET_ADDRSTRLEN 16
288 /* MS_WINDOWS includes */
298 # define offsetof(type, member) ((size_t)(&((type *)0)->member))
302 # define O_NONBLOCK O_NDELAY
305 /* include Python's addrinfo.h unless it causes trouble */
306 #if defined(__sgi) && _COMPILER_VERSION>700 && defined(_SS_ALIGNSIZE)
307 /* Do not include addinfo.h on some newer IRIX versions.
308 * _SS_ALIGNSIZE is defined in sys/socket.h by 6.5.21,
309 * for example, but not by 6.5.10.
311 #elif defined(_MSC_VER) && _MSC_VER>1201
312 /* Do not include addrinfo.h for MSVC7 or greater. 'addrinfo' and
313 * EAI_* constants are defined in (the already included) ws2tcpip.h.
316 # include "addrinfo.h"
319 #ifndef HAVE_INET_PTON
320 #if !defined(NTDDI_VERSION) || (NTDDI_VERSION < NTDDI_LONGHORN)
321 int inet_pton(int af
, const char *src
, void *dst
);
322 const char *inet_ntop(int af
, const void *src
, char *dst
, socklen_t size
);
327 /* On OS X, getaddrinfo returns no error indication of lookup
328 failure, so we must use the emulation instead of the libinfo
329 implementation. Unfortunately, performing an autoconf test
330 for this bug would require DNS access for the machine performing
331 the configuration, which is not acceptable. Therefore, we
332 determine the bug just by checking for __APPLE__. If this bug
333 gets ever fixed, perhaps checking for sys/version.h would be
334 appropriate, which is 10/0 on the system with the bug. */
335 #ifndef HAVE_GETNAMEINFO
336 /* This bug seems to be fixed in Jaguar. Ths easiest way I could
337 Find to check for Jaguar is that it has getnameinfo(), which
338 older releases don't have */
339 #undef HAVE_GETADDRINFO
342 #ifdef HAVE_INET_ATON
343 #define USE_INET_ATON_WEAKLINK
348 /* I know this is a bad practice, but it is the easiest... */
349 #if !defined(HAVE_GETADDRINFO)
350 /* avoid clashes with the C library definition of the symbol. */
351 #define getaddrinfo fake_getaddrinfo
352 #define gai_strerror fake_gai_strerror
353 #define freeaddrinfo fake_freeaddrinfo
354 #include "getaddrinfo.c"
356 #if !defined(HAVE_GETNAMEINFO)
357 #define getnameinfo fake_getnameinfo
358 #include "getnameinfo.c"
361 #if defined(MS_WINDOWS) || defined(__BEOS__)
362 /* BeOS suffers from the same socket dichotomy as Win32... - [cjh] */
363 /* seem to be a few differences in the API */
364 #define SOCKETCLOSE closesocket
365 #define NO_DUP /* Actually it exists on NT 3.5, but what the heck... */
369 #define EAFNOSUPPORT WSAEAFNOSUPPORT
370 #define snprintf _snprintf
373 #if defined(PYOS_OS2) && !defined(PYCC_GCC)
374 #define SOCKETCLOSE soclose
375 #define NO_DUP /* Sockets are Not Actual File Handles under OS/2 */
379 #define SOCKETCLOSE close
382 #if defined(HAVE_BLUETOOTH_H) || defined(HAVE_BLUETOOTH_BLUETOOTH_H) && !defined(__NetBSD__)
383 #define USE_BLUETOOTH 1
384 #if defined(__FreeBSD__)
385 #define BTPROTO_L2CAP BLUETOOTH_PROTO_L2CAP
386 #define BTPROTO_RFCOMM BLUETOOTH_PROTO_RFCOMM
387 #define BTPROTO_HCI BLUETOOTH_PROTO_HCI
388 #define SOL_HCI SOL_HCI_RAW
389 #define HCI_FILTER SO_HCI_RAW_FILTER
390 #define sockaddr_l2 sockaddr_l2cap
391 #define sockaddr_rc sockaddr_rfcomm
392 #define hci_dev hci_node
393 #define _BT_L2_MEMB(sa, memb) ((sa)->l2cap_##memb)
394 #define _BT_RC_MEMB(sa, memb) ((sa)->rfcomm_##memb)
395 #define _BT_HCI_MEMB(sa, memb) ((sa)->hci_##memb)
396 #elif defined(__NetBSD__)
397 #define sockaddr_l2 sockaddr_bt
398 #define sockaddr_rc sockaddr_bt
399 #define sockaddr_hci sockaddr_bt
400 #define sockaddr_sco sockaddr_bt
401 #define _BT_L2_MEMB(sa, memb) ((sa)->bt_##memb)
402 #define _BT_RC_MEMB(sa, memb) ((sa)->bt_##memb)
403 #define _BT_HCI_MEMB(sa, memb) ((sa)->bt_##memb)
404 #define _BT_SCO_MEMB(sa, memb) ((sa)->bt_##memb)
406 #define _BT_L2_MEMB(sa, memb) ((sa)->l2_##memb)
407 #define _BT_RC_MEMB(sa, memb) ((sa)->rc_##memb)
408 #define _BT_HCI_MEMB(sa, memb) ((sa)->hci_##memb)
409 #define _BT_SCO_MEMB(sa, memb) ((sa)->sco_##memb)
414 /* TCP/IP Services for VMS uses a maximum send/recv buffer length */
415 #define SEGMENT_SIZE (32 * 1024 -1)
418 #define SAS2SA(x) ((struct sockaddr *)(x))
421 * Constants for getnameinfo()
423 #if !defined(NI_MAXHOST)
424 #define NI_MAXHOST 1025
426 #if !defined(NI_MAXSERV)
427 #define NI_MAXSERV 32
430 /* XXX There's a problem here: *static* functions are not supposed to have
431 a Py prefix (or use CapitalizedWords). Later... */
433 /* Global variable holding the exception type for errors detected
434 by this module (but not argument type or memory errors, etc.). */
435 static PyObject
*socket_error
;
436 static PyObject
*socket_herror
;
437 static PyObject
*socket_gaierror
;
438 static PyObject
*socket_timeout
;
441 /* Global variable which is !=0 if Python is running in a RISC OS taskwindow */
442 static int taskwindow
;
445 /* A forward reference to the socket type object.
446 The sock_type variable contains pointers to various functions,
447 some of which call new_sockobject(), which uses sock_type, so
448 there has to be a circular reference. */
449 static PyTypeObject sock_type
;
451 #if defined(HAVE_POLL_H)
453 #elif defined(HAVE_SYS_POLL_H)
454 #include <sys/poll.h>
457 #ifdef Py_SOCKET_FD_CAN_BE_GE_FD_SETSIZE
458 /* Platform can select file descriptors beyond FD_SETSIZE */
459 #define IS_SELECTABLE(s) 1
460 #elif defined(HAVE_POLL)
461 /* Instead of select(), we'll use poll() since poll() works on any fd. */
462 #define IS_SELECTABLE(s) 1
463 /* Can we call select() with this socket without a buffer overrun? */
465 /* POSIX says selecting file descriptors beyond FD_SETSIZE
466 has undefined behaviour. If there's no timeout left, we don't have to
467 call select, so it's a safe, little white lie. */
468 #define IS_SELECTABLE(s) ((s)->sock_fd < FD_SETSIZE || s->sock_timeout <= 0.0)
474 PyErr_SetString(socket_error
, "unable to select on socket");
478 /* Convenience function to raise an error according to errno
479 and return a NULL pointer from a function. */
485 int err_no
= WSAGetLastError();
486 /* PyErr_SetExcFromWindowsErr() invokes FormatMessage() which
487 recognizes the error codes used by both GetLastError() and
490 return PyErr_SetExcFromWindowsErr(socket_error
, err_no
);
493 #if defined(PYOS_OS2) && !defined(PYCC_GCC)
494 if (sock_errno() != NO_ERROR
) {
498 int myerrorcode
= sock_errno();
500 /* Retrieve socket-related error message from MPTN.MSG file */
501 rc
= DosGetMessage(NULL
, 0, outbuf
, sizeof(outbuf
),
502 myerrorcode
- SOCBASEERR
+ 26,
505 if (rc
== NO_ERROR
) {
508 /* OS/2 doesn't guarantee a terminator */
509 outbuf
[msglen
] = '\0';
510 if (strlen(outbuf
) > 0) {
511 /* If non-empty msg, trim CRLF */
512 char *lastc
= &outbuf
[ strlen(outbuf
)-1 ];
513 while (lastc
> outbuf
&&
514 isspace(Py_CHARMASK(*lastc
))) {
515 /* Trim trailing whitespace (CRLF) */
519 v
= Py_BuildValue("(is)", myerrorcode
, outbuf
);
521 PyErr_SetObject(socket_error
, v
);
530 if (_inet_error
.errnum
!= NULL
) {
532 v
= Py_BuildValue("(is)", errno
, _inet_err());
534 PyErr_SetObject(socket_error
, v
);
541 return PyErr_SetFromErrno(socket_error
);
546 set_herror(int h_error
)
550 #ifdef HAVE_HSTRERROR
551 v
= Py_BuildValue("(is)", h_error
, (char *)hstrerror(h_error
));
553 v
= Py_BuildValue("(is)", h_error
, "host not found");
556 PyErr_SetObject(socket_herror
, v
);
565 set_gaierror(int error
)
570 /* EAI_SYSTEM is not available on Windows XP. */
571 if (error
== EAI_SYSTEM
)
575 #ifdef HAVE_GAI_STRERROR
576 v
= Py_BuildValue("(is)", error
, gai_strerror(error
));
578 v
= Py_BuildValue("(is)", error
, "getaddrinfo failed");
581 PyErr_SetObject(socket_gaierror
, v
);
589 /* Function to send in segments */
591 sendsegmented(int sock_fd
, char *buf
, int len
, int flags
)
596 while (remaining
> 0) {
597 unsigned int segment
;
599 segment
= (remaining
>= SEGMENT_SIZE
? SEGMENT_SIZE
: remaining
);
600 n
= send(sock_fd
, buf
, segment
, flags
);
604 remaining
-= segment
;
612 /* Function to perform the setting of socket blocking mode
613 internally. block = (1 | 0). */
615 internal_setblocking(PySocketSockObject
*s
, int block
)
623 Py_BEGIN_ALLOW_THREADS
626 setsockopt(s
->sock_fd
, SOL_SOCKET
, SO_NONBLOCK
,
627 (void *)(&block
), sizeof(int));
631 #if defined(PYOS_OS2) && !defined(PYCC_GCC)
633 ioctl(s
->sock_fd
, FIONBIO
, (caddr_t
)&block
, sizeof(block
));
636 ioctl(s
->sock_fd
, FIONBIO
, (unsigned int *)&block
);
637 #else /* !PYOS_OS2 && !__VMS */
638 delay_flag
= fcntl(s
->sock_fd
, F_GETFL
, 0);
640 delay_flag
&= (~O_NONBLOCK
);
642 delay_flag
|= O_NONBLOCK
;
643 fcntl(s
->sock_fd
, F_SETFL
, delay_flag
);
644 #endif /* !PYOS_OS2 */
645 #else /* MS_WINDOWS */
647 ioctlsocket(s
->sock_fd
, FIONBIO
, (u_long
*)&block
);
648 #endif /* MS_WINDOWS */
651 socketioctl(s
->sock_fd
, FIONBIO
, (u_long
*)&block
);
653 #endif /* __BEOS__ */
656 /* Since these don't return anything */
660 /* Do a select()/poll() on the socket, if necessary (sock_timeout > 0).
661 The argument writing indicates the direction.
662 This does not raise an exception; we'll let our caller do that
663 after they've reacquired the interpreter lock.
664 Returns 1 on timeout, -1 on error, 0 otherwise. */
666 internal_select(PySocketSockObject
*s
, int writing
)
670 /* Nothing to do unless we're in timeout mode (not non-blocking) */
671 if (s
->sock_timeout
<= 0.0)
674 /* Guard against closed socket */
678 /* Prefer poll, if available, since you can poll() any fd
679 * which can't be done with select(). */
682 struct pollfd pollfd
;
685 pollfd
.fd
= s
->sock_fd
;
686 pollfd
.events
= writing
? POLLOUT
: POLLIN
;
688 /* s->sock_timeout is in seconds, timeout in ms */
689 timeout
= (int)(s
->sock_timeout
* 1000 + 0.5);
690 n
= poll(&pollfd
, 1, timeout
);
694 /* Construct the arguments to select */
697 tv
.tv_sec
= (int)s
->sock_timeout
;
698 tv
.tv_usec
= (int)((s
->sock_timeout
- tv
.tv_sec
) * 1e6
);
700 FD_SET(s
->sock_fd
, &fds
);
702 /* See if the socket is ready */
704 n
= select(s
->sock_fd
+1, NULL
, &fds
, NULL
, &tv
);
706 n
= select(s
->sock_fd
+1, &fds
, NULL
, NULL
, &tv
);
717 /* Initialize a new socket object. */
719 static double defaulttimeout
= -1.0; /* Default timeout for new sockets */
722 init_sockobject(PySocketSockObject
*s
,
723 SOCKET_T fd
, int family
, int type
, int proto
)
729 s
->sock_family
= family
;
731 s
->sock_proto
= proto
;
732 s
->sock_timeout
= defaulttimeout
;
734 s
->errorhandler
= &set_error
;
736 if (defaulttimeout
>= 0.0)
737 internal_setblocking(s
, 0);
741 socketioctl(s
->sock_fd
, 0x80046679, (u_long
*)&block
);
746 /* Create a new socket object.
747 This just creates the object and initializes it.
748 If the creation fails, return NULL and set an exception (implicit
751 static PySocketSockObject
*
752 new_sockobject(SOCKET_T fd
, int family
, int type
, int proto
)
754 PySocketSockObject
*s
;
755 s
= (PySocketSockObject
*)
756 PyType_GenericNew(&sock_type
, NULL
, NULL
);
758 init_sockobject(s
, fd
, family
, type
, proto
);
763 /* Lock to allow python interpreter to continue, but only allow one
764 thread to be in gethostbyname or getaddrinfo */
765 #if defined(USE_GETHOSTBYNAME_LOCK) || defined(USE_GETADDRINFO_LOCK)
766 PyThread_type_lock netdb_lock
;
770 /* Convert a string specifying a host name or one of a few symbolic
771 names to a numeric IP address. This usually calls gethostbyname()
772 to do the work; the names "" and "<broadcast>" are special.
773 Return the length (IPv4 should be 4 bytes), or negative if
774 an error occurred; then an exception is raised. */
777 setipaddr(char *name
, struct sockaddr
*addr_ret
, size_t addr_ret_size
, int af
)
779 struct addrinfo hints
, *res
;
784 memset((void *) addr_ret
, '\0', sizeof(*addr_ret
));
785 if (name
[0] == '\0') {
787 memset(&hints
, 0, sizeof(hints
));
788 hints
.ai_family
= af
;
789 hints
.ai_socktype
= SOCK_DGRAM
; /*dummy*/
790 hints
.ai_flags
= AI_PASSIVE
;
791 Py_BEGIN_ALLOW_THREADS
792 ACQUIRE_GETADDRINFO_LOCK
793 error
= getaddrinfo(NULL
, "0", &hints
, &res
);
795 /* We assume that those thread-unsafe getaddrinfo() versions
796 *are* safe regarding their return value, ie. that a
797 subsequent call to getaddrinfo() does not destroy the
798 outcome of the first call. */
799 RELEASE_GETADDRINFO_LOCK
804 switch (res
->ai_family
) {
815 PyErr_SetString(socket_error
,
816 "unsupported address family");
821 PyErr_SetString(socket_error
,
822 "wildcard resolved to multiple address");
825 if (res
->ai_addrlen
< addr_ret_size
)
826 addr_ret_size
= res
->ai_addrlen
;
827 memcpy(addr_ret
, res
->ai_addr
, addr_ret_size
);
831 if (name
[0] == '<' && strcmp(name
, "<broadcast>") == 0) {
832 struct sockaddr_in
*sin
;
833 if (af
!= AF_INET
&& af
!= AF_UNSPEC
) {
834 PyErr_SetString(socket_error
,
835 "address family mismatched");
838 sin
= (struct sockaddr_in
*)addr_ret
;
839 memset((void *) sin
, '\0', sizeof(*sin
));
840 sin
->sin_family
= AF_INET
;
841 #ifdef HAVE_SOCKADDR_SA_LEN
842 sin
->sin_len
= sizeof(*sin
);
844 sin
->sin_addr
.s_addr
= INADDR_BROADCAST
;
845 return sizeof(sin
->sin_addr
);
847 if (sscanf(name
, "%d.%d.%d.%d%c", &d1
, &d2
, &d3
, &d4
, &ch
) == 4 &&
848 0 <= d1
&& d1
<= 255 && 0 <= d2
&& d2
<= 255 &&
849 0 <= d3
&& d3
<= 255 && 0 <= d4
&& d4
<= 255) {
850 struct sockaddr_in
*sin
;
851 sin
= (struct sockaddr_in
*)addr_ret
;
852 sin
->sin_addr
.s_addr
= htonl(
853 ((long) d1
<< 24) | ((long) d2
<< 16) |
854 ((long) d3
<< 8) | ((long) d4
<< 0));
855 sin
->sin_family
= AF_INET
;
856 #ifdef HAVE_SOCKADDR_SA_LEN
857 sin
->sin_len
= sizeof(*sin
);
861 memset(&hints
, 0, sizeof(hints
));
862 hints
.ai_family
= af
;
863 Py_BEGIN_ALLOW_THREADS
864 ACQUIRE_GETADDRINFO_LOCK
865 error
= getaddrinfo(name
, NULL
, &hints
, &res
);
866 #if defined(__digital__) && defined(__unix__)
867 if (error
== EAI_NONAME
&& af
== AF_UNSPEC
) {
868 /* On Tru64 V5.1, numeric-to-addr conversion fails
869 if no address family is given. Assume IPv4 for now.*/
870 hints
.ai_family
= AF_INET
;
871 error
= getaddrinfo(name
, NULL
, &hints
, &res
);
875 RELEASE_GETADDRINFO_LOCK
/* see comment in setipaddr() */
880 if (res
->ai_addrlen
< addr_ret_size
)
881 addr_ret_size
= res
->ai_addrlen
;
882 memcpy((char *) addr_ret
, res
->ai_addr
, addr_ret_size
);
884 switch (addr_ret
->sa_family
) {
892 PyErr_SetString(socket_error
, "unknown address family");
898 /* Create a string object representing an IP address.
899 This is always a string of the form 'dd.dd.dd.dd' (with variable
903 makeipaddr(struct sockaddr
*addr
, int addrlen
)
905 char buf
[NI_MAXHOST
];
908 error
= getnameinfo(addr
, addrlen
, buf
, sizeof(buf
), NULL
, 0,
914 return PyString_FromString(buf
);
919 /* Convert a string representation of a Bluetooth address into a numeric
920 address. Returns the length (6), or raises an exception and returns -1 if
921 an error occurred. */
924 setbdaddr(char *name
, bdaddr_t
*bdaddr
)
926 unsigned int b0
, b1
, b2
, b3
, b4
, b5
;
930 n
= sscanf(name
, "%X:%X:%X:%X:%X:%X%c",
931 &b5
, &b4
, &b3
, &b2
, &b1
, &b0
, &ch
);
932 if (n
== 6 && (b0
| b1
| b2
| b3
| b4
| b5
) < 256) {
941 PyErr_SetString(socket_error
, "bad bluetooth address");
946 /* Create a string representation of the Bluetooth address. This is always a
947 string of the form 'XX:XX:XX:XX:XX:XX' where XX is a two digit hexadecimal
948 value (zero padded if necessary). */
951 makebdaddr(bdaddr_t
*bdaddr
)
953 char buf
[(6 * 2) + 5 + 1];
955 sprintf(buf
, "%02X:%02X:%02X:%02X:%02X:%02X",
956 bdaddr
->b
[5], bdaddr
->b
[4], bdaddr
->b
[3],
957 bdaddr
->b
[2], bdaddr
->b
[1], bdaddr
->b
[0]);
958 return PyString_FromString(buf
);
963 /* Create an object representing the given socket address,
964 suitable for passing it back to bind(), connect() etc.
965 The family field of the sockaddr structure is inspected
966 to determine what kind of address it really is. */
970 makesockaddr(int sockfd
, struct sockaddr
*addr
, int addrlen
, int proto
)
973 /* No address -- may be recvfrom() from known socket */
979 /* XXX: BeOS version of accept() doesn't set family correctly */
980 addr
->sa_family
= AF_INET
;
983 switch (addr
->sa_family
) {
987 struct sockaddr_in
*a
;
988 PyObject
*addrobj
= makeipaddr(addr
, sizeof(*a
));
989 PyObject
*ret
= NULL
;
991 a
= (struct sockaddr_in
*)addr
;
992 ret
= Py_BuildValue("Oi", addrobj
, ntohs(a
->sin_port
));
1001 struct sockaddr_un
*a
= (struct sockaddr_un
*) addr
;
1003 if (a
->sun_path
[0] == 0) { /* Linux abstract namespace */
1004 addrlen
-= offsetof(struct sockaddr_un
, sun_path
);
1005 return PyString_FromStringAndSize(a
->sun_path
,
1011 /* regular NULL-terminated string */
1012 return PyString_FromString(a
->sun_path
);
1015 #endif /* AF_UNIX */
1017 #if defined(AF_NETLINK)
1020 struct sockaddr_nl
*a
= (struct sockaddr_nl
*) addr
;
1021 return Py_BuildValue("II", a
->nl_pid
, a
->nl_groups
);
1023 #endif /* AF_NETLINK */
1028 struct sockaddr_in6
*a
;
1029 PyObject
*addrobj
= makeipaddr(addr
, sizeof(*a
));
1030 PyObject
*ret
= NULL
;
1032 a
= (struct sockaddr_in6
*)addr
;
1033 ret
= Py_BuildValue("Oiii",
1035 ntohs(a
->sin6_port
),
1044 #ifdef USE_BLUETOOTH
1050 struct sockaddr_l2
*a
= (struct sockaddr_l2
*) addr
;
1051 PyObject
*addrobj
= makebdaddr(&_BT_L2_MEMB(a
, bdaddr
));
1052 PyObject
*ret
= NULL
;
1054 ret
= Py_BuildValue("Oi",
1056 _BT_L2_MEMB(a
, psm
));
1062 case BTPROTO_RFCOMM
:
1064 struct sockaddr_rc
*a
= (struct sockaddr_rc
*) addr
;
1065 PyObject
*addrobj
= makebdaddr(&_BT_RC_MEMB(a
, bdaddr
));
1066 PyObject
*ret
= NULL
;
1068 ret
= Py_BuildValue("Oi",
1070 _BT_RC_MEMB(a
, channel
));
1078 struct sockaddr_hci
*a
= (struct sockaddr_hci
*) addr
;
1079 PyObject
*ret
= NULL
;
1080 ret
= Py_BuildValue("i", _BT_HCI_MEMB(a
, dev
));
1084 #if !defined(__FreeBSD__)
1087 struct sockaddr_sco
*a
= (struct sockaddr_sco
*) addr
;
1088 return makebdaddr(&_BT_SCO_MEMB(a
, bdaddr
));
1095 #ifdef HAVE_NETPACKET_PACKET_H
1098 struct sockaddr_ll
*a
= (struct sockaddr_ll
*)addr
;
1101 /* need to look up interface name give index */
1102 if (a
->sll_ifindex
) {
1103 ifr
.ifr_ifindex
= a
->sll_ifindex
;
1104 if (ioctl(sockfd
, SIOCGIFNAME
, &ifr
) == 0)
1105 ifname
= ifr
.ifr_name
;
1107 return Py_BuildValue("shbhs#",
1109 ntohs(a
->sll_protocol
),
1117 #ifdef HAVE_LINUX_TIPC_H
1120 struct sockaddr_tipc
*a
= (struct sockaddr_tipc
*) addr
;
1121 if (a
->addrtype
== TIPC_ADDR_NAMESEQ
) {
1122 return Py_BuildValue("IIIII",
1124 a
->addr
.nameseq
.type
,
1125 a
->addr
.nameseq
.lower
,
1126 a
->addr
.nameseq
.upper
,
1128 } else if (a
->addrtype
== TIPC_ADDR_NAME
) {
1129 return Py_BuildValue("IIIII",
1131 a
->addr
.name
.name
.type
,
1132 a
->addr
.name
.name
.instance
,
1133 a
->addr
.name
.name
.instance
,
1135 } else if (a
->addrtype
== TIPC_ADDR_ID
) {
1136 return Py_BuildValue("IIIII",
1143 PyErr_SetString(PyExc_TypeError
,
1144 "Invalid address type");
1150 /* More cases here... */
1153 /* If we don't know the address family, don't raise an
1154 exception -- return it as a tuple. */
1155 return Py_BuildValue("is#",
1158 sizeof(addr
->sa_data
));
1164 /* Parse a socket address argument according to the socket object's
1165 address family. Return 1 if the address was in the proper format,
1166 0 of not. The address is returned through addr_ret, its length
1170 getsockaddrarg(PySocketSockObject
*s
, PyObject
*args
,
1171 struct sockaddr
*addr_ret
, int *len_ret
)
1173 switch (s
->sock_family
) {
1175 #if defined(AF_UNIX)
1178 struct sockaddr_un
* addr
;
1181 if (!PyArg_Parse(args
, "t#", &path
, &len
))
1184 addr
= (struct sockaddr_un
*)addr_ret
;
1186 if (len
> 0 && path
[0] == 0) {
1187 /* Linux abstract namespace extension */
1188 if (len
> sizeof addr
->sun_path
) {
1189 PyErr_SetString(socket_error
,
1190 "AF_UNIX path too long");
1197 /* regular NULL-terminated string */
1198 if (len
>= sizeof addr
->sun_path
) {
1199 PyErr_SetString(socket_error
,
1200 "AF_UNIX path too long");
1203 addr
->sun_path
[len
] = 0;
1205 addr
->sun_family
= s
->sock_family
;
1206 memcpy(addr
->sun_path
, path
, len
);
1207 #if defined(PYOS_OS2)
1208 *len_ret
= sizeof(*addr
);
1210 *len_ret
= len
+ offsetof(struct sockaddr_un
, sun_path
);
1214 #endif /* AF_UNIX */
1216 #if defined(AF_NETLINK)
1219 struct sockaddr_nl
* addr
;
1221 addr
= (struct sockaddr_nl
*)addr_ret
;
1222 if (!PyTuple_Check(args
)) {
1226 "AF_NETLINK address must be tuple, not %.500s",
1227 Py_TYPE(args
)->tp_name
);
1230 if (!PyArg_ParseTuple(args
, "II:getsockaddrarg", &pid
, &groups
))
1232 addr
->nl_family
= AF_NETLINK
;
1234 addr
->nl_groups
= groups
;
1235 *len_ret
= sizeof(*addr
);
1242 struct sockaddr_in
* addr
;
1245 if (!PyTuple_Check(args
)) {
1249 "AF_INET address must be tuple, not %.500s",
1250 Py_TYPE(args
)->tp_name
);
1253 if (!PyArg_ParseTuple(args
, "eti:getsockaddrarg",
1254 "idna", &host
, &port
))
1256 addr
=(struct sockaddr_in
*)addr_ret
;
1257 result
= setipaddr(host
, (struct sockaddr
*)addr
,
1258 sizeof(*addr
), AF_INET
);
1262 if (port
< 0 || port
> 0xffff) {
1264 PyExc_OverflowError
,
1265 "getsockaddrarg: port must be 0-65535.");
1268 addr
->sin_family
= AF_INET
;
1269 addr
->sin_port
= htons((short)port
);
1270 *len_ret
= sizeof *addr
;
1277 struct sockaddr_in6
* addr
;
1279 int port
, flowinfo
, scope_id
, result
;
1280 flowinfo
= scope_id
= 0;
1281 if (!PyTuple_Check(args
)) {
1285 "AF_INET6 address must be tuple, not %.500s",
1286 Py_TYPE(args
)->tp_name
);
1289 if (!PyArg_ParseTuple(args
, "eti|ii",
1290 "idna", &host
, &port
, &flowinfo
,
1294 addr
= (struct sockaddr_in6
*)addr_ret
;
1295 result
= setipaddr(host
, (struct sockaddr
*)addr
,
1296 sizeof(*addr
), AF_INET6
);
1300 if (port
< 0 || port
> 0xffff) {
1302 PyExc_OverflowError
,
1303 "getsockaddrarg: port must be 0-65535.");
1306 addr
->sin6_family
= s
->sock_family
;
1307 addr
->sin6_port
= htons((short)port
);
1308 addr
->sin6_flowinfo
= flowinfo
;
1309 addr
->sin6_scope_id
= scope_id
;
1310 *len_ret
= sizeof *addr
;
1315 #ifdef USE_BLUETOOTH
1318 switch (s
->sock_proto
) {
1321 struct sockaddr_l2
*addr
;
1324 addr
= (struct sockaddr_l2
*)addr_ret
;
1325 _BT_L2_MEMB(addr
, family
) = AF_BLUETOOTH
;
1326 if (!PyArg_ParseTuple(args
, "si", &straddr
,
1327 &_BT_L2_MEMB(addr
, psm
))) {
1328 PyErr_SetString(socket_error
, "getsockaddrarg: "
1332 if (setbdaddr(straddr
, &_BT_L2_MEMB(addr
, bdaddr
)) < 0)
1335 *len_ret
= sizeof *addr
;
1338 case BTPROTO_RFCOMM
:
1340 struct sockaddr_rc
*addr
;
1343 addr
= (struct sockaddr_rc
*)addr_ret
;
1344 _BT_RC_MEMB(addr
, family
) = AF_BLUETOOTH
;
1345 if (!PyArg_ParseTuple(args
, "si", &straddr
,
1346 &_BT_RC_MEMB(addr
, channel
))) {
1347 PyErr_SetString(socket_error
, "getsockaddrarg: "
1351 if (setbdaddr(straddr
, &_BT_RC_MEMB(addr
, bdaddr
)) < 0)
1354 *len_ret
= sizeof *addr
;
1359 struct sockaddr_hci
*addr
= (struct sockaddr_hci
*)addr_ret
;
1360 _BT_HCI_MEMB(addr
, family
) = AF_BLUETOOTH
;
1361 if (!PyArg_ParseTuple(args
, "i", &_BT_HCI_MEMB(addr
, dev
))) {
1362 PyErr_SetString(socket_error
, "getsockaddrarg: "
1366 *len_ret
= sizeof *addr
;
1369 #if !defined(__FreeBSD__)
1372 struct sockaddr_sco
*addr
;
1375 addr
= (struct sockaddr_sco
*)addr_ret
;
1376 _BT_SCO_MEMB(addr
, family
) = AF_BLUETOOTH
;
1377 straddr
= PyString_AsString(args
);
1378 if (straddr
== NULL
) {
1379 PyErr_SetString(socket_error
, "getsockaddrarg: "
1383 if (setbdaddr(straddr
, &_BT_SCO_MEMB(addr
, bdaddr
)) < 0)
1386 *len_ret
= sizeof *addr
;
1391 PyErr_SetString(socket_error
, "getsockaddrarg: unknown Bluetooth protocol");
1397 #ifdef HAVE_NETPACKET_PACKET_H
1400 struct sockaddr_ll
* addr
;
1402 char *interfaceName
;
1407 unsigned int halen
= 0;
1409 if (!PyTuple_Check(args
)) {
1413 "AF_PACKET address must be tuple, not %.500s",
1414 Py_TYPE(args
)->tp_name
);
1417 if (!PyArg_ParseTuple(args
, "si|iis#", &interfaceName
,
1418 &protoNumber
, &pkttype
, &hatype
,
1421 strncpy(ifr
.ifr_name
, interfaceName
, sizeof(ifr
.ifr_name
));
1422 ifr
.ifr_name
[(sizeof(ifr
.ifr_name
))-1] = '\0';
1423 if (ioctl(s
->sock_fd
, SIOCGIFINDEX
, &ifr
) < 0) {
1428 PyErr_SetString(PyExc_ValueError
,
1429 "Hardware address must be 8 bytes or less");
1432 if (protoNumber
< 0 || protoNumber
> 0xffff) {
1434 PyExc_OverflowError
,
1435 "getsockaddrarg: protoNumber must be 0-65535.");
1438 addr
= (struct sockaddr_ll
*)addr_ret
;
1439 addr
->sll_family
= AF_PACKET
;
1440 addr
->sll_protocol
= htons((short)protoNumber
);
1441 addr
->sll_ifindex
= ifr
.ifr_ifindex
;
1442 addr
->sll_pkttype
= pkttype
;
1443 addr
->sll_hatype
= hatype
;
1445 memcpy(&addr
->sll_addr
, haddr
, halen
);
1447 addr
->sll_halen
= halen
;
1448 *len_ret
= sizeof *addr
;
1453 #ifdef HAVE_LINUX_TIPC_H
1456 unsigned int atype
, v1
, v2
, v3
;
1457 unsigned int scope
= TIPC_CLUSTER_SCOPE
;
1458 struct sockaddr_tipc
*addr
;
1460 if (!PyTuple_Check(args
)) {
1464 "AF_TIPC address must be tuple, not %.500s",
1465 Py_TYPE(args
)->tp_name
);
1469 if (!PyArg_ParseTuple(args
,
1470 "IIII|I;Invalid TIPC address format",
1471 &atype
, &v1
, &v2
, &v3
, &scope
))
1474 addr
= (struct sockaddr_tipc
*) addr_ret
;
1475 memset(addr
, 0, sizeof(struct sockaddr_tipc
));
1477 addr
->family
= AF_TIPC
;
1478 addr
->scope
= scope
;
1479 addr
->addrtype
= atype
;
1481 if (atype
== TIPC_ADDR_NAMESEQ
) {
1482 addr
->addr
.nameseq
.type
= v1
;
1483 addr
->addr
.nameseq
.lower
= v2
;
1484 addr
->addr
.nameseq
.upper
= v3
;
1485 } else if (atype
== TIPC_ADDR_NAME
) {
1486 addr
->addr
.name
.name
.type
= v1
;
1487 addr
->addr
.name
.name
.instance
= v2
;
1488 } else if (atype
== TIPC_ADDR_ID
) {
1489 addr
->addr
.id
.node
= v1
;
1490 addr
->addr
.id
.ref
= v2
;
1492 /* Shouldn't happen */
1493 PyErr_SetString(PyExc_TypeError
, "Invalid address type");
1497 *len_ret
= sizeof(*addr
);
1503 /* More cases here... */
1506 PyErr_SetString(socket_error
, "getsockaddrarg: bad family");
1513 /* Get the address length according to the socket object's address family.
1514 Return 1 if the family is known, 0 otherwise. The length is returned
1518 getsockaddrlen(PySocketSockObject
*s
, socklen_t
*len_ret
)
1520 switch (s
->sock_family
) {
1522 #if defined(AF_UNIX)
1525 *len_ret
= sizeof (struct sockaddr_un
);
1528 #endif /* AF_UNIX */
1529 #if defined(AF_NETLINK)
1532 *len_ret
= sizeof (struct sockaddr_nl
);
1539 *len_ret
= sizeof (struct sockaddr_in
);
1546 *len_ret
= sizeof (struct sockaddr_in6
);
1551 #ifdef USE_BLUETOOTH
1554 switch(s
->sock_proto
)
1558 *len_ret
= sizeof (struct sockaddr_l2
);
1560 case BTPROTO_RFCOMM
:
1561 *len_ret
= sizeof (struct sockaddr_rc
);
1564 *len_ret
= sizeof (struct sockaddr_hci
);
1566 #if !defined(__FreeBSD__)
1568 *len_ret
= sizeof (struct sockaddr_sco
);
1572 PyErr_SetString(socket_error
, "getsockaddrlen: "
1573 "unknown BT protocol");
1580 #ifdef HAVE_NETPACKET_PACKET_H
1583 *len_ret
= sizeof (struct sockaddr_ll
);
1588 #ifdef HAVE_LINUX_TIPC_H
1591 *len_ret
= sizeof (struct sockaddr_tipc
);
1596 /* More cases here... */
1599 PyErr_SetString(socket_error
, "getsockaddrlen: bad family");
1606 /* s.accept() method */
1609 sock_accept(PySocketSockObject
*s
)
1611 sock_addr_t addrbuf
;
1614 PyObject
*sock
= NULL
;
1615 PyObject
*addr
= NULL
;
1616 PyObject
*res
= NULL
;
1619 if (!getsockaddrlen(s
, &addrlen
))
1621 memset(&addrbuf
, 0, addrlen
);
1624 newfd
= INVALID_SOCKET
;
1629 if (!IS_SELECTABLE(s
))
1630 return select_error();
1632 Py_BEGIN_ALLOW_THREADS
1633 timeout
= internal_select(s
, 0);
1635 newfd
= accept(s
->sock_fd
, SAS2SA(&addrbuf
), &addrlen
);
1636 Py_END_ALLOW_THREADS
1639 PyErr_SetString(socket_timeout
, "timed out");
1644 if (newfd
== INVALID_SOCKET
)
1648 return s
->errorhandler();
1650 /* Create the new object with unspecified family,
1651 to avoid calls to bind() etc. on it. */
1652 sock
= (PyObject
*) new_sockobject(newfd
,
1661 addr
= makesockaddr(s
->sock_fd
, SAS2SA(&addrbuf
),
1662 addrlen
, s
->sock_proto
);
1666 res
= PyTuple_Pack(2, sock
, addr
);
1674 PyDoc_STRVAR(accept_doc
,
1675 "accept() -> (socket object, address info)\n\
1677 Wait for an incoming connection. Return a new socket representing the\n\
1678 connection, and the address of the client. For IP sockets, the address\n\
1679 info is a pair (hostaddr, port).");
1681 /* s.setblocking(flag) method. Argument:
1682 False -- non-blocking mode; same as settimeout(0)
1683 True -- blocking mode; same as settimeout(None)
1687 sock_setblocking(PySocketSockObject
*s
, PyObject
*arg
)
1691 block
= PyInt_AsLong(arg
);
1692 if (block
== -1 && PyErr_Occurred())
1695 s
->sock_timeout
= block
? -1.0 : 0.0;
1696 internal_setblocking(s
, block
);
1702 PyDoc_STRVAR(setblocking_doc
,
1703 "setblocking(flag)\n\
1705 Set the socket to blocking (flag is true) or non-blocking (false).\n\
1706 setblocking(True) is equivalent to settimeout(None);\n\
1707 setblocking(False) is equivalent to settimeout(0.0).");
1709 /* s.settimeout(timeout) method. Argument:
1710 None -- no timeout, blocking mode; same as setblocking(True)
1711 0.0 -- non-blocking mode; same as setblocking(False)
1712 > 0 -- timeout mode; operations time out after timeout seconds
1713 < 0 -- illegal; raises an exception
1716 sock_settimeout(PySocketSockObject
*s
, PyObject
*arg
)
1723 timeout
= PyFloat_AsDouble(arg
);
1724 if (timeout
< 0.0) {
1725 if (!PyErr_Occurred())
1726 PyErr_SetString(PyExc_ValueError
,
1727 "Timeout value out of range");
1732 s
->sock_timeout
= timeout
;
1733 internal_setblocking(s
, timeout
< 0.0);
1739 PyDoc_STRVAR(settimeout_doc
,
1740 "settimeout(timeout)\n\
1742 Set a timeout on socket operations. 'timeout' can be a float,\n\
1743 giving in seconds, or None. Setting a timeout of None disables\n\
1744 the timeout feature and is equivalent to setblocking(1).\n\
1745 Setting a timeout of zero is the same as setblocking(0).");
1747 /* s.gettimeout() method.
1748 Returns the timeout associated with a socket. */
1750 sock_gettimeout(PySocketSockObject
*s
)
1752 if (s
->sock_timeout
< 0.0) {
1757 return PyFloat_FromDouble(s
->sock_timeout
);
1760 PyDoc_STRVAR(gettimeout_doc
,
1761 "gettimeout() -> timeout\n\
1763 Returns the timeout in floating seconds associated with socket \n\
1764 operations. A timeout of None indicates that timeouts on socket \n\
1765 operations are disabled.");
1768 /* s.sleeptaskw(1 | 0) method */
1771 sock_sleeptaskw(PySocketSockObject
*s
,PyObject
*arg
)
1774 block
= PyInt_AsLong(arg
);
1775 if (block
== -1 && PyErr_Occurred())
1777 Py_BEGIN_ALLOW_THREADS
1778 socketioctl(s
->sock_fd
, 0x80046679, (u_long
*)&block
);
1779 Py_END_ALLOW_THREADS
1784 PyDoc_STRVAR(sleeptaskw_doc
,
1785 "sleeptaskw(flag)\n\
1787 Allow sleeps in taskwindows.");
1791 /* s.setsockopt() method.
1792 With an integer third argument, sets an integer option.
1793 With a string third argument, sets an option from a buffer;
1794 use optional built-in module 'struct' to encode the string. */
1797 sock_setsockopt(PySocketSockObject
*s
, PyObject
*args
)
1806 if (PyArg_ParseTuple(args
, "iii:setsockopt",
1807 &level
, &optname
, &flag
)) {
1808 buf
= (char *) &flag
;
1809 buflen
= sizeof flag
;
1813 if (!PyArg_ParseTuple(args
, "iis#:setsockopt",
1814 &level
, &optname
, &buf
, &buflen
))
1817 res
= setsockopt(s
->sock_fd
, level
, optname
, (void *)buf
, buflen
);
1819 return s
->errorhandler();
1824 PyDoc_STRVAR(setsockopt_doc
,
1825 "setsockopt(level, option, value)\n\
1827 Set a socket option. See the Unix manual for level and option.\n\
1828 The value argument can either be an integer or a string.");
1831 /* s.getsockopt() method.
1832 With two arguments, retrieves an integer option.
1833 With a third integer argument, retrieves a string buffer of that size;
1834 use optional built-in module 'struct' to decode the string. */
1837 sock_getsockopt(PySocketSockObject
*s
, PyObject
*args
)
1843 socklen_t buflen
= 0;
1846 /* We have incomplete socket support. */
1847 PyErr_SetString(socket_error
, "getsockopt not supported");
1851 if (!PyArg_ParseTuple(args
, "ii|i:getsockopt",
1852 &level
, &optname
, &buflen
))
1857 socklen_t flagsize
= sizeof flag
;
1858 res
= getsockopt(s
->sock_fd
, level
, optname
,
1859 (void *)&flag
, &flagsize
);
1861 return s
->errorhandler();
1862 return PyInt_FromLong(flag
);
1865 /* socklen_t is unsigned so no negative test is needed,
1866 test buflen == 0 is previously done */
1867 if (buflen
> 1024) {
1869 if (buflen
<= 0 || buflen
> 1024) {
1871 PyErr_SetString(socket_error
,
1872 "getsockopt buflen out of range");
1875 buf
= PyString_FromStringAndSize((char *)NULL
, buflen
);
1878 res
= getsockopt(s
->sock_fd
, level
, optname
,
1879 (void *)PyString_AS_STRING(buf
), &buflen
);
1882 return s
->errorhandler();
1884 _PyString_Resize(&buf
, buflen
);
1886 #endif /* __BEOS__ */
1889 PyDoc_STRVAR(getsockopt_doc
,
1890 "getsockopt(level, option[, buffersize]) -> value\n\
1892 Get a socket option. See the Unix manual for level and option.\n\
1893 If a nonzero buffersize argument is given, the return value is a\n\
1894 string of that length; otherwise it is an integer.");
1897 /* s.bind(sockaddr) method */
1900 sock_bind(PySocketSockObject
*s
, PyObject
*addro
)
1902 sock_addr_t addrbuf
;
1906 if (!getsockaddrarg(s
, addro
, SAS2SA(&addrbuf
), &addrlen
))
1908 Py_BEGIN_ALLOW_THREADS
1909 res
= bind(s
->sock_fd
, SAS2SA(&addrbuf
), addrlen
);
1910 Py_END_ALLOW_THREADS
1912 return s
->errorhandler();
1917 PyDoc_STRVAR(bind_doc
,
1920 Bind the socket to a local address. For IP sockets, the address is a\n\
1921 pair (host, port); the host must refer to the local host. For raw packet\n\
1922 sockets the address is a tuple (ifname, proto [,pkttype [,hatype]])");
1925 /* s.close() method.
1926 Set the file descriptor to -1 so operations tried subsequently
1927 will surely fail. */
1930 sock_close(PySocketSockObject
*s
)
1934 if ((fd
= s
->sock_fd
) != -1) {
1936 Py_BEGIN_ALLOW_THREADS
1937 (void) SOCKETCLOSE(fd
);
1938 Py_END_ALLOW_THREADS
1944 PyDoc_STRVAR(close_doc
,
1947 Close the socket. It cannot be used after this call.");
1950 internal_connect(PySocketSockObject
*s
, struct sockaddr
*addr
, int addrlen
,
1956 res
= connect(s
->sock_fd
, addr
, addrlen
);
1960 if (s
->sock_timeout
> 0.0) {
1961 if (res
< 0 && WSAGetLastError() == WSAEWOULDBLOCK
&&
1963 /* This is a mess. Best solution: trust select */
1967 tv
.tv_sec
= (int)s
->sock_timeout
;
1968 tv
.tv_usec
= (int)((s
->sock_timeout
- tv
.tv_sec
) * 1e6
);
1970 FD_SET(s
->sock_fd
, &fds
);
1972 FD_SET(s
->sock_fd
, &fds_exc
);
1973 res
= select(s
->sock_fd
+1, NULL
, &fds
, &fds_exc
, &tv
);
1975 res
= WSAEWOULDBLOCK
;
1977 } else if (res
> 0) {
1978 if (FD_ISSET(s
->sock_fd
, &fds
))
1979 /* The socket is in the writeable set - this
1983 /* As per MS docs, we need to call getsockopt()
1984 to get the underlying error */
1985 int res_size
= sizeof res
;
1986 /* It must be in the exception set */
1987 assert(FD_ISSET(s
->sock_fd
, &fds_exc
));
1988 if (0 == getsockopt(s
->sock_fd
, SOL_SOCKET
, SO_ERROR
,
1989 (char *)&res
, &res_size
))
1990 /* getsockopt also clears WSAGetLastError,
1991 so reset it back. */
1992 WSASetLastError(res
);
1994 res
= WSAGetLastError();
1997 /* else if (res < 0) an error occurred */
2002 res
= WSAGetLastError();
2006 if (s
->sock_timeout
> 0.0) {
2007 if (res
< 0 && errno
== EINPROGRESS
&& IS_SELECTABLE(s
)) {
2008 timeout
= internal_select(s
, 1);
2010 /* Bug #1019808: in case of an EINPROGRESS,
2011 use getsockopt(SO_ERROR) to get the real
2013 socklen_t res_size
= sizeof res
;
2014 (void)getsockopt(s
->sock_fd
, SOL_SOCKET
,
2015 SO_ERROR
, &res
, &res_size
);
2020 else if (timeout
== -1) {
2021 res
= errno
; /* had error */
2024 res
= EWOULDBLOCK
; /* timed out */
2032 *timeoutp
= timeout
;
2037 /* s.connect(sockaddr) method */
2040 sock_connect(PySocketSockObject
*s
, PyObject
*addro
)
2042 sock_addr_t addrbuf
;
2047 if (!getsockaddrarg(s
, addro
, SAS2SA(&addrbuf
), &addrlen
))
2050 Py_BEGIN_ALLOW_THREADS
2051 res
= internal_connect(s
, SAS2SA(&addrbuf
), addrlen
, &timeout
);
2052 Py_END_ALLOW_THREADS
2055 PyErr_SetString(socket_timeout
, "timed out");
2059 return s
->errorhandler();
2064 PyDoc_STRVAR(connect_doc
,
2065 "connect(address)\n\
2067 Connect the socket to a remote address. For IP sockets, the address\n\
2068 is a pair (host, port).");
2071 /* s.connect_ex(sockaddr) method */
2074 sock_connect_ex(PySocketSockObject
*s
, PyObject
*addro
)
2076 sock_addr_t addrbuf
;
2081 if (!getsockaddrarg(s
, addro
, SAS2SA(&addrbuf
), &addrlen
))
2084 Py_BEGIN_ALLOW_THREADS
2085 res
= internal_connect(s
, SAS2SA(&addrbuf
), addrlen
, &timeout
);
2086 Py_END_ALLOW_THREADS
2088 /* Signals are not errors (though they may raise exceptions). Adapted
2089 from PyErr_SetFromErrnoWithFilenameObject(). */
2091 if (res
== EINTR
&& PyErr_CheckSignals())
2095 return PyInt_FromLong((long) res
);
2098 PyDoc_STRVAR(connect_ex_doc
,
2099 "connect_ex(address) -> errno\n\
2101 This is like connect(address), but returns an error code (the errno value)\n\
2102 instead of raising an exception when an error occurs.");
2105 /* s.fileno() method */
2108 sock_fileno(PySocketSockObject
*s
)
2110 #if SIZEOF_SOCKET_T <= SIZEOF_LONG
2111 return PyInt_FromLong((long) s
->sock_fd
);
2113 return PyLong_FromLongLong((PY_LONG_LONG
)s
->sock_fd
);
2117 PyDoc_STRVAR(fileno_doc
,
2118 "fileno() -> integer\n\
2120 Return the integer file descriptor of the socket.");
2124 /* s.dup() method */
2127 sock_dup(PySocketSockObject
*s
)
2132 newfd
= dup(s
->sock_fd
);
2134 return s
->errorhandler();
2135 sock
= (PyObject
*) new_sockobject(newfd
,
2144 PyDoc_STRVAR(dup_doc
,
2145 "dup() -> socket object\n\
2147 Return a new socket object connected to the same system resource.");
2152 /* s.getsockname() method */
2155 sock_getsockname(PySocketSockObject
*s
)
2157 sock_addr_t addrbuf
;
2161 if (!getsockaddrlen(s
, &addrlen
))
2163 memset(&addrbuf
, 0, addrlen
);
2164 Py_BEGIN_ALLOW_THREADS
2165 res
= getsockname(s
->sock_fd
, SAS2SA(&addrbuf
), &addrlen
);
2166 Py_END_ALLOW_THREADS
2168 return s
->errorhandler();
2169 return makesockaddr(s
->sock_fd
, SAS2SA(&addrbuf
), addrlen
,
2173 PyDoc_STRVAR(getsockname_doc
,
2174 "getsockname() -> address info\n\
2176 Return the address of the local endpoint. For IP sockets, the address\n\
2177 info is a pair (hostaddr, port).");
2180 #ifdef HAVE_GETPEERNAME /* Cray APP doesn't have this :-( */
2181 /* s.getpeername() method */
2184 sock_getpeername(PySocketSockObject
*s
)
2186 sock_addr_t addrbuf
;
2190 if (!getsockaddrlen(s
, &addrlen
))
2192 memset(&addrbuf
, 0, addrlen
);
2193 Py_BEGIN_ALLOW_THREADS
2194 res
= getpeername(s
->sock_fd
, SAS2SA(&addrbuf
), &addrlen
);
2195 Py_END_ALLOW_THREADS
2197 return s
->errorhandler();
2198 return makesockaddr(s
->sock_fd
, SAS2SA(&addrbuf
), addrlen
,
2202 PyDoc_STRVAR(getpeername_doc
,
2203 "getpeername() -> address info\n\
2205 Return the address of the remote endpoint. For IP sockets, the address\n\
2206 info is a pair (hostaddr, port).");
2208 #endif /* HAVE_GETPEERNAME */
2211 /* s.listen(n) method */
2214 sock_listen(PySocketSockObject
*s
, PyObject
*arg
)
2219 backlog
= PyInt_AsLong(arg
);
2220 if (backlog
== -1 && PyErr_Occurred())
2222 Py_BEGIN_ALLOW_THREADS
2225 res
= listen(s
->sock_fd
, backlog
);
2226 Py_END_ALLOW_THREADS
2228 return s
->errorhandler();
2233 PyDoc_STRVAR(listen_doc
,
2236 Enable a server to accept connections. The backlog argument must be at\n\
2237 least 1; it specifies the number of unaccepted connection that the system\n\
2238 will allow before refusing new connections.");
2242 /* s.makefile(mode) method.
2243 Create a new open file object referring to a dupped version of
2244 the socket's file descriptor. (The dup() call is necessary so
2245 that the open file and socket objects may be closed independent
2247 The mode argument specifies 'r' or 'w' passed to fdopen(). */
2250 sock_makefile(PySocketSockObject
*s
, PyObject
*args
)
2252 extern int fclose(FILE *);
2267 if (!PyArg_ParseTuple(args
, "|si:makefile", &mode
, &bufsize
))
2270 if (strcmp(mode
,"rb") == 0) {
2274 if (strcmp(mode
,"wb") == 0) {
2280 if (((fd
= _open_osfhandle(s
->sock_fd
, _O_BINARY
)) < 0) ||
2281 ((fd
= dup(fd
)) < 0) || ((fp
= fdopen(fd
, mode
)) == NULL
))
2283 if ((fd
= dup(s
->sock_fd
)) < 0 || (fp
= fdopen(fd
, mode
)) == NULL
)
2288 return s
->errorhandler();
2290 f
= PyFile_FromFile(fp
, "<socket>", mode
, fclose
);
2292 PyFile_SetBufSize(f
, bufsize
);
2296 PyDoc_STRVAR(makefile_doc
,
2297 "makefile([mode[, buffersize]]) -> file object\n\
2299 Return a regular file object corresponding to the socket.\n\
2300 The mode and buffersize arguments are as for the built-in open() function.");
2305 * This is the guts of the recv() and recv_into() methods, which reads into a
2306 * char buffer. If you have any inc/dec ref to do to the objects that contain
2307 * the buffer, do it in the caller. This function returns the number of bytes
2308 * succesfully read. If there was an error, it returns -1. Note that it is
2309 * also possible that we return a number of bytes smaller than the request
2313 sock_recv_guts(PySocketSockObject
*s
, char* cbuf
, int len
, int flags
)
2315 ssize_t outlen
= -1;
2322 if (!IS_SELECTABLE(s
)) {
2328 Py_BEGIN_ALLOW_THREADS
2329 timeout
= internal_select(s
, 0);
2331 outlen
= recv(s
->sock_fd
, cbuf
, len
, flags
);
2332 Py_END_ALLOW_THREADS
2335 PyErr_SetString(socket_timeout
, "timed out");
2339 /* Note: the call to errorhandler() ALWAYS indirectly returned
2340 NULL, so ignore its return value */
2347 while (remaining
!= 0) {
2348 unsigned int segment
;
2351 segment
= remaining
/SEGMENT_SIZE
;
2353 segment
= SEGMENT_SIZE
;
2356 segment
= remaining
;
2359 Py_BEGIN_ALLOW_THREADS
2360 timeout
= internal_select(s
, 0);
2362 nread
= recv(s
->sock_fd
, read_buf
, segment
, flags
);
2363 Py_END_ALLOW_THREADS
2366 PyErr_SetString(socket_timeout
, "timed out");
2373 if (nread
!= remaining
) {
2378 remaining
-= segment
;
2379 read_buf
+= segment
;
2381 outlen
= read_buf
- cbuf
;
2388 /* s.recv(nbytes [,flags]) method */
2391 sock_recv(PySocketSockObject
*s
, PyObject
*args
)
2393 int recvlen
, flags
= 0;
2397 if (!PyArg_ParseTuple(args
, "i|i:recv", &recvlen
, &flags
))
2401 PyErr_SetString(PyExc_ValueError
,
2402 "negative buffersize in recv");
2406 /* Allocate a new string. */
2407 buf
= PyString_FromStringAndSize((char *) 0, recvlen
);
2412 outlen
= sock_recv_guts(s
, PyString_AS_STRING(buf
), recvlen
, flags
);
2414 /* An error occurred, release the string and return an
2419 if (outlen
!= recvlen
) {
2420 /* We did not read as many bytes as we anticipated, resize the
2421 string if possible and be succesful. */
2422 if (_PyString_Resize(&buf
, outlen
) < 0)
2423 /* Oopsy, not so succesful after all. */
2430 PyDoc_STRVAR(recv_doc
,
2431 "recv(buffersize[, flags]) -> data\n\
2433 Receive up to buffersize bytes from the socket. For the optional flags\n\
2434 argument, see the Unix manual. When no data is available, block until\n\
2435 at least one byte is available or until the remote end is closed. When\n\
2436 the remote end is closed and all data is read, return the empty string.");
2439 /* s.recv_into(buffer, [nbytes [,flags]]) method */
2442 sock_recv_into(PySocketSockObject
*s
, PyObject
*args
, PyObject
*kwds
)
2444 static char *kwlist
[] = {"buffer", "nbytes", "flags", 0};
2446 int recvlen
= 0, flags
= 0;
2451 /* Get the buffer's memory */
2452 if (!PyArg_ParseTupleAndKeywords(args
, kwds
, "w#|ii:recv_into", kwlist
,
2453 &buf
, &buflen
, &recvlen
, &flags
))
2455 assert(buf
!= 0 && buflen
> 0);
2458 PyErr_SetString(PyExc_ValueError
,
2459 "negative buffersize in recv_into");
2463 /* If nbytes was not specified, use the buffer's length */
2467 /* Check if the buffer is large enough */
2468 if (buflen
< recvlen
) {
2469 PyErr_SetString(PyExc_ValueError
,
2470 "buffer too small for requested bytes");
2475 readlen
= sock_recv_guts(s
, buf
, recvlen
, flags
);
2477 /* Return an error. */
2481 /* Return the number of bytes read. Note that we do not do anything
2482 special here in the case that readlen < recvlen. */
2483 return PyInt_FromSsize_t(readlen
);
2486 PyDoc_STRVAR(recv_into_doc
,
2487 "recv_into(buffer, [nbytes[, flags]]) -> nbytes_read\n\
2489 A version of recv() that stores its data into a buffer rather than creating \n\
2490 a new string. Receive up to buffersize bytes from the socket. If buffersize \n\
2491 is not specified (or 0), receive up to the size available in the given buffer.\n\
2493 See recv() for documentation about the flags.");
2497 * This is the guts of the recvfrom() and recvfrom_into() methods, which reads
2498 * into a char buffer. If you have any inc/def ref to do to the objects that
2499 * contain the buffer, do it in the caller. This function returns the number
2500 * of bytes succesfully read. If there was an error, it returns -1. Note
2501 * that it is also possible that we return a number of bytes smaller than the
2504 * 'addr' is a return value for the address object. Note that you must decref
2508 sock_recvfrom_guts(PySocketSockObject
*s
, char* cbuf
, int len
, int flags
,
2511 sock_addr_t addrbuf
;
2518 if (!getsockaddrlen(s
, &addrlen
))
2521 if (!IS_SELECTABLE(s
)) {
2526 Py_BEGIN_ALLOW_THREADS
2527 memset(&addrbuf
, 0, addrlen
);
2528 timeout
= internal_select(s
, 0);
2531 #if defined(PYOS_OS2) && !defined(PYCC_GCC)
2532 n
= recvfrom(s
->sock_fd
, cbuf
, len
, flags
,
2533 SAS2SA(&addrbuf
), &addrlen
);
2535 n
= recvfrom(s
->sock_fd
, cbuf
, len
, flags
,
2536 (void *) &addrbuf
, &addrlen
);
2539 n
= recvfrom(s
->sock_fd
, cbuf
, len
, flags
,
2540 SAS2SA(&addrbuf
), &addrlen
);
2543 Py_END_ALLOW_THREADS
2546 PyErr_SetString(socket_timeout
, "timed out");
2554 if (!(*addr
= makesockaddr(s
->sock_fd
, SAS2SA(&addrbuf
),
2555 addrlen
, s
->sock_proto
)))
2561 /* s.recvfrom(nbytes [,flags]) method */
2564 sock_recvfrom(PySocketSockObject
*s
, PyObject
*args
)
2566 PyObject
*buf
= NULL
;
2567 PyObject
*addr
= NULL
;
2568 PyObject
*ret
= NULL
;
2569 int recvlen
, flags
= 0;
2572 if (!PyArg_ParseTuple(args
, "i|i:recvfrom", &recvlen
, &flags
))
2576 PyErr_SetString(PyExc_ValueError
,
2577 "negative buffersize in recvfrom");
2581 buf
= PyString_FromStringAndSize((char *) 0, recvlen
);
2585 outlen
= sock_recvfrom_guts(s
, PyString_AS_STRING(buf
),
2586 recvlen
, flags
, &addr
);
2591 if (outlen
!= recvlen
) {
2592 /* We did not read as many bytes as we anticipated, resize the
2593 string if possible and be succesful. */
2594 if (_PyString_Resize(&buf
, outlen
) < 0)
2595 /* Oopsy, not so succesful after all. */
2599 ret
= PyTuple_Pack(2, buf
, addr
);
2607 PyDoc_STRVAR(recvfrom_doc
,
2608 "recvfrom(buffersize[, flags]) -> (data, address info)\n\
2610 Like recv(buffersize, flags) but also return the sender's address info.");
2613 /* s.recvfrom_into(buffer[, nbytes [,flags]]) method */
2616 sock_recvfrom_into(PySocketSockObject
*s
, PyObject
*args
, PyObject
* kwds
)
2618 static char *kwlist
[] = {"buffer", "nbytes", "flags", 0};
2620 int recvlen
= 0, flags
= 0;
2625 PyObject
*addr
= NULL
;
2627 if (!PyArg_ParseTupleAndKeywords(args
, kwds
, "w#|ii:recvfrom_into",
2628 kwlist
, &buf
, &buflen
,
2631 assert(buf
!= 0 && buflen
> 0);
2634 PyErr_SetString(PyExc_ValueError
,
2635 "negative buffersize in recvfrom_into");
2639 /* If nbytes was not specified, use the buffer's length */
2643 readlen
= sock_recvfrom_guts(s
, buf
, recvlen
, flags
, &addr
);
2645 /* Return an error */
2650 /* Return the number of bytes read and the address. Note that we do
2651 not do anything special here in the case that readlen < recvlen. */
2652 return Py_BuildValue("lN", readlen
, addr
);
2655 PyDoc_STRVAR(recvfrom_into_doc
,
2656 "recvfrom_into(buffer[, nbytes[, flags]]) -> (nbytes, address info)\n\
2658 Like recv_into(buffer[, nbytes[, flags]]) but also return the sender's address info.");
2661 /* s.send(data [,flags]) method */
2664 sock_send(PySocketSockObject
*s
, PyObject
*args
)
2667 int len
, n
= -1, flags
= 0, timeout
;
2670 if (!PyArg_ParseTuple(args
, "s*|i:send", &pbuf
, &flags
))
2673 if (!IS_SELECTABLE(s
)) {
2674 PyBuffer_Release(&pbuf
);
2675 return select_error();
2680 Py_BEGIN_ALLOW_THREADS
2681 timeout
= internal_select(s
, 1);
2684 n
= sendsegmented(s
->sock_fd
, buf
, len
, flags
);
2686 n
= send(s
->sock_fd
, buf
, len
, flags
);
2688 Py_END_ALLOW_THREADS
2690 PyBuffer_Release(&pbuf
);
2693 PyErr_SetString(socket_timeout
, "timed out");
2697 return s
->errorhandler();
2698 return PyInt_FromLong((long)n
);
2701 PyDoc_STRVAR(send_doc
,
2702 "send(data[, flags]) -> count\n\
2704 Send a data string to the socket. For the optional flags\n\
2705 argument, see the Unix manual. Return the number of bytes\n\
2706 sent; this may be less than len(data) if the network is busy.");
2709 /* s.sendall(data [,flags]) method */
2712 sock_sendall(PySocketSockObject
*s
, PyObject
*args
)
2715 int len
, n
= -1, flags
= 0, timeout
;
2718 if (!PyArg_ParseTuple(args
, "s*|i:sendall", &pbuf
, &flags
))
2723 if (!IS_SELECTABLE(s
)) {
2724 PyBuffer_Release(&pbuf
);
2725 return select_error();
2728 Py_BEGIN_ALLOW_THREADS
2730 timeout
= internal_select(s
, 1);
2735 n
= sendsegmented(s
->sock_fd
, buf
, len
, flags
);
2737 n
= send(s
->sock_fd
, buf
, len
, flags
);
2744 Py_END_ALLOW_THREADS
2745 PyBuffer_Release(&pbuf
);
2748 PyErr_SetString(socket_timeout
, "timed out");
2752 return s
->errorhandler();
2758 PyDoc_STRVAR(sendall_doc
,
2759 "sendall(data[, flags])\n\
2761 Send a data string to the socket. For the optional flags\n\
2762 argument, see the Unix manual. This calls send() repeatedly\n\
2763 until all data is sent. If an error occurs, it's impossible\n\
2764 to tell how much data has been sent.");
2767 /* s.sendto(data, [flags,] sockaddr) method */
2770 sock_sendto(PySocketSockObject
*s
, PyObject
*args
)
2776 sock_addr_t addrbuf
;
2777 int addrlen
, n
= -1, flags
, timeout
;
2780 if (!PyArg_ParseTuple(args
, "s*O:sendto", &pbuf
, &addro
)) {
2782 if (!PyArg_ParseTuple(args
, "s*iO:sendto",
2783 &pbuf
, &flags
, &addro
))
2789 if (!IS_SELECTABLE(s
)) {
2790 PyBuffer_Release(&pbuf
);
2791 return select_error();
2794 if (!getsockaddrarg(s
, addro
, SAS2SA(&addrbuf
), &addrlen
)) {
2795 PyBuffer_Release(&pbuf
);
2799 Py_BEGIN_ALLOW_THREADS
2800 timeout
= internal_select(s
, 1);
2802 n
= sendto(s
->sock_fd
, buf
, len
, flags
, SAS2SA(&addrbuf
), addrlen
);
2803 Py_END_ALLOW_THREADS
2805 PyBuffer_Release(&pbuf
);
2807 PyErr_SetString(socket_timeout
, "timed out");
2811 return s
->errorhandler();
2812 return PyInt_FromLong((long)n
);
2815 PyDoc_STRVAR(sendto_doc
,
2816 "sendto(data[, flags], address) -> count\n\
2818 Like send(data, flags) but allows specifying the destination address.\n\
2819 For IP sockets, the address is a pair (hostaddr, port).");
2822 /* s.shutdown(how) method */
2825 sock_shutdown(PySocketSockObject
*s
, PyObject
*arg
)
2830 how
= PyInt_AsLong(arg
);
2831 if (how
== -1 && PyErr_Occurred())
2833 Py_BEGIN_ALLOW_THREADS
2834 res
= shutdown(s
->sock_fd
, how
);
2835 Py_END_ALLOW_THREADS
2837 return s
->errorhandler();
2842 PyDoc_STRVAR(shutdown_doc
,
2845 Shut down the reading side of the socket (flag == SHUT_RD), the writing side\n\
2846 of the socket (flag == SHUT_WR), or both ends (flag == SHUT_RDWR).");
2848 #if defined(MS_WINDOWS) && defined(SIO_RCVALL)
2850 sock_ioctl(PySocketSockObject
*s
, PyObject
*arg
)
2852 unsigned long cmd
= SIO_RCVALL
;
2853 unsigned int option
= RCVALL_ON
;
2856 if (!PyArg_ParseTuple(arg
, "kI:ioctl", &cmd
, &option
))
2859 if (WSAIoctl(s
->sock_fd
, cmd
, &option
, sizeof(option
),
2860 NULL
, 0, &recv
, NULL
, NULL
) == SOCKET_ERROR
) {
2863 return PyLong_FromUnsignedLong(recv
);
2865 PyDoc_STRVAR(sock_ioctl_doc
,
2866 "ioctl(cmd, option) -> long\n\
2868 Control the socket with WSAIoctl syscall. Currently only socket.SIO_RCVALL\n\
2869 is supported as control. Options must be one of the socket.RCVALL_*\n\
2874 /* List of methods for socket objects */
2876 static PyMethodDef sock_methods
[] = {
2877 {"accept", (PyCFunction
)sock_accept
, METH_NOARGS
,
2879 {"bind", (PyCFunction
)sock_bind
, METH_O
,
2881 {"close", (PyCFunction
)sock_close
, METH_NOARGS
,
2883 {"connect", (PyCFunction
)sock_connect
, METH_O
,
2885 {"connect_ex", (PyCFunction
)sock_connect_ex
, METH_O
,
2888 {"dup", (PyCFunction
)sock_dup
, METH_NOARGS
,
2891 {"fileno", (PyCFunction
)sock_fileno
, METH_NOARGS
,
2893 #ifdef HAVE_GETPEERNAME
2894 {"getpeername", (PyCFunction
)sock_getpeername
,
2895 METH_NOARGS
, getpeername_doc
},
2897 {"getsockname", (PyCFunction
)sock_getsockname
,
2898 METH_NOARGS
, getsockname_doc
},
2899 {"getsockopt", (PyCFunction
)sock_getsockopt
, METH_VARARGS
,
2901 #if defined(MS_WINDOWS) && defined(SIO_RCVALL)
2902 {"ioctl", (PyCFunction
)sock_ioctl
, METH_VARARGS
,
2905 {"listen", (PyCFunction
)sock_listen
, METH_O
,
2908 {"makefile", (PyCFunction
)sock_makefile
, METH_VARARGS
,
2911 {"recv", (PyCFunction
)sock_recv
, METH_VARARGS
,
2913 {"recv_into", (PyCFunction
)sock_recv_into
, METH_VARARGS
| METH_KEYWORDS
,
2915 {"recvfrom", (PyCFunction
)sock_recvfrom
, METH_VARARGS
,
2917 {"recvfrom_into", (PyCFunction
)sock_recvfrom_into
, METH_VARARGS
| METH_KEYWORDS
,
2919 {"send", (PyCFunction
)sock_send
, METH_VARARGS
,
2921 {"sendall", (PyCFunction
)sock_sendall
, METH_VARARGS
,
2923 {"sendto", (PyCFunction
)sock_sendto
, METH_VARARGS
,
2925 {"setblocking", (PyCFunction
)sock_setblocking
, METH_O
,
2927 {"settimeout", (PyCFunction
)sock_settimeout
, METH_O
,
2929 {"gettimeout", (PyCFunction
)sock_gettimeout
, METH_NOARGS
,
2931 {"setsockopt", (PyCFunction
)sock_setsockopt
, METH_VARARGS
,
2933 {"shutdown", (PyCFunction
)sock_shutdown
, METH_O
,
2936 {"sleeptaskw", (PyCFunction
)sock_sleeptaskw
, METH_O
,
2939 {NULL
, NULL
} /* sentinel */
2942 /* SockObject members */
2943 static PyMemberDef sock_memberlist
[] = {
2944 {"family", T_INT
, offsetof(PySocketSockObject
, sock_family
), READONLY
, "the socket family"},
2945 {"type", T_INT
, offsetof(PySocketSockObject
, sock_type
), READONLY
, "the socket type"},
2946 {"proto", T_INT
, offsetof(PySocketSockObject
, sock_proto
), READONLY
, "the socket protocol"},
2947 {"timeout", T_DOUBLE
, offsetof(PySocketSockObject
, sock_timeout
), READONLY
, "the socket timeout"},
2951 /* Deallocate a socket object in response to the last Py_DECREF().
2952 First close the file description. */
2955 sock_dealloc(PySocketSockObject
*s
)
2957 if (s
->sock_fd
!= -1)
2958 (void) SOCKETCLOSE(s
->sock_fd
);
2959 Py_TYPE(s
)->tp_free((PyObject
*)s
);
2964 sock_repr(PySocketSockObject
*s
)
2967 #if SIZEOF_SOCKET_T > SIZEOF_LONG
2968 if (s
->sock_fd
> LONG_MAX
) {
2969 /* this can occur on Win64, and actually there is a special
2970 ugly printf formatter for decimal pointer length integer
2971 printing, only bother if necessary*/
2972 PyErr_SetString(PyExc_OverflowError
,
2973 "no printf formatter to display "
2974 "the socket descriptor in decimal");
2980 "<socket object, fd=%ld, family=%d, type=%d, protocol=%d>",
2981 (long)s
->sock_fd
, s
->sock_family
,
2984 return PyString_FromString(buf
);
2988 /* Create a new, uninitialized socket object. */
2991 sock_new(PyTypeObject
*type
, PyObject
*args
, PyObject
*kwds
)
2995 new = type
->tp_alloc(type
, 0);
2997 ((PySocketSockObject
*)new)->sock_fd
= -1;
2998 ((PySocketSockObject
*)new)->sock_timeout
= -1.0;
2999 ((PySocketSockObject
*)new)->errorhandler
= &set_error
;
3005 /* Initialize a new socket object. */
3009 sock_initobj(PyObject
*self
, PyObject
*args
, PyObject
*kwds
)
3011 PySocketSockObject
*s
= (PySocketSockObject
*)self
;
3013 int family
= AF_INET
, type
= SOCK_STREAM
, proto
= 0;
3014 static char *keywords
[] = {"family", "type", "proto", 0};
3016 if (!PyArg_ParseTupleAndKeywords(args
, kwds
,
3017 "|iii:socket", keywords
,
3018 &family
, &type
, &proto
))
3021 Py_BEGIN_ALLOW_THREADS
3022 fd
= socket(family
, type
, proto
);
3023 Py_END_ALLOW_THREADS
3026 if (fd
== INVALID_SOCKET
)
3034 init_sockobject(s
, fd
, family
, type
, proto
);
3041 /* Type object for socket objects. */
3043 static PyTypeObject sock_type
= {
3044 PyVarObject_HEAD_INIT(0, 0) /* Must fill in type value later */
3045 "_socket.socket", /* tp_name */
3046 sizeof(PySocketSockObject
), /* tp_basicsize */
3047 0, /* tp_itemsize */
3048 (destructor
)sock_dealloc
, /* tp_dealloc */
3053 (reprfunc
)sock_repr
, /* tp_repr */
3054 0, /* tp_as_number */
3055 0, /* tp_as_sequence */
3056 0, /* tp_as_mapping */
3060 PyObject_GenericGetAttr
, /* tp_getattro */
3061 0, /* tp_setattro */
3062 0, /* tp_as_buffer */
3063 Py_TPFLAGS_DEFAULT
| Py_TPFLAGS_BASETYPE
, /* tp_flags */
3064 sock_doc
, /* tp_doc */
3065 0, /* tp_traverse */
3067 0, /* tp_richcompare */
3068 0, /* tp_weaklistoffset */
3070 0, /* tp_iternext */
3071 sock_methods
, /* tp_methods */
3072 sock_memberlist
, /* tp_members */
3076 0, /* tp_descr_get */
3077 0, /* tp_descr_set */
3078 0, /* tp_dictoffset */
3079 sock_initobj
, /* tp_init */
3080 PyType_GenericAlloc
, /* tp_alloc */
3081 sock_new
, /* tp_new */
3082 PyObject_Del
, /* tp_free */
3086 /* Python interface to gethostname(). */
3090 socket_gethostname(PyObject
*self
, PyObject
*unused
)
3094 Py_BEGIN_ALLOW_THREADS
3095 res
= gethostname(buf
, (int) sizeof buf
- 1);
3096 Py_END_ALLOW_THREADS
3099 buf
[sizeof buf
- 1] = '\0';
3100 return PyString_FromString(buf
);
3103 PyDoc_STRVAR(gethostname_doc
,
3104 "gethostname() -> string\n\
3106 Return the current host name.");
3109 /* Python interface to gethostbyname(name). */
3113 socket_gethostbyname(PyObject
*self
, PyObject
*args
)
3116 sock_addr_t addrbuf
;
3118 if (!PyArg_ParseTuple(args
, "s:gethostbyname", &name
))
3120 if (setipaddr(name
, SAS2SA(&addrbuf
), sizeof(addrbuf
), AF_INET
) < 0)
3122 return makeipaddr(SAS2SA(&addrbuf
), sizeof(struct sockaddr_in
));
3125 PyDoc_STRVAR(gethostbyname_doc
,
3126 "gethostbyname(host) -> address\n\
3128 Return the IP address (a string of the form '255.255.255.255') for a host.");
3131 /* Convenience function common to gethostbyname_ex and gethostbyaddr */
3134 gethost_common(struct hostent
*h
, struct sockaddr
*addr
, int alen
, int af
)
3137 PyObject
*rtn_tuple
= (PyObject
*)NULL
;
3138 PyObject
*name_list
= (PyObject
*)NULL
;
3139 PyObject
*addr_list
= (PyObject
*)NULL
;
3143 /* Let's get real error message to return */
3145 set_herror(h_errno
);
3147 PyErr_SetString(socket_error
, "host not found");
3152 if (h
->h_addrtype
!= af
) {
3153 /* Let's get real error message to return */
3154 PyErr_SetString(socket_error
,
3155 (char *)strerror(EAFNOSUPPORT
));
3163 if (alen
< sizeof(struct sockaddr_in
))
3169 if (alen
< sizeof(struct sockaddr_in6
))
3176 if ((name_list
= PyList_New(0)) == NULL
)
3179 if ((addr_list
= PyList_New(0)) == NULL
)
3182 /* SF #1511317: h_aliases can be NULL */
3184 for (pch
= h
->h_aliases
; *pch
!= NULL
; pch
++) {
3186 tmp
= PyString_FromString(*pch
);
3190 status
= PyList_Append(name_list
, tmp
);
3198 for (pch
= h
->h_addr_list
; *pch
!= NULL
; pch
++) {
3205 struct sockaddr_in sin
;
3206 memset(&sin
, 0, sizeof(sin
));
3207 sin
.sin_family
= af
;
3208 #ifdef HAVE_SOCKADDR_SA_LEN
3209 sin
.sin_len
= sizeof(sin
);
3211 memcpy(&sin
.sin_addr
, *pch
, sizeof(sin
.sin_addr
));
3212 tmp
= makeipaddr((struct sockaddr
*)&sin
, sizeof(sin
));
3214 if (pch
== h
->h_addr_list
&& alen
>= sizeof(sin
))
3215 memcpy((char *) addr
, &sin
, sizeof(sin
));
3222 struct sockaddr_in6 sin6
;
3223 memset(&sin6
, 0, sizeof(sin6
));
3224 sin6
.sin6_family
= af
;
3225 #ifdef HAVE_SOCKADDR_SA_LEN
3226 sin6
.sin6_len
= sizeof(sin6
);
3228 memcpy(&sin6
.sin6_addr
, *pch
, sizeof(sin6
.sin6_addr
));
3229 tmp
= makeipaddr((struct sockaddr
*)&sin6
,
3232 if (pch
== h
->h_addr_list
&& alen
>= sizeof(sin6
))
3233 memcpy((char *) addr
, &sin6
, sizeof(sin6
));
3238 default: /* can't happen */
3239 PyErr_SetString(socket_error
,
3240 "unsupported address family");
3247 status
= PyList_Append(addr_list
, tmp
);
3254 rtn_tuple
= Py_BuildValue("sOO", h
->h_name
, name_list
, addr_list
);
3257 Py_XDECREF(name_list
);
3258 Py_XDECREF(addr_list
);
3263 /* Python interface to gethostbyname_ex(name). */
3267 socket_gethostbyname_ex(PyObject
*self
, PyObject
*args
)
3272 struct sockaddr_storage addr
;
3274 struct sockaddr_in addr
;
3276 struct sockaddr
*sa
;
3278 #ifdef HAVE_GETHOSTBYNAME_R
3279 struct hostent hp_allocated
;
3280 #ifdef HAVE_GETHOSTBYNAME_R_3_ARG
3281 struct hostent_data data
;
3284 int buf_len
= (sizeof buf
) - 1;
3287 #if defined(HAVE_GETHOSTBYNAME_R_3_ARG) || defined(HAVE_GETHOSTBYNAME_R_6_ARG)
3290 #endif /* HAVE_GETHOSTBYNAME_R */
3292 if (!PyArg_ParseTuple(args
, "s:gethostbyname_ex", &name
))
3294 if (setipaddr(name
, (struct sockaddr
*)&addr
, sizeof(addr
), AF_INET
) < 0)
3296 Py_BEGIN_ALLOW_THREADS
3297 #ifdef HAVE_GETHOSTBYNAME_R
3298 #if defined(HAVE_GETHOSTBYNAME_R_6_ARG)
3299 result
= gethostbyname_r(name
, &hp_allocated
, buf
, buf_len
,
3301 #elif defined(HAVE_GETHOSTBYNAME_R_5_ARG)
3302 h
= gethostbyname_r(name
, &hp_allocated
, buf
, buf_len
, &errnop
);
3303 #else /* HAVE_GETHOSTBYNAME_R_3_ARG */
3304 memset((void *) &data
, '\0', sizeof(data
));
3305 result
= gethostbyname_r(name
, &hp_allocated
, &data
);
3306 h
= (result
!= 0) ? NULL
: &hp_allocated
;
3308 #else /* not HAVE_GETHOSTBYNAME_R */
3309 #ifdef USE_GETHOSTBYNAME_LOCK
3310 PyThread_acquire_lock(netdb_lock
, 1);
3312 h
= gethostbyname(name
);
3313 #endif /* HAVE_GETHOSTBYNAME_R */
3314 Py_END_ALLOW_THREADS
3315 /* Some C libraries would require addr.__ss_family instead of
3317 Therefore, we cast the sockaddr_storage into sockaddr to
3318 access sa_family. */
3319 sa
= (struct sockaddr
*)&addr
;
3320 ret
= gethost_common(h
, (struct sockaddr
*)&addr
, sizeof(addr
),
3322 #ifdef USE_GETHOSTBYNAME_LOCK
3323 PyThread_release_lock(netdb_lock
);
3328 PyDoc_STRVAR(ghbn_ex_doc
,
3329 "gethostbyname_ex(host) -> (name, aliaslist, addresslist)\n\
3331 Return the true host name, a list of aliases, and a list of IP addresses,\n\
3332 for a host. The host argument is a string giving a host name or IP number.");
3335 /* Python interface to gethostbyaddr(IP). */
3339 socket_gethostbyaddr(PyObject
*self
, PyObject
*args
)
3342 struct sockaddr_storage addr
;
3344 struct sockaddr_in addr
;
3346 struct sockaddr
*sa
= (struct sockaddr
*)&addr
;
3350 #ifdef HAVE_GETHOSTBYNAME_R
3351 struct hostent hp_allocated
;
3352 #ifdef HAVE_GETHOSTBYNAME_R_3_ARG
3353 struct hostent_data data
;
3355 /* glibcs up to 2.10 assume that the buf argument to
3356 gethostbyaddr_r is 8-byte aligned, which at least llvm-gcc
3357 does not ensure. The attribute below instructs the compiler
3358 to maintain this alignment. */
3359 char buf
[16384] Py_ALIGNED(8);
3360 int buf_len
= (sizeof buf
) - 1;
3363 #if defined(HAVE_GETHOSTBYNAME_R_3_ARG) || defined(HAVE_GETHOSTBYNAME_R_6_ARG)
3366 #endif /* HAVE_GETHOSTBYNAME_R */
3371 if (!PyArg_ParseTuple(args
, "s:gethostbyaddr", &ip_num
))
3374 if (setipaddr(ip_num
, sa
, sizeof(addr
), af
) < 0)
3381 ap
= (char *)&((struct sockaddr_in
*)sa
)->sin_addr
;
3382 al
= sizeof(((struct sockaddr_in
*)sa
)->sin_addr
);
3386 ap
= (char *)&((struct sockaddr_in6
*)sa
)->sin6_addr
;
3387 al
= sizeof(((struct sockaddr_in6
*)sa
)->sin6_addr
);
3391 PyErr_SetString(socket_error
, "unsupported address family");
3394 Py_BEGIN_ALLOW_THREADS
3395 #ifdef HAVE_GETHOSTBYNAME_R
3396 #if defined(HAVE_GETHOSTBYNAME_R_6_ARG)
3397 result
= gethostbyaddr_r(ap
, al
, af
,
3398 &hp_allocated
, buf
, buf_len
,
3400 #elif defined(HAVE_GETHOSTBYNAME_R_5_ARG)
3401 h
= gethostbyaddr_r(ap
, al
, af
,
3402 &hp_allocated
, buf
, buf_len
, &errnop
);
3403 #else /* HAVE_GETHOSTBYNAME_R_3_ARG */
3404 memset((void *) &data
, '\0', sizeof(data
));
3405 result
= gethostbyaddr_r(ap
, al
, af
, &hp_allocated
, &data
);
3406 h
= (result
!= 0) ? NULL
: &hp_allocated
;
3408 #else /* not HAVE_GETHOSTBYNAME_R */
3409 #ifdef USE_GETHOSTBYNAME_LOCK
3410 PyThread_acquire_lock(netdb_lock
, 1);
3412 h
= gethostbyaddr(ap
, al
, af
);
3413 #endif /* HAVE_GETHOSTBYNAME_R */
3414 Py_END_ALLOW_THREADS
3415 ret
= gethost_common(h
, (struct sockaddr
*)&addr
, sizeof(addr
), af
);
3416 #ifdef USE_GETHOSTBYNAME_LOCK
3417 PyThread_release_lock(netdb_lock
);
3422 PyDoc_STRVAR(gethostbyaddr_doc
,
3423 "gethostbyaddr(host) -> (name, aliaslist, addresslist)\n\
3425 Return the true host name, a list of aliases, and a list of IP addresses,\n\
3426 for a host. The host argument is a string giving a host name or IP number.");
3429 /* Python interface to getservbyname(name).
3430 This only returns the port number, since the other info is already
3431 known or not useful (like the list of aliases). */
3435 socket_getservbyname(PyObject
*self
, PyObject
*args
)
3437 char *name
, *proto
=NULL
;
3439 if (!PyArg_ParseTuple(args
, "s|s:getservbyname", &name
, &proto
))
3441 Py_BEGIN_ALLOW_THREADS
3442 sp
= getservbyname(name
, proto
);
3443 Py_END_ALLOW_THREADS
3445 PyErr_SetString(socket_error
, "service/proto not found");
3448 return PyInt_FromLong((long) ntohs(sp
->s_port
));
3451 PyDoc_STRVAR(getservbyname_doc
,
3452 "getservbyname(servicename[, protocolname]) -> integer\n\
3454 Return a port number from a service name and protocol name.\n\
3455 The optional protocol name, if given, should be 'tcp' or 'udp',\n\
3456 otherwise any protocol will match.");
3459 /* Python interface to getservbyport(port).
3460 This only returns the service name, since the other info is already
3461 known or not useful (like the list of aliases). */
3465 socket_getservbyport(PyObject
*self
, PyObject
*args
)
3470 if (!PyArg_ParseTuple(args
, "i|s:getservbyport", &port
, &proto
))
3472 if (port
< 0 || port
> 0xffff) {
3474 PyExc_OverflowError
,
3475 "getservbyport: port must be 0-65535.");
3478 Py_BEGIN_ALLOW_THREADS
3479 sp
= getservbyport(htons((short)port
), proto
);
3480 Py_END_ALLOW_THREADS
3482 PyErr_SetString(socket_error
, "port/proto not found");
3485 return PyString_FromString(sp
->s_name
);
3488 PyDoc_STRVAR(getservbyport_doc
,
3489 "getservbyport(port[, protocolname]) -> string\n\
3491 Return the service name from a port number and protocol name.\n\
3492 The optional protocol name, if given, should be 'tcp' or 'udp',\n\
3493 otherwise any protocol will match.");
3495 /* Python interface to getprotobyname(name).
3496 This only returns the protocol number, since the other info is
3497 already known or not useful (like the list of aliases). */
3501 socket_getprotobyname(PyObject
*self
, PyObject
*args
)
3504 struct protoent
*sp
;
3506 /* Not available in BeOS yet. - [cjh] */
3507 PyErr_SetString(socket_error
, "getprotobyname not supported");
3510 if (!PyArg_ParseTuple(args
, "s:getprotobyname", &name
))
3512 Py_BEGIN_ALLOW_THREADS
3513 sp
= getprotobyname(name
);
3514 Py_END_ALLOW_THREADS
3516 PyErr_SetString(socket_error
, "protocol not found");
3519 return PyInt_FromLong((long) sp
->p_proto
);
3523 PyDoc_STRVAR(getprotobyname_doc
,
3524 "getprotobyname(name) -> integer\n\
3526 Return the protocol number for the named protocol. (Rarely used.)");
3529 #ifdef HAVE_SOCKETPAIR
3530 /* Create a pair of sockets using the socketpair() function.
3531 Arguments as for socket() except the default family is AF_UNIX if
3532 defined on the platform; otherwise, the default is AF_INET. */
3536 socket_socketpair(PyObject
*self
, PyObject
*args
)
3538 PySocketSockObject
*s0
= NULL
, *s1
= NULL
;
3540 int family
, type
= SOCK_STREAM
, proto
= 0;
3541 PyObject
*res
= NULL
;
3543 #if defined(AF_UNIX)
3548 if (!PyArg_ParseTuple(args
, "|iii:socketpair",
3549 &family
, &type
, &proto
))
3551 /* Create a pair of socket fds */
3552 if (socketpair(family
, type
, proto
, sv
) < 0)
3554 s0
= new_sockobject(sv
[0], family
, type
, proto
);
3557 s1
= new_sockobject(sv
[1], family
, type
, proto
);
3560 res
= PyTuple_Pack(2, s0
, s1
);
3574 PyDoc_STRVAR(socketpair_doc
,
3575 "socketpair([family[, type[, proto]]]) -> (socket object, socket object)\n\
3577 Create a pair of socket objects from the sockets returned by the platform\n\
3578 socketpair() function.\n\
3579 The arguments are the same as for socket() except the default family is\n\
3580 AF_UNIX if defined on the platform; otherwise, the default is AF_INET.");
3582 #endif /* HAVE_SOCKETPAIR */
3586 /* Create a socket object from a numeric file description.
3587 Useful e.g. if stdin is a socket.
3588 Additional arguments as for socket(). */
3592 socket_fromfd(PyObject
*self
, PyObject
*args
)
3594 PySocketSockObject
*s
;
3596 int family
, type
, proto
= 0;
3597 if (!PyArg_ParseTuple(args
, "iii|i:fromfd",
3598 &fd
, &family
, &type
, &proto
))
3600 /* Dup the fd so it and the socket can be closed independently */
3604 s
= new_sockobject(fd
, family
, type
, proto
);
3605 return (PyObject
*) s
;
3608 PyDoc_STRVAR(fromfd_doc
,
3609 "fromfd(fd, family, type[, proto]) -> socket object\n\
3611 Create a socket object from a duplicate of the given\n\
3613 The remaining arguments are the same as for socket().");
3619 socket_ntohs(PyObject
*self
, PyObject
*args
)
3623 if (!PyArg_ParseTuple(args
, "i:ntohs", &x1
)) {
3627 PyErr_SetString(PyExc_OverflowError
,
3628 "can't convert negative number to unsigned long");
3631 x2
= (unsigned int)ntohs((unsigned short)x1
);
3632 return PyInt_FromLong(x2
);
3635 PyDoc_STRVAR(ntohs_doc
,
3636 "ntohs(integer) -> integer\n\
3638 Convert a 16-bit integer from network to host byte order.");
3642 socket_ntohl(PyObject
*self
, PyObject
*arg
)
3646 if (PyInt_Check(arg
)) {
3647 x
= PyInt_AS_LONG(arg
);
3648 if (x
== (unsigned long) -1 && PyErr_Occurred())
3651 PyErr_SetString(PyExc_OverflowError
,
3652 "can't convert negative number to unsigned long");
3656 else if (PyLong_Check(arg
)) {
3657 x
= PyLong_AsUnsignedLong(arg
);
3658 if (x
== (unsigned long) -1 && PyErr_Occurred())
3663 /* only want the trailing 32 bits */
3664 y
= x
& 0xFFFFFFFFUL
;
3666 return PyErr_Format(PyExc_OverflowError
,
3667 "long int larger than 32 bits");
3673 return PyErr_Format(PyExc_TypeError
,
3674 "expected int/long, %s found",
3675 Py_TYPE(arg
)->tp_name
);
3676 if (x
== (unsigned long) -1 && PyErr_Occurred())
3678 return PyLong_FromUnsignedLong(ntohl(x
));
3681 PyDoc_STRVAR(ntohl_doc
,
3682 "ntohl(integer) -> integer\n\
3684 Convert a 32-bit integer from network to host byte order.");
3688 socket_htons(PyObject
*self
, PyObject
*args
)
3692 if (!PyArg_ParseTuple(args
, "i:htons", &x1
)) {
3696 PyErr_SetString(PyExc_OverflowError
,
3697 "can't convert negative number to unsigned long");
3700 x2
= (unsigned int)htons((unsigned short)x1
);
3701 return PyInt_FromLong(x2
);
3704 PyDoc_STRVAR(htons_doc
,
3705 "htons(integer) -> integer\n\
3707 Convert a 16-bit integer from host to network byte order.");
3711 socket_htonl(PyObject
*self
, PyObject
*arg
)
3715 if (PyInt_Check(arg
)) {
3716 x
= PyInt_AS_LONG(arg
);
3717 if (x
== (unsigned long) -1 && PyErr_Occurred())
3720 PyErr_SetString(PyExc_OverflowError
,
3721 "can't convert negative number to unsigned long");
3725 else if (PyLong_Check(arg
)) {
3726 x
= PyLong_AsUnsignedLong(arg
);
3727 if (x
== (unsigned long) -1 && PyErr_Occurred())
3732 /* only want the trailing 32 bits */
3733 y
= x
& 0xFFFFFFFFUL
;
3735 return PyErr_Format(PyExc_OverflowError
,
3736 "long int larger than 32 bits");
3742 return PyErr_Format(PyExc_TypeError
,
3743 "expected int/long, %s found",
3744 Py_TYPE(arg
)->tp_name
);
3745 return PyLong_FromUnsignedLong(htonl((unsigned long)x
));
3748 PyDoc_STRVAR(htonl_doc
,
3749 "htonl(integer) -> integer\n\
3751 Convert a 32-bit integer from host to network byte order.");
3753 /* socket.inet_aton() and socket.inet_ntoa() functions. */
3755 PyDoc_STRVAR(inet_aton_doc
,
3756 "inet_aton(string) -> packed 32-bit IP representation\n\
3758 Convert an IP address in string format (123.45.67.89) to the 32-bit packed\n\
3759 binary format used in low-level network functions.");
3762 socket_inet_aton(PyObject
*self
, PyObject
*args
)
3765 #define INADDR_NONE (-1)
3767 #ifdef HAVE_INET_ATON
3771 #if !defined(HAVE_INET_ATON) || defined(USE_INET_ATON_WEAKLINK)
3772 #if (SIZEOF_INT != 4)
3773 #error "Not sure if in_addr_t exists and int is not 32-bits."
3775 /* Have to use inet_addr() instead */
3776 unsigned int packed_addr
;
3780 if (!PyArg_ParseTuple(args
, "s:inet_aton", &ip_addr
))
3784 #ifdef HAVE_INET_ATON
3786 #ifdef USE_INET_ATON_WEAKLINK
3787 if (inet_aton
!= NULL
) {
3789 if (inet_aton(ip_addr
, &buf
))
3790 return PyString_FromStringAndSize((char *)(&buf
),
3793 PyErr_SetString(socket_error
,
3794 "illegal IP address string passed to inet_aton");
3797 #ifdef USE_INET_ATON_WEAKLINK
3803 #if !defined(HAVE_INET_ATON) || defined(USE_INET_ATON_WEAKLINK)
3805 /* special-case this address as inet_addr might return INADDR_NONE
3807 if (strcmp(ip_addr
, "255.255.255.255") == 0) {
3808 packed_addr
= 0xFFFFFFFF;
3811 packed_addr
= inet_addr(ip_addr
);
3813 if (packed_addr
== INADDR_NONE
) { /* invalid address */
3814 PyErr_SetString(socket_error
,
3815 "illegal IP address string passed to inet_aton");
3819 return PyString_FromStringAndSize((char *) &packed_addr
,
3820 sizeof(packed_addr
));
3822 #ifdef USE_INET_ATON_WEAKLINK
3829 PyDoc_STRVAR(inet_ntoa_doc
,
3830 "inet_ntoa(packed_ip) -> ip_address_string\n\
3832 Convert an IP address from 32-bit packed binary format to string format");
3835 socket_inet_ntoa(PyObject
*self
, PyObject
*args
)
3839 struct in_addr packed_addr
;
3841 if (!PyArg_ParseTuple(args
, "s#:inet_ntoa", &packed_str
, &addr_len
)) {
3845 if (addr_len
!= sizeof(packed_addr
)) {
3846 PyErr_SetString(socket_error
,
3847 "packed IP wrong length for inet_ntoa");
3851 memcpy(&packed_addr
, packed_str
, addr_len
);
3853 return PyString_FromString(inet_ntoa(packed_addr
));
3856 #ifdef HAVE_INET_PTON
3858 PyDoc_STRVAR(inet_pton_doc
,
3859 "inet_pton(af, ip) -> packed IP address string\n\
3861 Convert an IP address from string format to a packed string suitable\n\
3862 for use with low-level network functions.");
3865 socket_inet_pton(PyObject
*self
, PyObject
*args
)
3871 char packed
[MAX(sizeof(struct in_addr
), sizeof(struct in6_addr
))];
3873 char packed
[sizeof(struct in_addr
)];
3875 if (!PyArg_ParseTuple(args
, "is:inet_pton", &af
, &ip
)) {
3879 #if !defined(ENABLE_IPV6) && defined(AF_INET6)
3880 if(af
== AF_INET6
) {
3881 PyErr_SetString(socket_error
,
3882 "can't use AF_INET6, IPv6 is disabled");
3887 retval
= inet_pton(af
, ip
, packed
);
3889 PyErr_SetFromErrno(socket_error
);
3891 } else if (retval
== 0) {
3892 PyErr_SetString(socket_error
,
3893 "illegal IP address string passed to inet_pton");
3895 } else if (af
== AF_INET
) {
3896 return PyString_FromStringAndSize(packed
,
3897 sizeof(struct in_addr
));
3899 } else if (af
== AF_INET6
) {
3900 return PyString_FromStringAndSize(packed
,
3901 sizeof(struct in6_addr
));
3904 PyErr_SetString(socket_error
, "unknown address family");
3909 PyDoc_STRVAR(inet_ntop_doc
,
3910 "inet_ntop(af, packed_ip) -> string formatted IP address\n\
3912 Convert a packed IP address of the given family to string format.");
3915 socket_inet_ntop(PyObject
*self
, PyObject
*args
)
3922 char ip
[MAX(INET_ADDRSTRLEN
, INET6_ADDRSTRLEN
) + 1];
3924 char ip
[INET_ADDRSTRLEN
+ 1];
3927 /* Guarantee NUL-termination for PyString_FromString() below */
3928 memset((void *) &ip
[0], '\0', sizeof(ip
));
3930 if (!PyArg_ParseTuple(args
, "is#:inet_ntop", &af
, &packed
, &len
)) {
3934 if (af
== AF_INET
) {
3935 if (len
!= sizeof(struct in_addr
)) {
3936 PyErr_SetString(PyExc_ValueError
,
3937 "invalid length of packed IP address string");
3941 } else if (af
== AF_INET6
) {
3942 if (len
!= sizeof(struct in6_addr
)) {
3943 PyErr_SetString(PyExc_ValueError
,
3944 "invalid length of packed IP address string");
3949 PyErr_Format(PyExc_ValueError
,
3950 "unknown address family %d", af
);
3954 retval
= inet_ntop(af
, packed
, ip
, sizeof(ip
));
3956 PyErr_SetFromErrno(socket_error
);
3959 return PyString_FromString(retval
);
3963 PyErr_SetString(PyExc_RuntimeError
, "invalid handling of inet_ntop");
3967 #endif /* HAVE_INET_PTON */
3969 /* Python interface to getaddrinfo(host, port). */
3973 socket_getaddrinfo(PyObject
*self
, PyObject
*args
)
3975 struct addrinfo hints
, *res
;
3976 struct addrinfo
*res0
= NULL
;
3977 PyObject
*hobj
= NULL
;
3978 PyObject
*pobj
= (PyObject
*)NULL
;
3981 int family
, socktype
, protocol
, flags
;
3983 PyObject
*all
= (PyObject
*)NULL
;
3984 PyObject
*single
= (PyObject
*)NULL
;
3985 PyObject
*idna
= NULL
;
3987 family
= socktype
= protocol
= flags
= 0;
3989 if (!PyArg_ParseTuple(args
, "OO|iiii:getaddrinfo",
3990 &hobj
, &pobj
, &family
, &socktype
,
3991 &protocol
, &flags
)) {
3994 if (hobj
== Py_None
) {
3996 } else if (PyUnicode_Check(hobj
)) {
3997 idna
= PyObject_CallMethod(hobj
, "encode", "s", "idna");
4000 hptr
= PyString_AsString(idna
);
4001 } else if (PyString_Check(hobj
)) {
4002 hptr
= PyString_AsString(hobj
);
4004 PyErr_SetString(PyExc_TypeError
,
4005 "getaddrinfo() argument 1 must be string or None");
4008 if (PyInt_Check(pobj
)) {
4009 PyOS_snprintf(pbuf
, sizeof(pbuf
), "%ld", PyInt_AsLong(pobj
));
4011 } else if (PyString_Check(pobj
)) {
4012 pptr
= PyString_AsString(pobj
);
4013 } else if (pobj
== Py_None
) {
4014 pptr
= (char *)NULL
;
4016 PyErr_SetString(socket_error
, "Int or String expected");
4019 memset(&hints
, 0, sizeof(hints
));
4020 hints
.ai_family
= family
;
4021 hints
.ai_socktype
= socktype
;
4022 hints
.ai_protocol
= protocol
;
4023 hints
.ai_flags
= flags
;
4024 Py_BEGIN_ALLOW_THREADS
4025 ACQUIRE_GETADDRINFO_LOCK
4026 error
= getaddrinfo(hptr
, pptr
, &hints
, &res0
);
4027 Py_END_ALLOW_THREADS
4028 RELEASE_GETADDRINFO_LOCK
/* see comment in setipaddr() */
4030 set_gaierror(error
);
4034 if ((all
= PyList_New(0)) == NULL
)
4036 for (res
= res0
; res
; res
= res
->ai_next
) {
4038 makesockaddr(-1, res
->ai_addr
, res
->ai_addrlen
, protocol
);
4041 single
= Py_BuildValue("iiisO", res
->ai_family
,
4042 res
->ai_socktype
, res
->ai_protocol
,
4043 res
->ai_canonname
? res
->ai_canonname
: "",
4049 if (PyList_Append(all
, single
))
4063 return (PyObject
*)NULL
;
4066 PyDoc_STRVAR(getaddrinfo_doc
,
4067 "getaddrinfo(host, port [, family, socktype, proto, flags])\n\
4068 -> list of (family, socktype, proto, canonname, sockaddr)\n\
4070 Resolve host and port into addrinfo struct.");
4072 /* Python interface to getnameinfo(sa, flags). */
4076 socket_getnameinfo(PyObject
*self
, PyObject
*args
)
4078 PyObject
*sa
= (PyObject
*)NULL
;
4081 int port
, flowinfo
, scope_id
;
4082 char hbuf
[NI_MAXHOST
], pbuf
[NI_MAXSERV
];
4083 struct addrinfo hints
, *res
= NULL
;
4085 PyObject
*ret
= (PyObject
*)NULL
;
4087 flags
= flowinfo
= scope_id
= 0;
4088 if (!PyArg_ParseTuple(args
, "Oi:getnameinfo", &sa
, &flags
))
4090 if (!PyArg_ParseTuple(sa
, "si|ii",
4091 &hostp
, &port
, &flowinfo
, &scope_id
))
4093 PyOS_snprintf(pbuf
, sizeof(pbuf
), "%d", port
);
4094 memset(&hints
, 0, sizeof(hints
));
4095 hints
.ai_family
= AF_UNSPEC
;
4096 hints
.ai_socktype
= SOCK_DGRAM
; /* make numeric port happy */
4097 Py_BEGIN_ALLOW_THREADS
4098 ACQUIRE_GETADDRINFO_LOCK
4099 error
= getaddrinfo(hostp
, pbuf
, &hints
, &res
);
4100 Py_END_ALLOW_THREADS
4101 RELEASE_GETADDRINFO_LOCK
/* see comment in setipaddr() */
4103 set_gaierror(error
);
4107 PyErr_SetString(socket_error
,
4108 "sockaddr resolved to multiple addresses");
4111 switch (res
->ai_family
) {
4116 if (PyArg_ParseTuple(sa
, "si", &t1
, &t2
) == 0) {
4117 PyErr_SetString(socket_error
,
4118 "IPv4 sockaddr must be 2 tuple");
4126 struct sockaddr_in6
*sin6
;
4127 sin6
= (struct sockaddr_in6
*)res
->ai_addr
;
4128 sin6
->sin6_flowinfo
= flowinfo
;
4129 sin6
->sin6_scope_id
= scope_id
;
4134 error
= getnameinfo(res
->ai_addr
, res
->ai_addrlen
,
4135 hbuf
, sizeof(hbuf
), pbuf
, sizeof(pbuf
), flags
);
4137 set_gaierror(error
);
4140 ret
= Py_BuildValue("ss", hbuf
, pbuf
);
4148 PyDoc_STRVAR(getnameinfo_doc
,
4149 "getnameinfo(sockaddr, flags) --> (host, port)\n\
4151 Get host and port for a sockaddr.");
4154 /* Python API to getting and setting the default timeout value. */
4157 socket_getdefaulttimeout(PyObject
*self
)
4159 if (defaulttimeout
< 0.0) {
4164 return PyFloat_FromDouble(defaulttimeout
);
4167 PyDoc_STRVAR(getdefaulttimeout_doc
,
4168 "getdefaulttimeout() -> timeout\n\
4170 Returns the default timeout in floating seconds for new socket objects.\n\
4171 A value of None indicates that new socket objects have no timeout.\n\
4172 When the socket module is first imported, the default is None.");
4175 socket_setdefaulttimeout(PyObject
*self
, PyObject
*arg
)
4182 timeout
= PyFloat_AsDouble(arg
);
4183 if (timeout
< 0.0) {
4184 if (!PyErr_Occurred())
4185 PyErr_SetString(PyExc_ValueError
,
4186 "Timeout value out of range");
4191 defaulttimeout
= timeout
;
4197 PyDoc_STRVAR(setdefaulttimeout_doc
,
4198 "setdefaulttimeout(timeout)\n\
4200 Set the default timeout in floating seconds for new socket objects.\n\
4201 A value of None indicates that new socket objects have no timeout.\n\
4202 When the socket module is first imported, the default is None.");
4205 /* List of functions exported by this module. */
4207 static PyMethodDef socket_methods
[] = {
4208 {"gethostbyname", socket_gethostbyname
,
4209 METH_VARARGS
, gethostbyname_doc
},
4210 {"gethostbyname_ex", socket_gethostbyname_ex
,
4211 METH_VARARGS
, ghbn_ex_doc
},
4212 {"gethostbyaddr", socket_gethostbyaddr
,
4213 METH_VARARGS
, gethostbyaddr_doc
},
4214 {"gethostname", socket_gethostname
,
4215 METH_NOARGS
, gethostname_doc
},
4216 {"getservbyname", socket_getservbyname
,
4217 METH_VARARGS
, getservbyname_doc
},
4218 {"getservbyport", socket_getservbyport
,
4219 METH_VARARGS
, getservbyport_doc
},
4220 {"getprotobyname", socket_getprotobyname
,
4221 METH_VARARGS
, getprotobyname_doc
},
4223 {"fromfd", socket_fromfd
,
4224 METH_VARARGS
, fromfd_doc
},
4226 #ifdef HAVE_SOCKETPAIR
4227 {"socketpair", socket_socketpair
,
4228 METH_VARARGS
, socketpair_doc
},
4230 {"ntohs", socket_ntohs
,
4231 METH_VARARGS
, ntohs_doc
},
4232 {"ntohl", socket_ntohl
,
4234 {"htons", socket_htons
,
4235 METH_VARARGS
, htons_doc
},
4236 {"htonl", socket_htonl
,
4238 {"inet_aton", socket_inet_aton
,
4239 METH_VARARGS
, inet_aton_doc
},
4240 {"inet_ntoa", socket_inet_ntoa
,
4241 METH_VARARGS
, inet_ntoa_doc
},
4242 #ifdef HAVE_INET_PTON
4243 {"inet_pton", socket_inet_pton
,
4244 METH_VARARGS
, inet_pton_doc
},
4245 {"inet_ntop", socket_inet_ntop
,
4246 METH_VARARGS
, inet_ntop_doc
},
4248 {"getaddrinfo", socket_getaddrinfo
,
4249 METH_VARARGS
, getaddrinfo_doc
},
4250 {"getnameinfo", socket_getnameinfo
,
4251 METH_VARARGS
, getnameinfo_doc
},
4252 {"getdefaulttimeout", (PyCFunction
)socket_getdefaulttimeout
,
4253 METH_NOARGS
, getdefaulttimeout_doc
},
4254 {"setdefaulttimeout", socket_setdefaulttimeout
,
4255 METH_O
, setdefaulttimeout_doc
},
4256 {NULL
, NULL
} /* Sentinel */
4261 #define OS_INIT_DEFINED
4269 _kernel_swi(0x43380, &r
, &r
);
4270 taskwindow
= r
.r
[0];
4279 #define OS_INIT_DEFINED
4281 /* Additional initialization and cleanup for Windows */
4295 ret
= WSAStartup(0x0101, &WSAData
);
4297 case 0: /* No error */
4298 Py_AtExit(os_cleanup
);
4299 return 1; /* Success */
4300 case WSASYSNOTREADY
:
4301 PyErr_SetString(PyExc_ImportError
,
4302 "WSAStartup failed: network not ready");
4304 case WSAVERNOTSUPPORTED
:
4308 "WSAStartup failed: requested version not supported");
4311 PyOS_snprintf(buf
, sizeof(buf
),
4312 "WSAStartup failed: error code %d", ret
);
4313 PyErr_SetString(PyExc_ImportError
, buf
);
4316 return 0; /* Failure */
4319 #endif /* MS_WINDOWS */
4323 #define OS_INIT_DEFINED
4325 /* Additional initialization for OS/2 */
4332 int rc
= sock_init();
4335 return 1; /* Success */
4338 PyOS_snprintf(reason
, sizeof(reason
),
4339 "OS/2 TCP/IP Error# %d", sock_errno());
4340 PyErr_SetString(PyExc_ImportError
, reason
);
4342 return 0; /* Failure */
4344 /* No need to initialise sockets with GCC/EMX */
4345 return 1; /* Success */
4349 #endif /* PYOS_OS2 */
4352 #ifndef OS_INIT_DEFINED
4356 return 1; /* Success */
4361 /* C API table - always add new things to the end for binary
4364 PySocketModule_APIObject PySocketModuleAPI
=
4371 /* Initialize the _socket module.
4373 This module is actually called "_socket", and there's a wrapper
4374 "socket.py" which implements some additional functionality. On some
4375 platforms (e.g. Windows and OS/2), socket.py also implements a
4376 wrapper for the socket type that provides missing functionality such
4377 as makefile(), dup() and fromfd(). The import of "_socket" may fail
4378 with an ImportError exception if os-specific initialization fails.
4379 On Windows, this does WINSOCK initialization. When WINSOCK is
4380 initialized succesfully, a call to WSACleanup() is scheduled to be
4384 PyDoc_STRVAR(socket_doc
,
4385 "Implementation module for socket operations.\n\
4387 See the socket module for documentation.");
4392 PyObject
*m
, *has_ipv6
;
4397 Py_TYPE(&sock_type
) = &PyType_Type
;
4398 m
= Py_InitModule3(PySocket_MODULE_NAME
,
4404 socket_error
= PyErr_NewException("socket.error",
4405 PyExc_IOError
, NULL
);
4406 if (socket_error
== NULL
)
4408 PySocketModuleAPI
.error
= socket_error
;
4409 Py_INCREF(socket_error
);
4410 PyModule_AddObject(m
, "error", socket_error
);
4411 socket_herror
= PyErr_NewException("socket.herror",
4412 socket_error
, NULL
);
4413 if (socket_herror
== NULL
)
4415 Py_INCREF(socket_herror
);
4416 PyModule_AddObject(m
, "herror", socket_herror
);
4417 socket_gaierror
= PyErr_NewException("socket.gaierror", socket_error
,
4419 if (socket_gaierror
== NULL
)
4421 Py_INCREF(socket_gaierror
);
4422 PyModule_AddObject(m
, "gaierror", socket_gaierror
);
4423 socket_timeout
= PyErr_NewException("socket.timeout",
4424 socket_error
, NULL
);
4425 if (socket_timeout
== NULL
)
4427 Py_INCREF(socket_timeout
);
4428 PyModule_AddObject(m
, "timeout", socket_timeout
);
4429 Py_INCREF((PyObject
*)&sock_type
);
4430 if (PyModule_AddObject(m
, "SocketType",
4431 (PyObject
*)&sock_type
) != 0)
4433 Py_INCREF((PyObject
*)&sock_type
);
4434 if (PyModule_AddObject(m
, "socket",
4435 (PyObject
*)&sock_type
) != 0)
4441 has_ipv6
= Py_False
;
4443 Py_INCREF(has_ipv6
);
4444 PyModule_AddObject(m
, "has_ipv6", has_ipv6
);
4447 if (PyModule_AddObject(m
, PySocket_CAPI_NAME
,
4448 PyCObject_FromVoidPtr((void *)&PySocketModuleAPI
, NULL
)
4452 /* Address families (we only support AF_INET and AF_UNIX) */
4454 PyModule_AddIntConstant(m
, "AF_UNSPEC", AF_UNSPEC
);
4456 PyModule_AddIntConstant(m
, "AF_INET", AF_INET
);
4458 PyModule_AddIntConstant(m
, "AF_INET6", AF_INET6
);
4459 #endif /* AF_INET6 */
4460 #if defined(AF_UNIX)
4461 PyModule_AddIntConstant(m
, "AF_UNIX", AF_UNIX
);
4462 #endif /* AF_UNIX */
4464 /* Amateur Radio AX.25 */
4465 PyModule_AddIntConstant(m
, "AF_AX25", AF_AX25
);
4468 PyModule_AddIntConstant(m
, "AF_IPX", AF_IPX
); /* Novell IPX */
4472 PyModule_AddIntConstant(m
, "AF_APPLETALK", AF_APPLETALK
);
4475 /* Amateur radio NetROM */
4476 PyModule_AddIntConstant(m
, "AF_NETROM", AF_NETROM
);
4479 /* Multiprotocol bridge */
4480 PyModule_AddIntConstant(m
, "AF_BRIDGE", AF_BRIDGE
);
4484 PyModule_AddIntConstant(m
, "AF_ATMPVC", AF_ATMPVC
);
4487 /* Reserved for Werner's ATM */
4488 PyModule_AddIntConstant(m
, "AF_AAL5", AF_AAL5
);
4491 /* Reserved for X.25 project */
4492 PyModule_AddIntConstant(m
, "AF_X25", AF_X25
);
4495 PyModule_AddIntConstant(m
, "AF_INET6", AF_INET6
); /* IP version 6 */
4498 /* Amateur Radio X.25 PLP */
4499 PyModule_AddIntConstant(m
, "AF_ROSE", AF_ROSE
);
4502 /* Reserved for DECnet project */
4503 PyModule_AddIntConstant(m
, "AF_DECnet", AF_DECnet
);
4506 /* Reserved for 802.2LLC project */
4507 PyModule_AddIntConstant(m
, "AF_NETBEUI", AF_NETBEUI
);
4510 /* Security callback pseudo AF */
4511 PyModule_AddIntConstant(m
, "AF_SECURITY", AF_SECURITY
);
4514 /* PF_KEY key management API */
4515 PyModule_AddIntConstant(m
, "AF_KEY", AF_KEY
);
4519 PyModule_AddIntConstant(m
, "AF_NETLINK", AF_NETLINK
);
4520 PyModule_AddIntConstant(m
, "NETLINK_ROUTE", NETLINK_ROUTE
);
4522 PyModule_AddIntConstant(m
, "NETLINK_SKIP", NETLINK_SKIP
);
4525 PyModule_AddIntConstant(m
, "NETLINK_W1", NETLINK_W1
);
4527 PyModule_AddIntConstant(m
, "NETLINK_USERSOCK", NETLINK_USERSOCK
);
4528 PyModule_AddIntConstant(m
, "NETLINK_FIREWALL", NETLINK_FIREWALL
);
4529 #ifdef NETLINK_TCPDIAG
4530 PyModule_AddIntConstant(m
, "NETLINK_TCPDIAG", NETLINK_TCPDIAG
);
4532 #ifdef NETLINK_NFLOG
4533 PyModule_AddIntConstant(m
, "NETLINK_NFLOG", NETLINK_NFLOG
);
4536 PyModule_AddIntConstant(m
, "NETLINK_XFRM", NETLINK_XFRM
);
4539 PyModule_AddIntConstant(m
, "NETLINK_ARPD", NETLINK_ARPD
);
4541 #ifdef NETLINK_ROUTE6
4542 PyModule_AddIntConstant(m
, "NETLINK_ROUTE6", NETLINK_ROUTE6
);
4544 PyModule_AddIntConstant(m
, "NETLINK_IP6_FW", NETLINK_IP6_FW
);
4545 #ifdef NETLINK_DNRTMSG
4546 PyModule_AddIntConstant(m
, "NETLINK_DNRTMSG", NETLINK_DNRTMSG
);
4548 #ifdef NETLINK_TAPBASE
4549 PyModule_AddIntConstant(m
, "NETLINK_TAPBASE", NETLINK_TAPBASE
);
4551 #endif /* AF_NETLINK */
4553 /* Alias to emulate 4.4BSD */
4554 PyModule_AddIntConstant(m
, "AF_ROUTE", AF_ROUTE
);
4558 PyModule_AddIntConstant(m
, "AF_ASH", AF_ASH
);
4562 PyModule_AddIntConstant(m
, "AF_ECONET", AF_ECONET
);
4566 PyModule_AddIntConstant(m
, "AF_ATMSVC", AF_ATMSVC
);
4569 /* Linux SNA Project (nutters!) */
4570 PyModule_AddIntConstant(m
, "AF_SNA", AF_SNA
);
4574 PyModule_AddIntConstant(m
, "AF_IRDA", AF_IRDA
);
4578 PyModule_AddIntConstant(m
, "AF_PPPOX", AF_PPPOX
);
4581 /* Wanpipe API Sockets */
4582 PyModule_AddIntConstant(m
, "AF_WANPIPE", AF_WANPIPE
);
4586 PyModule_AddIntConstant(m
, "AF_LLC", AF_LLC
);
4589 #ifdef USE_BLUETOOTH
4590 PyModule_AddIntConstant(m
, "AF_BLUETOOTH", AF_BLUETOOTH
);
4591 PyModule_AddIntConstant(m
, "BTPROTO_L2CAP", BTPROTO_L2CAP
);
4592 PyModule_AddIntConstant(m
, "BTPROTO_HCI", BTPROTO_HCI
);
4593 PyModule_AddIntConstant(m
, "SOL_HCI", SOL_HCI
);
4594 PyModule_AddIntConstant(m
, "HCI_FILTER", HCI_FILTER
);
4595 #if !defined(__FreeBSD__)
4596 PyModule_AddIntConstant(m
, "HCI_TIME_STAMP", HCI_TIME_STAMP
);
4597 PyModule_AddIntConstant(m
, "HCI_DATA_DIR", HCI_DATA_DIR
);
4598 PyModule_AddIntConstant(m
, "BTPROTO_SCO", BTPROTO_SCO
);
4600 PyModule_AddIntConstant(m
, "BTPROTO_RFCOMM", BTPROTO_RFCOMM
);
4601 PyModule_AddStringConstant(m
, "BDADDR_ANY", "00:00:00:00:00:00");
4602 PyModule_AddStringConstant(m
, "BDADDR_LOCAL", "00:00:00:FF:FF:FF");
4605 #ifdef HAVE_NETPACKET_PACKET_H
4606 PyModule_AddIntConstant(m
, "AF_PACKET", AF_PACKET
);
4607 PyModule_AddIntConstant(m
, "PF_PACKET", PF_PACKET
);
4608 PyModule_AddIntConstant(m
, "PACKET_HOST", PACKET_HOST
);
4609 PyModule_AddIntConstant(m
, "PACKET_BROADCAST", PACKET_BROADCAST
);
4610 PyModule_AddIntConstant(m
, "PACKET_MULTICAST", PACKET_MULTICAST
);
4611 PyModule_AddIntConstant(m
, "PACKET_OTHERHOST", PACKET_OTHERHOST
);
4612 PyModule_AddIntConstant(m
, "PACKET_OUTGOING", PACKET_OUTGOING
);
4613 PyModule_AddIntConstant(m
, "PACKET_LOOPBACK", PACKET_LOOPBACK
);
4614 PyModule_AddIntConstant(m
, "PACKET_FASTROUTE", PACKET_FASTROUTE
);
4617 #ifdef HAVE_LINUX_TIPC_H
4618 PyModule_AddIntConstant(m
, "AF_TIPC", AF_TIPC
);
4621 PyModule_AddIntConstant(m
, "TIPC_ADDR_NAMESEQ", TIPC_ADDR_NAMESEQ
);
4622 PyModule_AddIntConstant(m
, "TIPC_ADDR_NAME", TIPC_ADDR_NAME
);
4623 PyModule_AddIntConstant(m
, "TIPC_ADDR_ID", TIPC_ADDR_ID
);
4625 PyModule_AddIntConstant(m
, "TIPC_ZONE_SCOPE", TIPC_ZONE_SCOPE
);
4626 PyModule_AddIntConstant(m
, "TIPC_CLUSTER_SCOPE", TIPC_CLUSTER_SCOPE
);
4627 PyModule_AddIntConstant(m
, "TIPC_NODE_SCOPE", TIPC_NODE_SCOPE
);
4629 /* for setsockopt() */
4630 PyModule_AddIntConstant(m
, "SOL_TIPC", SOL_TIPC
);
4631 PyModule_AddIntConstant(m
, "TIPC_IMPORTANCE", TIPC_IMPORTANCE
);
4632 PyModule_AddIntConstant(m
, "TIPC_SRC_DROPPABLE", TIPC_SRC_DROPPABLE
);
4633 PyModule_AddIntConstant(m
, "TIPC_DEST_DROPPABLE",
4634 TIPC_DEST_DROPPABLE
);
4635 PyModule_AddIntConstant(m
, "TIPC_CONN_TIMEOUT", TIPC_CONN_TIMEOUT
);
4637 PyModule_AddIntConstant(m
, "TIPC_LOW_IMPORTANCE",
4638 TIPC_LOW_IMPORTANCE
);
4639 PyModule_AddIntConstant(m
, "TIPC_MEDIUM_IMPORTANCE",
4640 TIPC_MEDIUM_IMPORTANCE
);
4641 PyModule_AddIntConstant(m
, "TIPC_HIGH_IMPORTANCE",
4642 TIPC_HIGH_IMPORTANCE
);
4643 PyModule_AddIntConstant(m
, "TIPC_CRITICAL_IMPORTANCE",
4644 TIPC_CRITICAL_IMPORTANCE
);
4646 /* for subscriptions */
4647 PyModule_AddIntConstant(m
, "TIPC_SUB_PORTS", TIPC_SUB_PORTS
);
4648 PyModule_AddIntConstant(m
, "TIPC_SUB_SERVICE", TIPC_SUB_SERVICE
);
4649 #ifdef TIPC_SUB_CANCEL
4650 /* doesn't seem to be available everywhere */
4651 PyModule_AddIntConstant(m
, "TIPC_SUB_CANCEL", TIPC_SUB_CANCEL
);
4653 PyModule_AddIntConstant(m
, "TIPC_WAIT_FOREVER", TIPC_WAIT_FOREVER
);
4654 PyModule_AddIntConstant(m
, "TIPC_PUBLISHED", TIPC_PUBLISHED
);
4655 PyModule_AddIntConstant(m
, "TIPC_WITHDRAWN", TIPC_WITHDRAWN
);
4656 PyModule_AddIntConstant(m
, "TIPC_SUBSCR_TIMEOUT", TIPC_SUBSCR_TIMEOUT
);
4657 PyModule_AddIntConstant(m
, "TIPC_CFG_SRV", TIPC_CFG_SRV
);
4658 PyModule_AddIntConstant(m
, "TIPC_TOP_SRV", TIPC_TOP_SRV
);
4662 PyModule_AddIntConstant(m
, "SOCK_STREAM", SOCK_STREAM
);
4663 PyModule_AddIntConstant(m
, "SOCK_DGRAM", SOCK_DGRAM
);
4665 /* We have incomplete socket support. */
4666 PyModule_AddIntConstant(m
, "SOCK_RAW", SOCK_RAW
);
4667 PyModule_AddIntConstant(m
, "SOCK_SEQPACKET", SOCK_SEQPACKET
);
4668 #if defined(SOCK_RDM)
4669 PyModule_AddIntConstant(m
, "SOCK_RDM", SOCK_RDM
);
4674 PyModule_AddIntConstant(m
, "SO_DEBUG", SO_DEBUG
);
4676 #ifdef SO_ACCEPTCONN
4677 PyModule_AddIntConstant(m
, "SO_ACCEPTCONN", SO_ACCEPTCONN
);
4680 PyModule_AddIntConstant(m
, "SO_REUSEADDR", SO_REUSEADDR
);
4682 #ifdef SO_EXCLUSIVEADDRUSE
4683 PyModule_AddIntConstant(m
, "SO_EXCLUSIVEADDRUSE", SO_EXCLUSIVEADDRUSE
);
4687 PyModule_AddIntConstant(m
, "SO_KEEPALIVE", SO_KEEPALIVE
);
4690 PyModule_AddIntConstant(m
, "SO_DONTROUTE", SO_DONTROUTE
);
4693 PyModule_AddIntConstant(m
, "SO_BROADCAST", SO_BROADCAST
);
4695 #ifdef SO_USELOOPBACK
4696 PyModule_AddIntConstant(m
, "SO_USELOOPBACK", SO_USELOOPBACK
);
4699 PyModule_AddIntConstant(m
, "SO_LINGER", SO_LINGER
);
4702 PyModule_AddIntConstant(m
, "SO_OOBINLINE", SO_OOBINLINE
);
4705 PyModule_AddIntConstant(m
, "SO_REUSEPORT", SO_REUSEPORT
);
4708 PyModule_AddIntConstant(m
, "SO_SNDBUF", SO_SNDBUF
);
4711 PyModule_AddIntConstant(m
, "SO_RCVBUF", SO_RCVBUF
);
4714 PyModule_AddIntConstant(m
, "SO_SNDLOWAT", SO_SNDLOWAT
);
4717 PyModule_AddIntConstant(m
, "SO_RCVLOWAT", SO_RCVLOWAT
);
4720 PyModule_AddIntConstant(m
, "SO_SNDTIMEO", SO_SNDTIMEO
);
4723 PyModule_AddIntConstant(m
, "SO_RCVTIMEO", SO_RCVTIMEO
);
4726 PyModule_AddIntConstant(m
, "SO_ERROR", SO_ERROR
);
4729 PyModule_AddIntConstant(m
, "SO_TYPE", SO_TYPE
);
4732 /* Maximum number of connections for "listen" */
4734 PyModule_AddIntConstant(m
, "SOMAXCONN", SOMAXCONN
);
4736 PyModule_AddIntConstant(m
, "SOMAXCONN", 5); /* Common value */
4739 /* Flags for send, recv */
4741 PyModule_AddIntConstant(m
, "MSG_OOB", MSG_OOB
);
4744 PyModule_AddIntConstant(m
, "MSG_PEEK", MSG_PEEK
);
4746 #ifdef MSG_DONTROUTE
4747 PyModule_AddIntConstant(m
, "MSG_DONTROUTE", MSG_DONTROUTE
);
4750 PyModule_AddIntConstant(m
, "MSG_DONTWAIT", MSG_DONTWAIT
);
4753 PyModule_AddIntConstant(m
, "MSG_EOR", MSG_EOR
);
4756 PyModule_AddIntConstant(m
, "MSG_TRUNC", MSG_TRUNC
);
4759 PyModule_AddIntConstant(m
, "MSG_CTRUNC", MSG_CTRUNC
);
4762 PyModule_AddIntConstant(m
, "MSG_WAITALL", MSG_WAITALL
);
4765 PyModule_AddIntConstant(m
, "MSG_BTAG", MSG_BTAG
);
4768 PyModule_AddIntConstant(m
, "MSG_ETAG", MSG_ETAG
);
4771 /* Protocol level and numbers, usable for [gs]etsockopt */
4773 PyModule_AddIntConstant(m
, "SOL_SOCKET", SOL_SOCKET
);
4776 PyModule_AddIntConstant(m
, "SOL_IP", SOL_IP
);
4778 PyModule_AddIntConstant(m
, "SOL_IP", 0);
4781 PyModule_AddIntConstant(m
, "SOL_IPX", SOL_IPX
);
4784 PyModule_AddIntConstant(m
, "SOL_AX25", SOL_AX25
);
4787 PyModule_AddIntConstant(m
, "SOL_ATALK", SOL_ATALK
);
4790 PyModule_AddIntConstant(m
, "SOL_NETROM", SOL_NETROM
);
4793 PyModule_AddIntConstant(m
, "SOL_ROSE", SOL_ROSE
);
4796 PyModule_AddIntConstant(m
, "SOL_TCP", SOL_TCP
);
4798 PyModule_AddIntConstant(m
, "SOL_TCP", 6);
4801 PyModule_AddIntConstant(m
, "SOL_UDP", SOL_UDP
);
4803 PyModule_AddIntConstant(m
, "SOL_UDP", 17);
4806 PyModule_AddIntConstant(m
, "IPPROTO_IP", IPPROTO_IP
);
4808 PyModule_AddIntConstant(m
, "IPPROTO_IP", 0);
4810 #ifdef IPPROTO_HOPOPTS
4811 PyModule_AddIntConstant(m
, "IPPROTO_HOPOPTS", IPPROTO_HOPOPTS
);
4814 PyModule_AddIntConstant(m
, "IPPROTO_ICMP", IPPROTO_ICMP
);
4816 PyModule_AddIntConstant(m
, "IPPROTO_ICMP", 1);
4819 PyModule_AddIntConstant(m
, "IPPROTO_IGMP", IPPROTO_IGMP
);
4822 PyModule_AddIntConstant(m
, "IPPROTO_GGP", IPPROTO_GGP
);
4825 PyModule_AddIntConstant(m
, "IPPROTO_IPV4", IPPROTO_IPV4
);
4828 PyModule_AddIntConstant(m
, "IPPROTO_IPV6", IPPROTO_IPV6
);
4831 PyModule_AddIntConstant(m
, "IPPROTO_IPIP", IPPROTO_IPIP
);
4834 PyModule_AddIntConstant(m
, "IPPROTO_TCP", IPPROTO_TCP
);
4836 PyModule_AddIntConstant(m
, "IPPROTO_TCP", 6);
4839 PyModule_AddIntConstant(m
, "IPPROTO_EGP", IPPROTO_EGP
);
4842 PyModule_AddIntConstant(m
, "IPPROTO_PUP", IPPROTO_PUP
);
4845 PyModule_AddIntConstant(m
, "IPPROTO_UDP", IPPROTO_UDP
);
4847 PyModule_AddIntConstant(m
, "IPPROTO_UDP", 17);
4850 PyModule_AddIntConstant(m
, "IPPROTO_IDP", IPPROTO_IDP
);
4852 #ifdef IPPROTO_HELLO
4853 PyModule_AddIntConstant(m
, "IPPROTO_HELLO", IPPROTO_HELLO
);
4856 PyModule_AddIntConstant(m
, "IPPROTO_ND", IPPROTO_ND
);
4859 PyModule_AddIntConstant(m
, "IPPROTO_TP", IPPROTO_TP
);
4862 PyModule_AddIntConstant(m
, "IPPROTO_IPV6", IPPROTO_IPV6
);
4864 #ifdef IPPROTO_ROUTING
4865 PyModule_AddIntConstant(m
, "IPPROTO_ROUTING", IPPROTO_ROUTING
);
4867 #ifdef IPPROTO_FRAGMENT
4868 PyModule_AddIntConstant(m
, "IPPROTO_FRAGMENT", IPPROTO_FRAGMENT
);
4871 PyModule_AddIntConstant(m
, "IPPROTO_RSVP", IPPROTO_RSVP
);
4874 PyModule_AddIntConstant(m
, "IPPROTO_GRE", IPPROTO_GRE
);
4877 PyModule_AddIntConstant(m
, "IPPROTO_ESP", IPPROTO_ESP
);
4880 PyModule_AddIntConstant(m
, "IPPROTO_AH", IPPROTO_AH
);
4882 #ifdef IPPROTO_MOBILE
4883 PyModule_AddIntConstant(m
, "IPPROTO_MOBILE", IPPROTO_MOBILE
);
4885 #ifdef IPPROTO_ICMPV6
4886 PyModule_AddIntConstant(m
, "IPPROTO_ICMPV6", IPPROTO_ICMPV6
);
4889 PyModule_AddIntConstant(m
, "IPPROTO_NONE", IPPROTO_NONE
);
4891 #ifdef IPPROTO_DSTOPTS
4892 PyModule_AddIntConstant(m
, "IPPROTO_DSTOPTS", IPPROTO_DSTOPTS
);
4895 PyModule_AddIntConstant(m
, "IPPROTO_XTP", IPPROTO_XTP
);
4898 PyModule_AddIntConstant(m
, "IPPROTO_EON", IPPROTO_EON
);
4901 PyModule_AddIntConstant(m
, "IPPROTO_PIM", IPPROTO_PIM
);
4903 #ifdef IPPROTO_IPCOMP
4904 PyModule_AddIntConstant(m
, "IPPROTO_IPCOMP", IPPROTO_IPCOMP
);
4907 PyModule_AddIntConstant(m
, "IPPROTO_VRRP", IPPROTO_VRRP
);
4910 PyModule_AddIntConstant(m
, "IPPROTO_BIP", IPPROTO_BIP
);
4914 PyModule_AddIntConstant(m
, "IPPROTO_RAW", IPPROTO_RAW
);
4916 PyModule_AddIntConstant(m
, "IPPROTO_RAW", 255);
4919 PyModule_AddIntConstant(m
, "IPPROTO_MAX", IPPROTO_MAX
);
4922 /* Some port configuration */
4923 #ifdef IPPORT_RESERVED
4924 PyModule_AddIntConstant(m
, "IPPORT_RESERVED", IPPORT_RESERVED
);
4926 PyModule_AddIntConstant(m
, "IPPORT_RESERVED", 1024);
4928 #ifdef IPPORT_USERRESERVED
4929 PyModule_AddIntConstant(m
, "IPPORT_USERRESERVED", IPPORT_USERRESERVED
);
4931 PyModule_AddIntConstant(m
, "IPPORT_USERRESERVED", 5000);
4934 /* Some reserved IP v.4 addresses */
4936 PyModule_AddIntConstant(m
, "INADDR_ANY", INADDR_ANY
);
4938 PyModule_AddIntConstant(m
, "INADDR_ANY", 0x00000000);
4940 #ifdef INADDR_BROADCAST
4941 PyModule_AddIntConstant(m
, "INADDR_BROADCAST", INADDR_BROADCAST
);
4943 PyModule_AddIntConstant(m
, "INADDR_BROADCAST", 0xffffffff);
4945 #ifdef INADDR_LOOPBACK
4946 PyModule_AddIntConstant(m
, "INADDR_LOOPBACK", INADDR_LOOPBACK
);
4948 PyModule_AddIntConstant(m
, "INADDR_LOOPBACK", 0x7F000001);
4950 #ifdef INADDR_UNSPEC_GROUP
4951 PyModule_AddIntConstant(m
, "INADDR_UNSPEC_GROUP", INADDR_UNSPEC_GROUP
);
4953 PyModule_AddIntConstant(m
, "INADDR_UNSPEC_GROUP", 0xe0000000);
4955 #ifdef INADDR_ALLHOSTS_GROUP
4956 PyModule_AddIntConstant(m
, "INADDR_ALLHOSTS_GROUP",
4957 INADDR_ALLHOSTS_GROUP
);
4959 PyModule_AddIntConstant(m
, "INADDR_ALLHOSTS_GROUP", 0xe0000001);
4961 #ifdef INADDR_MAX_LOCAL_GROUP
4962 PyModule_AddIntConstant(m
, "INADDR_MAX_LOCAL_GROUP",
4963 INADDR_MAX_LOCAL_GROUP
);
4965 PyModule_AddIntConstant(m
, "INADDR_MAX_LOCAL_GROUP", 0xe00000ff);
4968 PyModule_AddIntConstant(m
, "INADDR_NONE", INADDR_NONE
);
4970 PyModule_AddIntConstant(m
, "INADDR_NONE", 0xffffffff);
4973 /* IPv4 [gs]etsockopt options */
4975 PyModule_AddIntConstant(m
, "IP_OPTIONS", IP_OPTIONS
);
4978 PyModule_AddIntConstant(m
, "IP_HDRINCL", IP_HDRINCL
);
4981 PyModule_AddIntConstant(m
, "IP_TOS", IP_TOS
);
4984 PyModule_AddIntConstant(m
, "IP_TTL", IP_TTL
);
4987 PyModule_AddIntConstant(m
, "IP_RECVOPTS", IP_RECVOPTS
);
4989 #ifdef IP_RECVRETOPTS
4990 PyModule_AddIntConstant(m
, "IP_RECVRETOPTS", IP_RECVRETOPTS
);
4992 #ifdef IP_RECVDSTADDR
4993 PyModule_AddIntConstant(m
, "IP_RECVDSTADDR", IP_RECVDSTADDR
);
4996 PyModule_AddIntConstant(m
, "IP_RETOPTS", IP_RETOPTS
);
4998 #ifdef IP_MULTICAST_IF
4999 PyModule_AddIntConstant(m
, "IP_MULTICAST_IF", IP_MULTICAST_IF
);
5001 #ifdef IP_MULTICAST_TTL
5002 PyModule_AddIntConstant(m
, "IP_MULTICAST_TTL", IP_MULTICAST_TTL
);
5004 #ifdef IP_MULTICAST_LOOP
5005 PyModule_AddIntConstant(m
, "IP_MULTICAST_LOOP", IP_MULTICAST_LOOP
);
5007 #ifdef IP_ADD_MEMBERSHIP
5008 PyModule_AddIntConstant(m
, "IP_ADD_MEMBERSHIP", IP_ADD_MEMBERSHIP
);
5010 #ifdef IP_DROP_MEMBERSHIP
5011 PyModule_AddIntConstant(m
, "IP_DROP_MEMBERSHIP", IP_DROP_MEMBERSHIP
);
5013 #ifdef IP_DEFAULT_MULTICAST_TTL
5014 PyModule_AddIntConstant(m
, "IP_DEFAULT_MULTICAST_TTL",
5015 IP_DEFAULT_MULTICAST_TTL
);
5017 #ifdef IP_DEFAULT_MULTICAST_LOOP
5018 PyModule_AddIntConstant(m
, "IP_DEFAULT_MULTICAST_LOOP",
5019 IP_DEFAULT_MULTICAST_LOOP
);
5021 #ifdef IP_MAX_MEMBERSHIPS
5022 PyModule_AddIntConstant(m
, "IP_MAX_MEMBERSHIPS", IP_MAX_MEMBERSHIPS
);
5025 /* IPv6 [gs]etsockopt options, defined in RFC2553 */
5026 #ifdef IPV6_JOIN_GROUP
5027 PyModule_AddIntConstant(m
, "IPV6_JOIN_GROUP", IPV6_JOIN_GROUP
);
5029 #ifdef IPV6_LEAVE_GROUP
5030 PyModule_AddIntConstant(m
, "IPV6_LEAVE_GROUP", IPV6_LEAVE_GROUP
);
5032 #ifdef IPV6_MULTICAST_HOPS
5033 PyModule_AddIntConstant(m
, "IPV6_MULTICAST_HOPS", IPV6_MULTICAST_HOPS
);
5035 #ifdef IPV6_MULTICAST_IF
5036 PyModule_AddIntConstant(m
, "IPV6_MULTICAST_IF", IPV6_MULTICAST_IF
);
5038 #ifdef IPV6_MULTICAST_LOOP
5039 PyModule_AddIntConstant(m
, "IPV6_MULTICAST_LOOP", IPV6_MULTICAST_LOOP
);
5041 #ifdef IPV6_UNICAST_HOPS
5042 PyModule_AddIntConstant(m
, "IPV6_UNICAST_HOPS", IPV6_UNICAST_HOPS
);
5044 /* Additional IPV6 socket options, defined in RFC 3493 */
5046 PyModule_AddIntConstant(m
, "IPV6_V6ONLY", IPV6_V6ONLY
);
5048 /* Advanced IPV6 socket options, from RFC 3542 */
5049 #ifdef IPV6_CHECKSUM
5050 PyModule_AddIntConstant(m
, "IPV6_CHECKSUM", IPV6_CHECKSUM
);
5052 #ifdef IPV6_DONTFRAG
5053 PyModule_AddIntConstant(m
, "IPV6_DONTFRAG", IPV6_DONTFRAG
);
5056 PyModule_AddIntConstant(m
, "IPV6_DSTOPTS", IPV6_DSTOPTS
);
5058 #ifdef IPV6_HOPLIMIT
5059 PyModule_AddIntConstant(m
, "IPV6_HOPLIMIT", IPV6_HOPLIMIT
);
5062 PyModule_AddIntConstant(m
, "IPV6_HOPOPTS", IPV6_HOPOPTS
);
5065 PyModule_AddIntConstant(m
, "IPV6_NEXTHOP", IPV6_NEXTHOP
);
5068 PyModule_AddIntConstant(m
, "IPV6_PATHMTU", IPV6_PATHMTU
);
5071 PyModule_AddIntConstant(m
, "IPV6_PKTINFO", IPV6_PKTINFO
);
5073 #ifdef IPV6_RECVDSTOPTS
5074 PyModule_AddIntConstant(m
, "IPV6_RECVDSTOPTS", IPV6_RECVDSTOPTS
);
5076 #ifdef IPV6_RECVHOPLIMIT
5077 PyModule_AddIntConstant(m
, "IPV6_RECVHOPLIMIT", IPV6_RECVHOPLIMIT
);
5079 #ifdef IPV6_RECVHOPOPTS
5080 PyModule_AddIntConstant(m
, "IPV6_RECVHOPOPTS", IPV6_RECVHOPOPTS
);
5082 #ifdef IPV6_RECVPKTINFO
5083 PyModule_AddIntConstant(m
, "IPV6_RECVPKTINFO", IPV6_RECVPKTINFO
);
5085 #ifdef IPV6_RECVRTHDR
5086 PyModule_AddIntConstant(m
, "IPV6_RECVRTHDR", IPV6_RECVRTHDR
);
5088 #ifdef IPV6_RECVTCLASS
5089 PyModule_AddIntConstant(m
, "IPV6_RECVTCLASS", IPV6_RECVTCLASS
);
5092 PyModule_AddIntConstant(m
, "IPV6_RTHDR", IPV6_RTHDR
);
5094 #ifdef IPV6_RTHDRDSTOPTS
5095 PyModule_AddIntConstant(m
, "IPV6_RTHDRDSTOPTS", IPV6_RTHDRDSTOPTS
);
5097 #ifdef IPV6_RTHDR_TYPE_0
5098 PyModule_AddIntConstant(m
, "IPV6_RTHDR_TYPE_0", IPV6_RTHDR_TYPE_0
);
5100 #ifdef IPV6_RECVPATHMTU
5101 PyModule_AddIntConstant(m
, "IPV6_RECVPATHMTU", IPV6_RECVPATHMTU
);
5104 PyModule_AddIntConstant(m
, "IPV6_TCLASS", IPV6_TCLASS
);
5106 #ifdef IPV6_USE_MIN_MTU
5107 PyModule_AddIntConstant(m
, "IPV6_USE_MIN_MTU", IPV6_USE_MIN_MTU
);
5112 PyModule_AddIntConstant(m
, "TCP_NODELAY", TCP_NODELAY
);
5115 PyModule_AddIntConstant(m
, "TCP_MAXSEG", TCP_MAXSEG
);
5118 PyModule_AddIntConstant(m
, "TCP_CORK", TCP_CORK
);
5121 PyModule_AddIntConstant(m
, "TCP_KEEPIDLE", TCP_KEEPIDLE
);
5123 #ifdef TCP_KEEPINTVL
5124 PyModule_AddIntConstant(m
, "TCP_KEEPINTVL", TCP_KEEPINTVL
);
5127 PyModule_AddIntConstant(m
, "TCP_KEEPCNT", TCP_KEEPCNT
);
5130 PyModule_AddIntConstant(m
, "TCP_SYNCNT", TCP_SYNCNT
);
5133 PyModule_AddIntConstant(m
, "TCP_LINGER2", TCP_LINGER2
);
5135 #ifdef TCP_DEFER_ACCEPT
5136 PyModule_AddIntConstant(m
, "TCP_DEFER_ACCEPT", TCP_DEFER_ACCEPT
);
5138 #ifdef TCP_WINDOW_CLAMP
5139 PyModule_AddIntConstant(m
, "TCP_WINDOW_CLAMP", TCP_WINDOW_CLAMP
);
5142 PyModule_AddIntConstant(m
, "TCP_INFO", TCP_INFO
);
5145 PyModule_AddIntConstant(m
, "TCP_QUICKACK", TCP_QUICKACK
);
5151 PyModule_AddIntConstant(m
, "IPX_TYPE", IPX_TYPE
);
5154 /* get{addr,name}info parameters */
5155 #ifdef EAI_ADDRFAMILY
5156 PyModule_AddIntConstant(m
, "EAI_ADDRFAMILY", EAI_ADDRFAMILY
);
5159 PyModule_AddIntConstant(m
, "EAI_AGAIN", EAI_AGAIN
);
5162 PyModule_AddIntConstant(m
, "EAI_BADFLAGS", EAI_BADFLAGS
);
5165 PyModule_AddIntConstant(m
, "EAI_FAIL", EAI_FAIL
);
5168 PyModule_AddIntConstant(m
, "EAI_FAMILY", EAI_FAMILY
);
5171 PyModule_AddIntConstant(m
, "EAI_MEMORY", EAI_MEMORY
);
5174 PyModule_AddIntConstant(m
, "EAI_NODATA", EAI_NODATA
);
5177 PyModule_AddIntConstant(m
, "EAI_NONAME", EAI_NONAME
);
5180 PyModule_AddIntConstant(m
, "EAI_OVERFLOW", EAI_OVERFLOW
);
5183 PyModule_AddIntConstant(m
, "EAI_SERVICE", EAI_SERVICE
);
5186 PyModule_AddIntConstant(m
, "EAI_SOCKTYPE", EAI_SOCKTYPE
);
5189 PyModule_AddIntConstant(m
, "EAI_SYSTEM", EAI_SYSTEM
);
5192 PyModule_AddIntConstant(m
, "EAI_BADHINTS", EAI_BADHINTS
);
5195 PyModule_AddIntConstant(m
, "EAI_PROTOCOL", EAI_PROTOCOL
);
5198 PyModule_AddIntConstant(m
, "EAI_MAX", EAI_MAX
);
5201 PyModule_AddIntConstant(m
, "AI_PASSIVE", AI_PASSIVE
);
5204 PyModule_AddIntConstant(m
, "AI_CANONNAME", AI_CANONNAME
);
5206 #ifdef AI_NUMERICHOST
5207 PyModule_AddIntConstant(m
, "AI_NUMERICHOST", AI_NUMERICHOST
);
5209 #ifdef AI_NUMERICSERV
5210 PyModule_AddIntConstant(m
, "AI_NUMERICSERV", AI_NUMERICSERV
);
5213 PyModule_AddIntConstant(m
, "AI_MASK", AI_MASK
);
5216 PyModule_AddIntConstant(m
, "AI_ALL", AI_ALL
);
5218 #ifdef AI_V4MAPPED_CFG
5219 PyModule_AddIntConstant(m
, "AI_V4MAPPED_CFG", AI_V4MAPPED_CFG
);
5221 #ifdef AI_ADDRCONFIG
5222 PyModule_AddIntConstant(m
, "AI_ADDRCONFIG", AI_ADDRCONFIG
);
5225 PyModule_AddIntConstant(m
, "AI_V4MAPPED", AI_V4MAPPED
);
5228 PyModule_AddIntConstant(m
, "AI_DEFAULT", AI_DEFAULT
);
5231 PyModule_AddIntConstant(m
, "NI_MAXHOST", NI_MAXHOST
);
5234 PyModule_AddIntConstant(m
, "NI_MAXSERV", NI_MAXSERV
);
5237 PyModule_AddIntConstant(m
, "NI_NOFQDN", NI_NOFQDN
);
5239 #ifdef NI_NUMERICHOST
5240 PyModule_AddIntConstant(m
, "NI_NUMERICHOST", NI_NUMERICHOST
);
5243 PyModule_AddIntConstant(m
, "NI_NAMEREQD", NI_NAMEREQD
);
5245 #ifdef NI_NUMERICSERV
5246 PyModule_AddIntConstant(m
, "NI_NUMERICSERV", NI_NUMERICSERV
);
5249 PyModule_AddIntConstant(m
, "NI_DGRAM", NI_DGRAM
);
5252 /* shutdown() parameters */
5254 PyModule_AddIntConstant(m
, "SHUT_RD", SHUT_RD
);
5255 #elif defined(SD_RECEIVE)
5256 PyModule_AddIntConstant(m
, "SHUT_RD", SD_RECEIVE
);
5258 PyModule_AddIntConstant(m
, "SHUT_RD", 0);
5261 PyModule_AddIntConstant(m
, "SHUT_WR", SHUT_WR
);
5262 #elif defined(SD_SEND)
5263 PyModule_AddIntConstant(m
, "SHUT_WR", SD_SEND
);
5265 PyModule_AddIntConstant(m
, "SHUT_WR", 1);
5268 PyModule_AddIntConstant(m
, "SHUT_RDWR", SHUT_RDWR
);
5269 #elif defined(SD_BOTH)
5270 PyModule_AddIntConstant(m
, "SHUT_RDWR", SD_BOTH
);
5272 PyModule_AddIntConstant(m
, "SHUT_RDWR", 2);
5278 tmp
= PyLong_FromUnsignedLong(SIO_RCVALL
);
5281 PyModule_AddObject(m
, "SIO_RCVALL", tmp
);
5283 PyModule_AddIntConstant(m
, "RCVALL_OFF", RCVALL_OFF
);
5284 PyModule_AddIntConstant(m
, "RCVALL_ON", RCVALL_ON
);
5285 PyModule_AddIntConstant(m
, "RCVALL_SOCKETLEVELONLY", RCVALL_SOCKETLEVELONLY
);
5286 #ifdef RCVALL_IPLEVEL
5287 PyModule_AddIntConstant(m
, "RCVALL_IPLEVEL", RCVALL_IPLEVEL
);
5290 PyModule_AddIntConstant(m
, "RCVALL_MAX", RCVALL_MAX
);
5292 #endif /* _MSTCPIP_ */
5294 /* Initialize gethostbyname lock */
5295 #if defined(USE_GETHOSTBYNAME_LOCK) || defined(USE_GETADDRINFO_LOCK)
5296 netdb_lock
= PyThread_allocate_lock();
5301 #ifndef HAVE_INET_PTON
5302 #if !defined(NTDDI_VERSION) || (NTDDI_VERSION < NTDDI_LONGHORN)
5304 /* Simplistic emulation code for inet_pton that only works for IPv4 */
5305 /* These are not exposed because they do not set errno properly */
5308 inet_pton(int af
, const char *src
, void *dst
)
5310 if (af
== AF_INET
) {
5311 #if (SIZEOF_INT != 4)
5312 #error "Not sure if in_addr_t exists and int is not 32-bits."
5314 unsigned int packed_addr
;
5315 packed_addr
= inet_addr(src
);
5316 if (packed_addr
== INADDR_NONE
)
5318 memcpy(dst
, &packed_addr
, 4);
5321 /* Should set errno to EAFNOSUPPORT */
5326 inet_ntop(int af
, const void *src
, char *dst
, socklen_t size
)
5328 if (af
== AF_INET
) {
5329 struct in_addr packed_addr
;
5331 /* Should set errno to ENOSPC. */
5333 memcpy(&packed_addr
, src
, sizeof(packed_addr
));
5334 return strncpy(dst
, inet_ntoa(packed_addr
), size
);
5336 /* Should set errno to EAFNOSUPPORT */