1 /* Socket module */ 2 3 /* 4 5 This module provides an interface to Berkeley socket IPC. 6 7 Limitations: 8 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 11 under Linux. 12 - No read/write operations (use sendall/recv or makefile instead). 13 - Additional restrictions apply on some non-Unix platforms (compensated 14 for by socket.py). 15 16 Module interface: 17 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: 63 v1 is the server type 64 v2 is the port identifier 65 v3 is ignored 66 if addr_type is TIPC_ADDR_NAMESEQ: 67 v1 is the server type 68 v2 is the lower port number 69 v3 is the upper port number 70 if addr_type is TIPC_ADDR_ID: 71 v1 is the node 72 v2 is the ref 73 v3 is ignored 74 75 76 Local naming conventions: 77 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 81 82 */ 83 84 #ifdef __APPLE__ 85 #include <AvailabilityMacros.h> 86 /* for getaddrinfo thread safety test on old versions of OS X */ 87 #ifndef MAC_OS_X_VERSION_10_5 88 #define MAC_OS_X_VERSION_10_5 1050 89 #endif 90 /* 91 * inet_aton is not available on OSX 10.3, yet we want to use a binary 92 * that was build on 10.4 or later to work on that release, weak linking 93 * comes to the rescue. 94 */ 95 # pragma weak inet_aton 96 #endif 97 98 #include "Python.h" 99 #include "structmember.h" 100 #include "timefuncs.h" 101 102 #ifndef INVALID_SOCKET /* MS defines this */ 103 #define INVALID_SOCKET (-1) 104 #endif 105 106 #undef MAX 107 #define MAX(x, y) ((x) < (y) ? (y) : (x)) 108 109 /* Socket object documentation */ 110 PyDoc_STRVAR(sock_doc, 111 "socket([family[, type[, proto]]]) -> socket object\n\ 112 \n\ 113 Open a socket of the given type. The family argument specifies the\n\ 114 address family; it defaults to AF_INET. The type argument specifies\n\ 115 whether this is a stream (SOCK_STREAM, this is the default)\n\ 116 or datagram (SOCK_DGRAM) socket. The protocol argument defaults to 0,\n\ 117 specifying the default protocol. Keyword arguments are accepted.\n\ 118 \n\ 119 A socket object represents one endpoint of a network connection.\n\ 120 \n\ 121 Methods of socket objects (keyword arguments not allowed):\n\ 122 \n\ 123 accept() -- accept a connection, returning new socket and client address\n\ 124 bind(addr) -- bind the socket to a local address\n\ 125 close() -- close the socket\n\ 126 connect(addr) -- connect the socket to a remote address\n\ 127 connect_ex(addr) -- connect, return an error code instead of an exception\n\ 128 dup() -- return a new socket object identical to the current one [*]\n\ 129 fileno() -- return underlying file descriptor\n\ 130 getpeername() -- return remote address [*]\n\ 131 getsockname() -- return local address\n\ 132 getsockopt(level, optname[, buflen]) -- get socket options\n\ 133 gettimeout() -- return timeout or None\n\ 134 listen(n) -- start listening for incoming connections\n\ 135 makefile([mode, [bufsize]]) -- return a file object for the socket [*]\n\ 136 recv(buflen[, flags]) -- receive data\n\ 137 recv_into(buffer[, nbytes[, flags]]) -- receive data (into a buffer)\n\ 138 recvfrom(buflen[, flags]) -- receive data and sender\'s address\n\ 139 recvfrom_into(buffer[, nbytes, [, flags])\n\ 140 -- receive data and sender\'s address (into a buffer)\n\ 141 sendall(data[, flags]) -- send all data\n\ 142 send(data[, flags]) -- send data, may not send all of it\n\ 143 sendto(data[, flags], addr) -- send data to a given address\n\ 144 setblocking(0 | 1) -- set or clear the blocking I/O flag\n\ 145 setsockopt(level, optname, value) -- set socket options\n\ 146 settimeout(None | float) -- set or clear the timeout\n\ 147 shutdown(how) -- shut down traffic in one or both directions\n\ 148 \n\ 149 [*] not available on all platforms!"); 150 151 /* XXX This is a terrible mess of platform-dependent preprocessor hacks. 152 I hope some day someone can clean this up please... */ 153 154 /* Hacks for gethostbyname_r(). On some non-Linux platforms, the configure 155 script doesn't get this right, so we hardcode some platform checks below. 156 On the other hand, not all Linux versions agree, so there the settings 157 computed by the configure script are needed! */ 158 159 #ifndef linux 160 # undef HAVE_GETHOSTBYNAME_R_3_ARG 161 # undef HAVE_GETHOSTBYNAME_R_5_ARG 162 # undef HAVE_GETHOSTBYNAME_R_6_ARG 163 #endif 164 165 #ifndef WITH_THREAD 166 # undef HAVE_GETHOSTBYNAME_R 167 #endif 168 169 #ifdef HAVE_GETHOSTBYNAME_R 170 # if defined(_AIX) && !defined(_LINUX_SOURCE_COMPAT) || defined(__osf__) 171 # define HAVE_GETHOSTBYNAME_R_3_ARG 172 # elif defined(__sun) || defined(__sgi) 173 # define HAVE_GETHOSTBYNAME_R_5_ARG 174 # elif defined(linux) 175 /* Rely on the configure script */ 176 # elif defined(_LINUX_SOURCE_COMPAT) /* Linux compatibility on AIX */ 177 # define HAVE_GETHOSTBYNAME_R_6_ARG 178 # else 179 # undef HAVE_GETHOSTBYNAME_R 180 # endif 181 #endif 182 183 #if !defined(HAVE_GETHOSTBYNAME_R) && defined(WITH_THREAD) && \ 184 !defined(MS_WINDOWS) 185 # define USE_GETHOSTBYNAME_LOCK 186 #endif 187 188 /* To use __FreeBSD_version, __OpenBSD__, and __NetBSD_Version__ */ 189 #ifdef HAVE_SYS_PARAM_H 190 #include <sys/param.h> 191 #endif 192 /* On systems on which getaddrinfo() is believed to not be thread-safe, 193 (this includes the getaddrinfo emulation) protect access with a lock. 194 195 getaddrinfo is thread-safe on Mac OS X 10.5 and later. Originally it was 196 a mix of code including an unsafe implementation from an old BSD's 197 libresolv. In 10.5 Apple reimplemented it as a safe IPC call to the 198 mDNSResponder process. 10.5 is the first be UNIX '03 certified, which 199 includes the requirement that getaddrinfo be thread-safe. See issue #25924. 200 201 It's thread-safe in OpenBSD starting with 5.4, released Nov 2013: 202 http://www.openbsd.org/plus54.html 203 204 It's thread-safe in NetBSD starting with 4.0, released Dec 2007: 205 206 http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/net/getaddrinfo.c.diff?r1=1.82&r2=1.83 207 */ 208 #if defined(WITH_THREAD) && ( \ 209 (defined(__APPLE__) && \ 210 MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) || \ 211 (defined(__FreeBSD__) && __FreeBSD_version+0 < 503000) || \ 212 (defined(__OpenBSD__) && OpenBSD+0 < 201311) || \ 213 (defined(__NetBSD__) && __NetBSD_Version__+0 < 400000000) || \ 214 defined(__VMS) || !defined(HAVE_GETADDRINFO)) 215 #define USE_GETADDRINFO_LOCK 216 #endif 217 218 #ifdef USE_GETADDRINFO_LOCK 219 #define ACQUIRE_GETADDRINFO_LOCK PyThread_acquire_lock(netdb_lock, 1); 220 #define RELEASE_GETADDRINFO_LOCK PyThread_release_lock(netdb_lock); 221 #else 222 #define ACQUIRE_GETADDRINFO_LOCK 223 #define RELEASE_GETADDRINFO_LOCK 224 #endif 225 226 #if defined(USE_GETHOSTBYNAME_LOCK) || defined(USE_GETADDRINFO_LOCK) 227 # include "pythread.h" 228 #endif 229 230 #if defined(PYCC_VACPP) 231 # include <types.h> 232 # include <io.h> 233 # include <sys/ioctl.h> 234 # include <utils.h> 235 # include <ctype.h> 236 #endif 237 238 #if defined(__VMS) 239 # include <ioctl.h> 240 #endif 241 242 #if defined(PYOS_OS2) 243 # define INCL_DOS 244 # define INCL_DOSERRORS 245 # define INCL_NOPMAPI 246 # include <os2.h> 247 #endif 248 249 #if defined(__sgi) && _COMPILER_VERSION>700 && !_SGIAPI 250 /* make sure that the reentrant (gethostbyaddr_r etc) 251 functions are declared correctly if compiling with 252 MIPSPro 7.x in ANSI C mode (default) */ 253 254 /* XXX Using _SGIAPI is the wrong thing, 255 but I don't know what the right thing is. */ 256 #undef _SGIAPI /* to avoid warning */ 257 #define _SGIAPI 1 258 259 #undef _XOPEN_SOURCE 260 #include <sys/socket.h> 261 #include <sys/types.h> 262 #include <netinet/in.h> 263 #ifdef _SS_ALIGNSIZE 264 #define HAVE_GETADDRINFO 1 265 #define HAVE_GETNAMEINFO 1 266 #endif 267 268 #define HAVE_INET_PTON 269 #include <netdb.h> 270 #endif 271 272 /* Irix 6.5 fails to define this variable at all. This is needed 273 for both GCC and SGI's compiler. I'd say that the SGI headers 274 are just busted. Same thing for Solaris. */ 275 #if (defined(__sgi) || defined(sun)) && !defined(INET_ADDRSTRLEN) 276 #define INET_ADDRSTRLEN 16 277 #endif 278 279 /* Generic includes */ 280 #ifdef HAVE_SYS_TYPES_H 281 #include <sys/types.h> 282 #endif 283 284 /* Generic socket object definitions and includes */ 285 #define PySocket_BUILDING_SOCKET 286 #include "socketmodule.h" 287 288 /* Addressing includes */ 289 290 #ifndef MS_WINDOWS 291 292 /* Non-MS WINDOWS includes */ 293 # include <netdb.h> 294 295 /* Headers needed for inet_ntoa() and inet_addr() */ 296 # ifdef __BEOS__ 297 # include <net/netdb.h> 298 # elif defined(PYOS_OS2) && defined(PYCC_VACPP) 299 # include <netdb.h> 300 typedef size_t socklen_t; 301 # else 302 # include <arpa/inet.h> 303 # endif 304 305 # ifndef RISCOS 306 # include <fcntl.h> 307 # else 308 # include <sys/ioctl.h> 309 # include <socklib.h> 310 # define NO_DUP 311 int h_errno; /* not used */ 312 # define INET_ADDRSTRLEN 16 313 # endif 314 315 #else 316 317 /* MS_WINDOWS includes */ 318 # ifdef HAVE_FCNTL_H 319 # include <fcntl.h> 320 # endif 321 322 #endif 323 324 #include <stddef.h> 325 326 #ifndef offsetof 327 # define offsetof(type, member) ((size_t)(&((type *)0)->member)) 328 #endif 329 330 #ifndef O_NONBLOCK 331 # define O_NONBLOCK O_NDELAY 332 #endif 333 334 /* include Python's addrinfo.h unless it causes trouble */ 335 #if defined(__sgi) && _COMPILER_VERSION>700 && defined(_SS_ALIGNSIZE) 336 /* Do not include addinfo.h on some newer IRIX versions. 337 * _SS_ALIGNSIZE is defined in sys/socket.h by 6.5.21, 338 * for example, but not by 6.5.10. 339 */ 340 #elif defined(_MSC_VER) && _MSC_VER>1201 341 /* Do not include addrinfo.h for MSVC7 or greater. 'addrinfo' and 342 * EAI_* constants are defined in (the already included) ws2tcpip.h. 343 */ 344 #else 345 # include "addrinfo.h" 346 #endif 347 348 #ifndef HAVE_INET_PTON 349 #if !defined(NTDDI_VERSION) || (NTDDI_VERSION < NTDDI_LONGHORN) 350 int inet_pton(int af, const char *src, void *dst); 351 const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); 352 #endif 353 #endif 354 355 #ifdef __APPLE__ 356 /* On OS X, getaddrinfo returns no error indication of lookup 357 failure, so we must use the emulation instead of the libinfo 358 implementation. Unfortunately, performing an autoconf test 359 for this bug would require DNS access for the machine performing 360 the configuration, which is not acceptable. Therefore, we 361 determine the bug just by checking for __APPLE__. If this bug 362 gets ever fixed, perhaps checking for sys/version.h would be 363 appropriate, which is 10/0 on the system with the bug. */ 364 #ifndef HAVE_GETNAMEINFO 365 /* This bug seems to be fixed in Jaguar. Ths easiest way I could 366 Find to check for Jaguar is that it has getnameinfo(), which 367 older releases don't have */ 368 #undef HAVE_GETADDRINFO 369 #endif 370 371 #ifdef HAVE_INET_ATON 372 #define USE_INET_ATON_WEAKLINK 373 #endif 374 375 #endif 376 377 /* I know this is a bad practice, but it is the easiest... */ 378 #if !defined(HAVE_GETADDRINFO) 379 /* avoid clashes with the C library definition of the symbol. */ 380 #define getaddrinfo fake_getaddrinfo 381 #define gai_strerror fake_gai_strerror 382 #define freeaddrinfo fake_freeaddrinfo 383 #include "getaddrinfo.c" 384 #endif 385 #if !defined(HAVE_GETNAMEINFO) 386 #define getnameinfo fake_getnameinfo 387 #include "getnameinfo.c" 388 #endif 389 390 #if defined(MS_WINDOWS) || defined(__BEOS__) 391 /* BeOS suffers from the same socket dichotomy as Win32... - [cjh] */ 392 /* seem to be a few differences in the API */ 393 #define SOCKETCLOSE closesocket 394 #define NO_DUP /* Actually it exists on NT 3.5, but what the heck... */ 395 #endif 396 397 #ifdef MS_WIN32 398 #define EAFNOSUPPORT WSAEAFNOSUPPORT 399 #define snprintf _snprintf 400 #endif 401 402 #if defined(PYOS_OS2) && !defined(PYCC_GCC) 403 #define SOCKETCLOSE soclose 404 #define NO_DUP /* Sockets are Not Actual File Handles under OS/2 */ 405 #endif 406 407 #ifndef SOCKETCLOSE 408 #define SOCKETCLOSE close 409 #endif 410 411 #if (defined(HAVE_BLUETOOTH_H) || defined(HAVE_BLUETOOTH_BLUETOOTH_H)) && !defined(__NetBSD__) && !defined(__DragonFly__) 412 #define USE_BLUETOOTH 1 413 #if defined(__FreeBSD__) 414 #define BTPROTO_L2CAP BLUETOOTH_PROTO_L2CAP 415 #define BTPROTO_RFCOMM BLUETOOTH_PROTO_RFCOMM 416 #define BTPROTO_HCI BLUETOOTH_PROTO_HCI 417 #define SOL_HCI SOL_HCI_RAW 418 #define HCI_FILTER SO_HCI_RAW_FILTER 419 #define sockaddr_l2 sockaddr_l2cap 420 #define sockaddr_rc sockaddr_rfcomm 421 #define hci_dev hci_node 422 #define _BT_L2_MEMB(sa, memb) ((sa)->l2cap_##memb) 423 #define _BT_RC_MEMB(sa, memb) ((sa)->rfcomm_##memb) 424 #define _BT_HCI_MEMB(sa, memb) ((sa)->hci_##memb) 425 #elif defined(__NetBSD__) || defined(__DragonFly__) 426 #define sockaddr_l2 sockaddr_bt 427 #define sockaddr_rc sockaddr_bt 428 #define sockaddr_hci sockaddr_bt 429 #define sockaddr_sco sockaddr_bt 430 #define SOL_HCI BTPROTO_HCI 431 #define HCI_DATA_DIR SO_HCI_DIRECTION 432 #define _BT_L2_MEMB(sa, memb) ((sa)->bt_##memb) 433 #define _BT_RC_MEMB(sa, memb) ((sa)->bt_##memb) 434 #define _BT_HCI_MEMB(sa, memb) ((sa)->bt_##memb) 435 #define _BT_SCO_MEMB(sa, memb) ((sa)->bt_##memb) 436 #else 437 #define _BT_L2_MEMB(sa, memb) ((sa)->l2_##memb) 438 #define _BT_RC_MEMB(sa, memb) ((sa)->rc_##memb) 439 #define _BT_HCI_MEMB(sa, memb) ((sa)->hci_##memb) 440 #define _BT_SCO_MEMB(sa, memb) ((sa)->sco_##memb) 441 #endif 442 #endif 443 444 #ifdef __VMS 445 /* TCP/IP Services for VMS uses a maximum send/recv buffer length */ 446 #define SEGMENT_SIZE (32 * 1024 -1) 447 #endif 448 449 #define SAS2SA(x) ((struct sockaddr *)(x)) 450 451 /* 452 * Constants for getnameinfo() 453 */ 454 #if !defined(NI_MAXHOST) 455 #define NI_MAXHOST 1025 456 #endif 457 #if !defined(NI_MAXSERV) 458 #define NI_MAXSERV 32 459 #endif 460 461 /* XXX There's a problem here: *static* functions are not supposed to have 462 a Py prefix (or use CapitalizedWords). Later... */ 463 464 /* Global variable holding the exception type for errors detected 465 by this module (but not argument type or memory errors, etc.). */ 466 static PyObject *socket_error; 467 static PyObject *socket_herror; 468 static PyObject *socket_gaierror; 469 static PyObject *socket_timeout; 470 471 #ifdef RISCOS 472 /* Global variable which is !=0 if Python is running in a RISC OS taskwindow */ 473 static int taskwindow; 474 #endif 475 476 /* A forward reference to the socket type object. 477 The sock_type variable contains pointers to various functions, 478 some of which call new_sockobject(), which uses sock_type, so 479 there has to be a circular reference. */ 480 static PyTypeObject sock_type; 481 482 #if defined(HAVE_POLL_H) 483 #include <poll.h> 484 #elif defined(HAVE_SYS_POLL_H) 485 #include <sys/poll.h> 486 #endif 487 488 #ifdef HAVE_POLL 489 /* Instead of select(), we'll use poll() since poll() works on any fd. */ 490 #define IS_SELECTABLE(s) 1 491 /* Can we call select() with this socket without a buffer overrun? */ 492 #else 493 /* If there's no timeout left, we don't have to call select, so it's a safe, 494 * little white lie. */ 495 #define IS_SELECTABLE(s) (_PyIsSelectable_fd((s)->sock_fd) || (s)->sock_timeout <= 0.0) 496 #endif 497 498 static PyObject* 499 select_error(void) 500 { 501 PyErr_SetString(socket_error, "unable to select on socket"); 502 return NULL; 503 } 504 505 #ifdef MS_WINDOWS 506 #ifndef WSAEAGAIN 507 #define WSAEAGAIN WSAEWOULDBLOCK 508 #endif 509 #define CHECK_ERRNO(expected) \ 510 (WSAGetLastError() == WSA ## expected) 511 #else 512 #define CHECK_ERRNO(expected) \ 513 (errno == expected) 514 #endif 515 516 /* Convenience function to raise an error according to errno 517 and return a NULL pointer from a function. */ 518 519 static PyObject * 520 set_error(void) 521 { 522 #ifdef MS_WINDOWS 523 int err_no = WSAGetLastError(); 524 /* PyErr_SetExcFromWindowsErr() invokes FormatMessage() which 525 recognizes the error codes used by both GetLastError() and 526 WSAGetLastError */ 527 if (err_no) 528 return PyErr_SetExcFromWindowsErr(socket_error, err_no); 529 #endif 530 531 #if defined(PYOS_OS2) && !defined(PYCC_GCC) 532 if (sock_errno() != NO_ERROR) { 533 APIRET rc; 534 ULONG msglen; 535 char outbuf[100]; 536 int myerrorcode = sock_errno(); 537 538 /* Retrieve socket-related error message from MPTN.MSG file */ 539 rc = DosGetMessage(NULL, 0, outbuf, sizeof(outbuf), 540 myerrorcode - SOCBASEERR + 26, 541 "mptn.msg", 542 &msglen); 543 if (rc == NO_ERROR) { 544 PyObject *v; 545 546 /* OS/2 doesn't guarantee a terminator */ 547 outbuf[msglen] = '\0'; 548 if (strlen(outbuf) > 0) { 549 /* If non-empty msg, trim CRLF */ 550 char *lastc = &outbuf[ strlen(outbuf)-1 ]; 551 while (lastc > outbuf && 552 isspace(Py_CHARMASK(*lastc))) { 553 /* Trim trailing whitespace (CRLF) */ 554 *lastc-- = '\0'; 555 } 556 } 557 v = Py_BuildValue("(is)", myerrorcode, outbuf); 558 if (v != NULL) { 559 PyErr_SetObject(socket_error, v); 560 Py_DECREF(v); 561 } 562 return NULL; 563 } 564 } 565 #endif 566 567 #if defined(RISCOS) 568 if (_inet_error.errnum != NULL) { 569 PyObject *v; 570 v = Py_BuildValue("(is)", errno, _inet_err()); 571 if (v != NULL) { 572 PyErr_SetObject(socket_error, v); 573 Py_DECREF(v); 574 } 575 return NULL; 576 } 577 #endif 578 579 return PyErr_SetFromErrno(socket_error); 580 } 581 582 583 static PyObject * 584 set_herror(int h_error) 585 { 586 PyObject *v; 587 588 #ifdef HAVE_HSTRERROR 589 v = Py_BuildValue("(is)", h_error, (char *)hstrerror(h_error)); 590 #else 591 v = Py_BuildValue("(is)", h_error, "host not found"); 592 #endif 593 if (v != NULL) { 594 PyErr_SetObject(socket_herror, v); 595 Py_DECREF(v); 596 } 597 598 return NULL; 599 } 600 601 602 static PyObject * 603 set_gaierror(int error) 604 { 605 PyObject *v; 606 607 #ifdef EAI_SYSTEM 608 /* EAI_SYSTEM is not available on Windows XP. */ 609 if (error == EAI_SYSTEM) 610 return set_error(); 611 #endif 612 613 #ifdef HAVE_GAI_STRERROR 614 v = Py_BuildValue("(is)", error, gai_strerror(error)); 615 #else 616 v = Py_BuildValue("(is)", error, "getaddrinfo failed"); 617 #endif 618 if (v != NULL) { 619 PyErr_SetObject(socket_gaierror, v); 620 Py_DECREF(v); 621 } 622 623 return NULL; 624 } 625 626 #ifdef __VMS 627 /* Function to send in segments */ 628 static int 629 sendsegmented(int sock_fd, char *buf, int len, int flags) 630 { 631 int n = 0; 632 int remaining = len; 633 634 while (remaining > 0) { 635 unsigned int segment; 636 637 segment = (remaining >= SEGMENT_SIZE ? SEGMENT_SIZE : remaining); 638 n = send(sock_fd, buf, segment, flags); 639 if (n < 0) { 640 return n; 641 } 642 remaining -= segment; 643 buf += segment; 644 } /* end while */ 645 646 return len; 647 } 648 #endif 649 650 /* Function to perform the setting of socket blocking mode 651 internally. block = (1 | 0). */ 652 static int 653 internal_setblocking(PySocketSockObject *s, int block) 654 { 655 #ifndef RISCOS 656 #ifndef MS_WINDOWS 657 int delay_flag; 658 #endif 659 #endif 660 661 Py_BEGIN_ALLOW_THREADS 662 #ifdef __BEOS__ 663 block = !block; 664 setsockopt(s->sock_fd, SOL_SOCKET, SO_NONBLOCK, 665 (void *)(&block), sizeof(int)); 666 #else 667 #ifndef RISCOS 668 #ifndef MS_WINDOWS 669 #if defined(PYOS_OS2) && !defined(PYCC_GCC) 670 block = !block; 671 ioctl(s->sock_fd, FIONBIO, (caddr_t)&block, sizeof(block)); 672 #elif defined(__VMS) 673 block = !block; 674 ioctl(s->sock_fd, FIONBIO, (unsigned int *)&block); 675 #else /* !PYOS_OS2 && !__VMS */ 676 delay_flag = fcntl(s->sock_fd, F_GETFL, 0); 677 if (block) 678 delay_flag &= (~O_NONBLOCK); 679 else 680 delay_flag |= O_NONBLOCK; 681 fcntl(s->sock_fd, F_SETFL, delay_flag); 682 #endif /* !PYOS_OS2 */ 683 #else /* MS_WINDOWS */ 684 block = !block; 685 ioctlsocket(s->sock_fd, FIONBIO, (u_long*)&block); 686 #endif /* MS_WINDOWS */ 687 #else /* RISCOS */ 688 block = !block; 689 socketioctl(s->sock_fd, FIONBIO, (u_long*)&block); 690 #endif /* RISCOS */ 691 #endif /* __BEOS__ */ 692 Py_END_ALLOW_THREADS 693 694 /* Since these don't return anything */ 695 return 1; 696 } 697 698 /* Do a select()/poll() on the socket, if necessary (sock_timeout > 0). 699 The argument writing indicates the direction. 700 This does not raise an exception; we'll let our caller do that 701 after they've reacquired the interpreter lock. 702 Returns 1 on timeout, -1 on error, 0 otherwise. */ 703 static int 704 internal_select_ex(PySocketSockObject *s, int writing, double interval) 705 { 706 int n; 707 708 /* Nothing to do unless we're in timeout mode (not non-blocking) */ 709 if (s->sock_timeout <= 0.0) 710 return 0; 711 712 /* Guard against closed socket */ 713 if (s->sock_fd < 0) 714 return 0; 715 716 /* Handling this condition here simplifies the select loops */ 717 if (interval < 0.0) 718 return 1; 719 720 /* Prefer poll, if available, since you can poll() any fd 721 * which can't be done with select(). */ 722 #ifdef HAVE_POLL 723 { 724 struct pollfd pollfd; 725 int timeout; 726 727 pollfd.fd = s->sock_fd; 728 pollfd.events = writing ? POLLOUT : POLLIN; 729 730 /* s->sock_timeout is in seconds, timeout in ms */ 731 timeout = (int)(interval * 1000 + 0.5); 732 n = poll(&pollfd, 1, timeout); 733 } 734 #else 735 { 736 /* Construct the arguments to select */ 737 fd_set fds; 738 struct timeval tv; 739 tv.tv_sec = (int)interval; 740 tv.tv_usec = (int)((interval - tv.tv_sec) * 1e6); 741 FD_ZERO(&fds); 742 FD_SET(s->sock_fd, &fds); 743 744 /* See if the socket is ready */ 745 if (writing) 746 n = select(s->sock_fd+1, NULL, &fds, NULL, &tv); 747 else 748 n = select(s->sock_fd+1, &fds, NULL, NULL, &tv); 749 } 750 #endif 751 752 if (n < 0) 753 return -1; 754 if (n == 0) 755 return 1; 756 return 0; 757 } 758 759 static int 760 internal_select(PySocketSockObject *s, int writing) 761 { 762 return internal_select_ex(s, writing, s->sock_timeout); 763 } 764 765 /* 766 Two macros for automatic retry of select() in case of false positives 767 (for example, select() could indicate a socket is ready for reading 768 but the data then discarded by the OS because of a wrong checksum). 769 Here is an example of use: 770 771 BEGIN_SELECT_LOOP(s) 772 Py_BEGIN_ALLOW_THREADS 773 timeout = internal_select_ex(s, 0, interval); 774 if (!timeout) 775 outlen = recv(s->sock_fd, cbuf, len, flags); 776 Py_END_ALLOW_THREADS 777 if (timeout == 1) { 778 PyErr_SetString(socket_timeout, "timed out"); 779 return -1; 780 } 781 END_SELECT_LOOP(s) 782 */ 783 #define BEGIN_SELECT_LOOP(s) \ 784 { \ 785 double deadline = 0, interval = s->sock_timeout; \ 786 int has_timeout = s->sock_timeout > 0.0; \ 787 if (has_timeout) { \ 788 deadline = _PyTime_FloatTime() + s->sock_timeout; \ 789 } \ 790 while (1) { \ 791 errno = 0; 792 793 #define END_SELECT_LOOP(s) \ 794 if (!has_timeout || \ 795 (!CHECK_ERRNO(EWOULDBLOCK) && !CHECK_ERRNO(EAGAIN))) \ 796 break; \ 797 interval = deadline - _PyTime_FloatTime(); \ 798 } \ 799 } 800 801 /* Initialize a new socket object. */ 802 803 static double defaulttimeout = -1.0; /* Default timeout for new sockets */ 804 805 PyMODINIT_FUNC 806 init_sockobject(PySocketSockObject *s, 807 SOCKET_T fd, int family, int type, int proto) 808 { 809 #ifdef RISCOS 810 int block = 1; 811 #endif 812 s->sock_fd = fd; 813 s->sock_family = family; 814 s->sock_type = type; 815 s->sock_proto = proto; 816 s->sock_timeout = defaulttimeout; 817 818 s->errorhandler = &set_error; 819 820 if (defaulttimeout >= 0.0) 821 internal_setblocking(s, 0); 822 823 #ifdef RISCOS 824 if (taskwindow) 825 socketioctl(s->sock_fd, 0x80046679, (u_long*)&block); 826 #endif 827 } 828 829 830 /* Create a new socket object. 831 This just creates the object and initializes it. 832 If the creation fails, return NULL and set an exception (implicit 833 in NEWOBJ()). */ 834 835 static PySocketSockObject * 836 new_sockobject(SOCKET_T fd, int family, int type, int proto) 837 { 838 PySocketSockObject *s; 839 s = (PySocketSockObject *) 840 PyType_GenericNew(&sock_type, NULL, NULL); 841 if (s != NULL) 842 init_sockobject(s, fd, family, type, proto); 843 return s; 844 } 845 846 847 /* Lock to allow python interpreter to continue, but only allow one 848 thread to be in gethostbyname or getaddrinfo */ 849 #if defined(USE_GETHOSTBYNAME_LOCK) || defined(USE_GETADDRINFO_LOCK) 850 static PyThread_type_lock netdb_lock; 851 #endif 852 853 854 /* Convert a string specifying a host name or one of a few symbolic 855 names to a numeric IP address. This usually calls gethostbyname() 856 to do the work; the names "" and "<broadcast>" are special. 857 Return the length (IPv4 should be 4 bytes), or negative if 858 an error occurred; then an exception is raised. */ 859 860 static int 861 setipaddr(char *name, struct sockaddr *addr_ret, size_t addr_ret_size, int af) 862 { 863 struct addrinfo hints, *res; 864 int error; 865 int d1, d2, d3, d4; 866 char ch; 867 868 memset((void *) addr_ret, '\0', sizeof(*addr_ret)); 869 if (name[0] == '\0') { 870 int siz; 871 memset(&hints, 0, sizeof(hints)); 872 hints.ai_family = af; 873 hints.ai_socktype = SOCK_DGRAM; /*dummy*/ 874 hints.ai_flags = AI_PASSIVE; 875 Py_BEGIN_ALLOW_THREADS 876 ACQUIRE_GETADDRINFO_LOCK 877 error = getaddrinfo(NULL, "0", &hints, &res); 878 Py_END_ALLOW_THREADS 879 /* We assume that those thread-unsafe getaddrinfo() versions 880 *are* safe regarding their return value, ie. that a 881 subsequent call to getaddrinfo() does not destroy the 882 outcome of the first call. */ 883 RELEASE_GETADDRINFO_LOCK 884 if (error) { 885 set_gaierror(error); 886 return -1; 887 } 888 switch (res->ai_family) { 889 case AF_INET: 890 siz = 4; 891 break; 892 #ifdef ENABLE_IPV6 893 case AF_INET6: 894 siz = 16; 895 break; 896 #endif 897 default: 898 freeaddrinfo(res); 899 PyErr_SetString(socket_error, 900 "unsupported address family"); 901 return -1; 902 } 903 if (res->ai_next) { 904 freeaddrinfo(res); 905 PyErr_SetString(socket_error, 906 "wildcard resolved to multiple address"); 907 return -1; 908 } 909 if (res->ai_addrlen < addr_ret_size) 910 addr_ret_size = res->ai_addrlen; 911 memcpy(addr_ret, res->ai_addr, addr_ret_size); 912 freeaddrinfo(res); 913 return siz; 914 } 915 if (name[0] == '<' && strcmp(name, "<broadcast>") == 0) { 916 struct sockaddr_in *sin; 917 if (af != AF_INET && af != AF_UNSPEC) { 918 PyErr_SetString(socket_error, 919 "address family mismatched"); 920 return -1; 921 } 922 sin = (struct sockaddr_in *)addr_ret; 923 memset((void *) sin, '\0', sizeof(*sin)); 924 sin->sin_family = AF_INET; 925 #ifdef HAVE_SOCKADDR_SA_LEN 926 sin->sin_len = sizeof(*sin); 927 #endif 928 sin->sin_addr.s_addr = INADDR_BROADCAST; 929 return sizeof(sin->sin_addr); 930 } 931 if (sscanf(name, "%d.%d.%d.%d%c", &d1, &d2, &d3, &d4, &ch) == 4 && 932 0 <= d1 && d1 <= 255 && 0 <= d2 && d2 <= 255 && 933 0 <= d3 && d3 <= 255 && 0 <= d4 && d4 <= 255) { 934 struct sockaddr_in *sin; 935 sin = (struct sockaddr_in *)addr_ret; 936 sin->sin_addr.s_addr = htonl( 937 ((long) d1 << 24) | ((long) d2 << 16) | 938 ((long) d3 << 8) | ((long) d4 << 0)); 939 sin->sin_family = AF_INET; 940 #ifdef HAVE_SOCKADDR_SA_LEN 941 sin->sin_len = sizeof(*sin); 942 #endif 943 return 4; 944 } 945 memset(&hints, 0, sizeof(hints)); 946 hints.ai_family = af; 947 Py_BEGIN_ALLOW_THREADS 948 ACQUIRE_GETADDRINFO_LOCK 949 error = getaddrinfo(name, NULL, &hints, &res); 950 #if defined(__digital__) && defined(__unix__) 951 if (error == EAI_NONAME && af == AF_UNSPEC) { 952 /* On Tru64 V5.1, numeric-to-addr conversion fails 953 if no address family is given. Assume IPv4 for now.*/ 954 hints.ai_family = AF_INET; 955 error = getaddrinfo(name, NULL, &hints, &res); 956 } 957 #endif 958 Py_END_ALLOW_THREADS 959 RELEASE_GETADDRINFO_LOCK /* see comment in setipaddr() */ 960 if (error) { 961 set_gaierror(error); 962 return -1; 963 } 964 if (res->ai_addrlen < addr_ret_size) 965 addr_ret_size = res->ai_addrlen; 966 memcpy((char *) addr_ret, res->ai_addr, addr_ret_size); 967 freeaddrinfo(res); 968 switch (addr_ret->sa_family) { 969 case AF_INET: 970 return 4; 971 #ifdef ENABLE_IPV6 972 case AF_INET6: 973 return 16; 974 #endif 975 default: 976 PyErr_SetString(socket_error, "unknown address family"); 977 return -1; 978 } 979 } 980 981 982 /* Create a string object representing an IP address. 983 This is always a string of the form 'dd.dd.dd.dd' (with variable 984 size numbers). */ 985 986 static PyObject * 987 makeipaddr(struct sockaddr *addr, int addrlen) 988 { 989 char buf[NI_MAXHOST]; 990 int error; 991 992 error = getnameinfo(addr, addrlen, buf, sizeof(buf), NULL, 0, 993 NI_NUMERICHOST); 994 if (error) { 995 set_gaierror(error); 996 return NULL; 997 } 998 return PyString_FromString(buf); 999 } 1000 1001 1002 #ifdef USE_BLUETOOTH 1003 /* Convert a string representation of a Bluetooth address into a numeric 1004 address. Returns the length (6), or raises an exception and returns -1 if 1005 an error occurred. */ 1006 1007 static int 1008 setbdaddr(char *name, bdaddr_t *bdaddr) 1009 { 1010 unsigned int b0, b1, b2, b3, b4, b5; 1011 char ch; 1012 int n; 1013 1014 n = sscanf(name, "%X:%X:%X:%X:%X:%X%c", 1015 &b5, &b4, &b3, &b2, &b1, &b0, &ch); 1016 if (n == 6 && (b0 | b1 | b2 | b3 | b4 | b5) < 256) { 1017 bdaddr->b[0] = b0; 1018 bdaddr->b[1] = b1; 1019 bdaddr->b[2] = b2; 1020 bdaddr->b[3] = b3; 1021 bdaddr->b[4] = b4; 1022 bdaddr->b[5] = b5; 1023 return 6; 1024 } else { 1025 PyErr_SetString(socket_error, "bad bluetooth address"); 1026 return -1; 1027 } 1028 } 1029 1030 /* Create a string representation of the Bluetooth address. This is always a 1031 string of the form 'XX:XX:XX:XX:XX:XX' where XX is a two digit hexadecimal 1032 value (zero padded if necessary). */ 1033 1034 static PyObject * 1035 makebdaddr(bdaddr_t *bdaddr) 1036 { 1037 char buf[(6 * 2) + 5 + 1]; 1038 1039 sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X", 1040 bdaddr->b[5], bdaddr->b[4], bdaddr->b[3], 1041 bdaddr->b[2], bdaddr->b[1], bdaddr->b[0]); 1042 return PyString_FromString(buf); 1043 } 1044 #endif 1045 1046 1047 /* Create an object representing the given socket address, 1048 suitable for passing it back to bind(), connect() etc. 1049 The family field of the sockaddr structure is inspected 1050 to determine what kind of address it really is. */ 1051 1052 /*ARGSUSED*/ 1053 static PyObject * 1054 makesockaddr(int sockfd, struct sockaddr *addr, int addrlen, int proto) 1055 { 1056 if (addrlen == 0) { 1057 /* No address -- may be recvfrom() from known socket */ 1058 Py_INCREF(Py_None); 1059 return Py_None; 1060 } 1061 1062 #ifdef __BEOS__ 1063 /* XXX: BeOS version of accept() doesn't set family correctly */ 1064 addr->sa_family = AF_INET; 1065 #endif 1066 1067 switch (addr->sa_family) { 1068 1069 case AF_INET: 1070 { 1071 struct sockaddr_in *a; 1072 PyObject *addrobj = makeipaddr(addr, sizeof(*a)); 1073 PyObject *ret = NULL; 1074 if (addrobj) { 1075 a = (struct sockaddr_in *)addr; 1076 ret = Py_BuildValue("Oi", addrobj, ntohs(a->sin_port)); 1077 Py_DECREF(addrobj); 1078 } 1079 return ret; 1080 } 1081 1082 #if defined(AF_UNIX) 1083 case AF_UNIX: 1084 { 1085 struct sockaddr_un *a = (struct sockaddr_un *) addr; 1086 #ifdef linux 1087 if (a->sun_path[0] == 0) { /* Linux abstract namespace */ 1088 addrlen -= offsetof(struct sockaddr_un, sun_path); 1089 return PyString_FromStringAndSize(a->sun_path, 1090 addrlen); 1091 } 1092 else 1093 #endif /* linux */ 1094 { 1095 /* regular NULL-terminated string */ 1096 return PyString_FromString(a->sun_path); 1097 } 1098 } 1099 #endif /* AF_UNIX */ 1100 1101 #if defined(AF_NETLINK) 1102 case AF_NETLINK: 1103 { 1104 struct sockaddr_nl *a = (struct sockaddr_nl *) addr; 1105 return Py_BuildValue("II", a->nl_pid, a->nl_groups); 1106 } 1107 #endif /* AF_NETLINK */ 1108 1109 #ifdef ENABLE_IPV6 1110 case AF_INET6: 1111 { 1112 struct sockaddr_in6 *a; 1113 PyObject *addrobj = makeipaddr(addr, sizeof(*a)); 1114 PyObject *ret = NULL; 1115 if (addrobj) { 1116 a = (struct sockaddr_in6 *)addr; 1117 ret = Py_BuildValue("OiII", 1118 addrobj, 1119 ntohs(a->sin6_port), 1120 ntohl(a->sin6_flowinfo), 1121 a->sin6_scope_id); 1122 Py_DECREF(addrobj); 1123 } 1124 return ret; 1125 } 1126 #endif 1127 1128 #ifdef USE_BLUETOOTH 1129 case AF_BLUETOOTH: 1130 switch (proto) { 1131 1132 case BTPROTO_L2CAP: 1133 { 1134 struct sockaddr_l2 *a = (struct sockaddr_l2 *) addr; 1135 PyObject *addrobj = makebdaddr(&_BT_L2_MEMB(a, bdaddr)); 1136 PyObject *ret = NULL; 1137 if (addrobj) { 1138 ret = Py_BuildValue("Oi", 1139 addrobj, 1140 _BT_L2_MEMB(a, psm)); 1141 Py_DECREF(addrobj); 1142 } 1143 return ret; 1144 } 1145 1146 case BTPROTO_RFCOMM: 1147 { 1148 struct sockaddr_rc *a = (struct sockaddr_rc *) addr; 1149 PyObject *addrobj = makebdaddr(&_BT_RC_MEMB(a, bdaddr)); 1150 PyObject *ret = NULL; 1151 if (addrobj) { 1152 ret = Py_BuildValue("Oi", 1153 addrobj, 1154 _BT_RC_MEMB(a, channel)); 1155 Py_DECREF(addrobj); 1156 } 1157 return ret; 1158 } 1159 1160 case BTPROTO_HCI: 1161 { 1162 struct sockaddr_hci *a = (struct sockaddr_hci *) addr; 1163 #if defined(__NetBSD__) || defined(__DragonFly__) 1164 return makebdaddr(&_BT_HCI_MEMB(a, bdaddr)); 1165 #else 1166 PyObject *ret = NULL; 1167 ret = Py_BuildValue("i", _BT_HCI_MEMB(a, dev)); 1168 return ret; 1169 #endif 1170 } 1171 1172 #if !defined(__FreeBSD__) 1173 case BTPROTO_SCO: 1174 { 1175 struct sockaddr_sco *a = (struct sockaddr_sco *) addr; 1176 return makebdaddr(&_BT_SCO_MEMB(a, bdaddr)); 1177 } 1178 #endif 1179 1180 default: 1181 PyErr_SetString(PyExc_ValueError, 1182 "Unknown Bluetooth protocol"); 1183 return NULL; 1184 } 1185 #endif 1186 1187 #if defined(HAVE_NETPACKET_PACKET_H) && defined(SIOCGIFNAME) 1188 case AF_PACKET: 1189 { 1190 struct sockaddr_ll *a = (struct sockaddr_ll *)addr; 1191 char *ifname = ""; 1192 struct ifreq ifr; 1193 /* need to look up interface name give index */ 1194 if (a->sll_ifindex) { 1195 ifr.ifr_ifindex = a->sll_ifindex; 1196 if (ioctl(sockfd, SIOCGIFNAME, &ifr) == 0) 1197 ifname = ifr.ifr_name; 1198 } 1199 return Py_BuildValue("shbhs#", 1200 ifname, 1201 ntohs(a->sll_protocol), 1202 a->sll_pkttype, 1203 a->sll_hatype, 1204 a->sll_addr, 1205 a->sll_halen); 1206 } 1207 #endif 1208 1209 #ifdef HAVE_LINUX_TIPC_H 1210 case AF_TIPC: 1211 { 1212 struct sockaddr_tipc *a = (struct sockaddr_tipc *) addr; 1213 if (a->addrtype == TIPC_ADDR_NAMESEQ) { 1214 return Py_BuildValue("IIIII", 1215 a->addrtype, 1216 a->addr.nameseq.type, 1217 a->addr.nameseq.lower, 1218 a->addr.nameseq.upper, 1219 a->scope); 1220 } else if (a->addrtype == TIPC_ADDR_NAME) { 1221 return Py_BuildValue("IIIII", 1222 a->addrtype, 1223 a->addr.name.name.type, 1224 a->addr.name.name.instance, 1225 a->addr.name.name.instance, 1226 a->scope); 1227 } else if (a->addrtype == TIPC_ADDR_ID) { 1228 return Py_BuildValue("IIIII", 1229 a->addrtype, 1230 a->addr.id.node, 1231 a->addr.id.ref, 1232 0, 1233 a->scope); 1234 } else { 1235 PyErr_SetString(PyExc_ValueError, 1236 "Invalid address type"); 1237 return NULL; 1238 } 1239 } 1240 #endif 1241 1242 /* More cases here... */ 1243 1244 default: 1245 /* If we don't know the address family, don't raise an 1246 exception -- return it as a tuple. */ 1247 return Py_BuildValue("is#", 1248 addr->sa_family, 1249 addr->sa_data, 1250 sizeof(addr->sa_data)); 1251 1252 } 1253 } 1254 1255 1256 /* Parse a socket address argument according to the socket object's 1257 address family. Return 1 if the address was in the proper format, 1258 0 of not. The address is returned through addr_ret, its length 1259 through len_ret. */ 1260 1261 static int 1262 getsockaddrarg(PySocketSockObject *s, PyObject *args, 1263 struct sockaddr *addr_ret, int *len_ret) 1264 { 1265 switch (s->sock_family) { 1266 1267 #if defined(AF_UNIX) 1268 case AF_UNIX: 1269 { 1270 struct sockaddr_un* addr; 1271 char *path; 1272 int len; 1273 if (!PyArg_Parse(args, "t#", &path, &len)) 1274 return 0; 1275 1276 addr = (struct sockaddr_un*)addr_ret; 1277 #ifdef linux 1278 if (len > 0 && path[0] == 0) { 1279 /* Linux abstract namespace extension */ 1280 if (len > sizeof addr->sun_path) { 1281 PyErr_SetString(socket_error, 1282 "AF_UNIX path too long"); 1283 return 0; 1284 } 1285 } 1286 else 1287 #endif /* linux */ 1288 { 1289 /* regular NULL-terminated string */ 1290 if (len >= sizeof addr->sun_path) { 1291 PyErr_SetString(socket_error, 1292 "AF_UNIX path too long"); 1293 return 0; 1294 } 1295 addr->sun_path[len] = 0; 1296 } 1297 addr->sun_family = s->sock_family; 1298 memcpy(addr->sun_path, path, len); 1299 #if defined(PYOS_OS2) 1300 *len_ret = sizeof(*addr); 1301 #else 1302 *len_ret = len + offsetof(struct sockaddr_un, sun_path); 1303 #endif 1304 return 1; 1305 } 1306 #endif /* AF_UNIX */ 1307 1308 #if defined(AF_NETLINK) 1309 case AF_NETLINK: 1310 { 1311 struct sockaddr_nl* addr; 1312 int pid, groups; 1313 addr = (struct sockaddr_nl *)addr_ret; 1314 if (!PyTuple_Check(args)) { 1315 PyErr_Format( 1316 PyExc_TypeError, 1317 "getsockaddrarg: " 1318 "AF_NETLINK address must be tuple, not %.500s", 1319 Py_TYPE(args)->tp_name); 1320 return 0; 1321 } 1322 if (!PyArg_ParseTuple(args, "II:getsockaddrarg", &pid, &groups)) 1323 return 0; 1324 addr->nl_family = AF_NETLINK; 1325 addr->nl_pid = pid; 1326 addr->nl_groups = groups; 1327 *len_ret = sizeof(*addr); 1328 return 1; 1329 } 1330 #endif 1331 1332 case AF_INET: 1333 { 1334 struct sockaddr_in* addr; 1335 char *host; 1336 int port, result; 1337 if (!PyTuple_Check(args)) { 1338 PyErr_Format( 1339 PyExc_TypeError, 1340 "getsockaddrarg: " 1341 "AF_INET address must be tuple, not %.500s", 1342 Py_TYPE(args)->tp_name); 1343 return 0; 1344 } 1345 if (!PyArg_ParseTuple(args, "eti:getsockaddrarg", 1346 "idna", &host, &port)) 1347 return 0; 1348 addr=(struct sockaddr_in*)addr_ret; 1349 result = setipaddr(host, (struct sockaddr *)addr, 1350 sizeof(*addr), AF_INET); 1351 PyMem_Free(host); 1352 if (result < 0) 1353 return 0; 1354 if (port < 0 || port > 0xffff) { 1355 PyErr_SetString( 1356 PyExc_OverflowError, 1357 "getsockaddrarg: port must be 0-65535."); 1358 return 0; 1359 } 1360 addr->sin_family = AF_INET; 1361 addr->sin_port = htons((short)port); 1362 *len_ret = sizeof *addr; 1363 return 1; 1364 } 1365 1366 #ifdef ENABLE_IPV6 1367 case AF_INET6: 1368 { 1369 struct sockaddr_in6* addr; 1370 char *host; 1371 int port, result; 1372 unsigned int flowinfo, scope_id; 1373 flowinfo = scope_id = 0; 1374 if (!PyTuple_Check(args)) { 1375 PyErr_Format( 1376 PyExc_TypeError, 1377 "getsockaddrarg: " 1378 "AF_INET6 address must be tuple, not %.500s", 1379 Py_TYPE(args)->tp_name); 1380 return 0; 1381 } 1382 if (!PyArg_ParseTuple(args, "eti|II", 1383 "idna", &host, &port, &flowinfo, 1384 &scope_id)) { 1385 return 0; 1386 } 1387 addr = (struct sockaddr_in6*)addr_ret; 1388 result = setipaddr(host, (struct sockaddr *)addr, 1389 sizeof(*addr), AF_INET6); 1390 PyMem_Free(host); 1391 if (result < 0) 1392 return 0; 1393 if (port < 0 || port > 0xffff) { 1394 PyErr_SetString( 1395 PyExc_OverflowError, 1396 "getsockaddrarg: port must be 0-65535."); 1397 return 0; 1398 } 1399 if (flowinfo > 0xfffff) { 1400 PyErr_SetString( 1401 PyExc_OverflowError, 1402 "getsockaddrarg: flowinfo must be 0-1048575."); 1403 return 0; 1404 } 1405 addr->sin6_family = s->sock_family; 1406 addr->sin6_port = htons((short)port); 1407 addr->sin6_flowinfo = htonl(flowinfo); 1408 addr->sin6_scope_id = scope_id; 1409 *len_ret = sizeof *addr; 1410 return 1; 1411 } 1412 #endif 1413 1414 #ifdef USE_BLUETOOTH 1415 case AF_BLUETOOTH: 1416 { 1417 switch (s->sock_proto) { 1418 case BTPROTO_L2CAP: 1419 { 1420 struct sockaddr_l2 *addr; 1421 char *straddr; 1422 1423 addr = (struct sockaddr_l2 *)addr_ret; 1424 memset(addr, 0, sizeof(struct sockaddr_l2)); 1425 _BT_L2_MEMB(addr, family) = AF_BLUETOOTH; 1426 if (!PyArg_ParseTuple(args, "si", &straddr, 1427 &_BT_L2_MEMB(addr, psm))) { 1428 PyErr_SetString(socket_error, "getsockaddrarg: " 1429 "wrong format"); 1430 return 0; 1431 } 1432 if (setbdaddr(straddr, &_BT_L2_MEMB(addr, bdaddr)) < 0) 1433 return 0; 1434 1435 *len_ret = sizeof *addr; 1436 return 1; 1437 } 1438 case BTPROTO_RFCOMM: 1439 { 1440 struct sockaddr_rc *addr; 1441 char *straddr; 1442 1443 addr = (struct sockaddr_rc *)addr_ret; 1444 _BT_RC_MEMB(addr, family) = AF_BLUETOOTH; 1445 if (!PyArg_ParseTuple(args, "si", &straddr, 1446 &_BT_RC_MEMB(addr, channel))) { 1447 PyErr_SetString(socket_error, "getsockaddrarg: " 1448 "wrong format"); 1449 return 0; 1450 } 1451 if (setbdaddr(straddr, &_BT_RC_MEMB(addr, bdaddr)) < 0) 1452 return 0; 1453 1454 *len_ret = sizeof *addr; 1455 return 1; 1456 } 1457 case BTPROTO_HCI: 1458 { 1459 struct sockaddr_hci *addr = (struct sockaddr_hci *)addr_ret; 1460 #if defined(__NetBSD__) || defined(__DragonFly__) 1461 char *straddr = PyBytes_AS_STRING(args); 1462 1463 _BT_HCI_MEMB(addr, family) = AF_BLUETOOTH; 1464 if (straddr == NULL) { 1465 PyErr_SetString(socket_error, "getsockaddrarg: " 1466 "wrong format"); 1467 return 0; 1468 } 1469 if (setbdaddr(straddr, &_BT_HCI_MEMB(addr, bdaddr)) < 0) 1470 return 0; 1471 #else 1472 _BT_HCI_MEMB(addr, family) = AF_BLUETOOTH; 1473 if (!PyArg_ParseTuple(args, "i", &_BT_HCI_MEMB(addr, dev))) { 1474 PyErr_SetString(socket_error, "getsockaddrarg: " 1475 "wrong format"); 1476 return 0; 1477 } 1478 #endif 1479 *len_ret = sizeof *addr; 1480 return 1; 1481 } 1482 #if !defined(__FreeBSD__) 1483 case BTPROTO_SCO: 1484 { 1485 struct sockaddr_sco *addr; 1486 char *straddr; 1487 1488 addr = (struct sockaddr_sco *)addr_ret; 1489 _BT_SCO_MEMB(addr, family) = AF_BLUETOOTH; 1490 straddr = PyString_AsString(args); 1491 if (straddr == NULL) { 1492 PyErr_SetString(socket_error, "getsockaddrarg: " 1493 "wrong format"); 1494 return 0; 1495 } 1496 if (setbdaddr(straddr, &_BT_SCO_MEMB(addr, bdaddr)) < 0) 1497 return 0; 1498 1499 *len_ret = sizeof *addr; 1500 return 1; 1501 } 1502 #endif 1503 default: 1504 PyErr_SetString(socket_error, "getsockaddrarg: unknown Bluetooth protocol"); 1505 return 0; 1506 } 1507 } 1508 #endif 1509 1510 #if defined(HAVE_NETPACKET_PACKET_H) && defined(SIOCGIFINDEX) 1511 case AF_PACKET: 1512 { 1513 struct sockaddr_ll* addr; 1514 struct ifreq ifr; 1515 char *interfaceName; 1516 int protoNumber; 1517 int hatype = 0; 1518 int pkttype = 0; 1519 char *haddr = NULL; 1520 unsigned int halen = 0; 1521 1522 if (!PyTuple_Check(args)) { 1523 PyErr_Format( 1524 PyExc_TypeError, 1525 "getsockaddrarg: " 1526 "AF_PACKET address must be tuple, not %.500s", 1527 Py_TYPE(args)->tp_name); 1528 return 0; 1529 } 1530 if (!PyArg_ParseTuple(args, "si|iis#", &interfaceName, 1531 &protoNumber, &pkttype, &hatype, 1532 &haddr, &halen)) 1533 return 0; 1534 strncpy(ifr.ifr_name, interfaceName, sizeof(ifr.ifr_name)); 1535 ifr.ifr_name[(sizeof(ifr.ifr_name))-1] = '\0'; 1536 if (ioctl(s->sock_fd, SIOCGIFINDEX, &ifr) < 0) { 1537 s->errorhandler(); 1538 return 0; 1539 } 1540 if (halen > 8) { 1541 PyErr_SetString(PyExc_ValueError, 1542 "Hardware address must be 8 bytes or less"); 1543 return 0; 1544 } 1545 if (protoNumber < 0 || protoNumber > 0xffff) { 1546 PyErr_SetString( 1547 PyExc_OverflowError, 1548 "getsockaddrarg: protoNumber must be 0-65535."); 1549 return 0; 1550 } 1551 addr = (struct sockaddr_ll*)addr_ret; 1552 addr->sll_family = AF_PACKET; 1553 addr->sll_protocol = htons((short)protoNumber); 1554 addr->sll_ifindex = ifr.ifr_ifindex; 1555 addr->sll_pkttype = pkttype; 1556 addr->sll_hatype = hatype; 1557 if (halen != 0) { 1558 memcpy(&addr->sll_addr, haddr, halen); 1559 } 1560 addr->sll_halen = halen; 1561 *len_ret = sizeof *addr; 1562 return 1; 1563 } 1564 #endif 1565 1566 #ifdef HAVE_LINUX_TIPC_H 1567 case AF_TIPC: 1568 { 1569 unsigned int atype, v1, v2, v3; 1570 unsigned int scope = TIPC_CLUSTER_SCOPE; 1571 struct sockaddr_tipc *addr; 1572 1573 if (!PyTuple_Check(args)) { 1574 PyErr_Format( 1575 PyExc_TypeError, 1576 "getsockaddrarg: " 1577 "AF_TIPC address must be tuple, not %.500s", 1578 Py_TYPE(args)->tp_name); 1579 return 0; 1580 } 1581 1582 if (!PyArg_ParseTuple(args, 1583 "IIII|I;Invalid TIPC address format", 1584 &atype, &v1, &v2, &v3, &scope)) 1585 return 0; 1586 1587 addr = (struct sockaddr_tipc *) addr_ret; 1588 memset(addr, 0, sizeof(struct sockaddr_tipc)); 1589 1590 addr->family = AF_TIPC; 1591 addr->scope = scope; 1592 addr->addrtype = atype; 1593 1594 if (atype == TIPC_ADDR_NAMESEQ) { 1595 addr->addr.nameseq.type = v1; 1596 addr->addr.nameseq.lower = v2; 1597 addr->addr.nameseq.upper = v3; 1598 } else if (atype == TIPC_ADDR_NAME) { 1599 addr->addr.name.name.type = v1; 1600 addr->addr.name.name.instance = v2; 1601 } else if (atype == TIPC_ADDR_ID) { 1602 addr->addr.id.node = v1; 1603 addr->addr.id.ref = v2; 1604 } else { 1605 /* Shouldn't happen */ 1606 PyErr_SetString(PyExc_TypeError, "Invalid address type"); 1607 return 0; 1608 } 1609 1610 *len_ret = sizeof(*addr); 1611 1612 return 1; 1613 } 1614 #endif 1615 1616 /* More cases here... */ 1617 1618 default: 1619 PyErr_SetString(socket_error, "getsockaddrarg: bad family"); 1620 return 0; 1621 1622 } 1623 } 1624 1625 1626 /* Get the address length according to the socket object's address family. 1627 Return 1 if the family is known, 0 otherwise. The length is returned 1628 through len_ret. */ 1629 1630 static int 1631 getsockaddrlen(PySocketSockObject *s, socklen_t *len_ret) 1632 { 1633 switch (s->sock_family) { 1634 1635 #if defined(AF_UNIX) 1636 case AF_UNIX: 1637 { 1638 *len_ret = sizeof (struct sockaddr_un); 1639 return 1; 1640 } 1641 #endif /* AF_UNIX */ 1642 1643 #if defined(AF_NETLINK) 1644 case AF_NETLINK: 1645 { 1646 *len_ret = sizeof (struct sockaddr_nl); 1647 return 1; 1648 } 1649 #endif 1650 1651 case AF_INET: 1652 { 1653 *len_ret = sizeof (struct sockaddr_in); 1654 return 1; 1655 } 1656 1657 #ifdef ENABLE_IPV6 1658 case AF_INET6: 1659 { 1660 *len_ret = sizeof (struct sockaddr_in6); 1661 return 1; 1662 } 1663 #endif 1664 1665 #ifdef USE_BLUETOOTH 1666 case AF_BLUETOOTH: 1667 { 1668 switch(s->sock_proto) 1669 { 1670 1671 case BTPROTO_L2CAP: 1672 *len_ret = sizeof (struct sockaddr_l2); 1673 return 1; 1674 case BTPROTO_RFCOMM: 1675 *len_ret = sizeof (struct sockaddr_rc); 1676 return 1; 1677 case BTPROTO_HCI: 1678 *len_ret = sizeof (struct sockaddr_hci); 1679 return 1; 1680 #if !defined(__FreeBSD__) 1681 case BTPROTO_SCO: 1682 *len_ret = sizeof (struct sockaddr_sco); 1683 return 1; 1684 #endif 1685 default: 1686 PyErr_SetString(socket_error, "getsockaddrlen: " 1687 "unknown BT protocol"); 1688 return 0; 1689 1690 } 1691 } 1692 #endif 1693 1694 #ifdef HAVE_NETPACKET_PACKET_H 1695 case AF_PACKET: 1696 { 1697 *len_ret = sizeof (struct sockaddr_ll); 1698 return 1; 1699 } 1700 #endif 1701 1702 #ifdef HAVE_LINUX_TIPC_H 1703 case AF_TIPC: 1704 { 1705 *len_ret = sizeof (struct sockaddr_tipc); 1706 return 1; 1707 } 1708 #endif 1709 1710 /* More cases here... */ 1711 1712 default: 1713 PyErr_SetString(socket_error, "getsockaddrlen: bad family"); 1714 return 0; 1715 1716 } 1717 } 1718 1719 1720 /* s.accept() method */ 1721 1722 static PyObject * 1723 sock_accept(PySocketSockObject *s) 1724 { 1725 sock_addr_t addrbuf; 1726 SOCKET_T newfd; 1727 socklen_t addrlen; 1728 PyObject *sock = NULL; 1729 PyObject *addr = NULL; 1730 PyObject *res = NULL; 1731 int timeout; 1732 1733 if (!getsockaddrlen(s, &addrlen)) 1734 return NULL; 1735 memset(&addrbuf, 0, addrlen); 1736 1737 newfd = INVALID_SOCKET; 1738 1739 if (!IS_SELECTABLE(s)) 1740 return select_error(); 1741 1742 BEGIN_SELECT_LOOP(s) 1743 Py_BEGIN_ALLOW_THREADS 1744 timeout = internal_select_ex(s, 0, interval); 1745 if (!timeout) 1746 newfd = accept(s->sock_fd, SAS2SA(&addrbuf), &addrlen); 1747 Py_END_ALLOW_THREADS 1748 1749 if (timeout == 1) { 1750 PyErr_SetString(socket_timeout, "timed out"); 1751 return NULL; 1752 } 1753 END_SELECT_LOOP(s) 1754 1755 if (newfd == INVALID_SOCKET) 1756 return s->errorhandler(); 1757 1758 /* Create the new object with unspecified family, 1759 to avoid calls to bind() etc. on it. */ 1760 sock = (PyObject *) new_sockobject(newfd, 1761 s->sock_family, 1762 s->sock_type, 1763 s->sock_proto); 1764 1765 if (sock == NULL) { 1766 SOCKETCLOSE(newfd); 1767 goto finally; 1768 } 1769 addr = makesockaddr(s->sock_fd, SAS2SA(&addrbuf), 1770 addrlen, s->sock_proto); 1771 if (addr == NULL) 1772 goto finally; 1773 1774 res = PyTuple_Pack(2, sock, addr); 1775 1776 finally: 1777 Py_XDECREF(sock); 1778 Py_XDECREF(addr); 1779 return res; 1780 } 1781 1782 PyDoc_STRVAR(accept_doc, 1783 "accept() -> (socket object, address info)\n\ 1784 \n\ 1785 Wait for an incoming connection. Return a new socket representing the\n\ 1786 connection, and the address of the client. For IP sockets, the address\n\ 1787 info is a pair (hostaddr, port)."); 1788 1789 /* s.setblocking(flag) method. Argument: 1790 False -- non-blocking mode; same as settimeout(0) 1791 True -- blocking mode; same as settimeout(None) 1792 */ 1793 1794 static PyObject * 1795 sock_setblocking(PySocketSockObject *s, PyObject *arg) 1796 { 1797 long block; 1798 1799 block = PyInt_AsLong(arg); 1800 if (block == -1 && PyErr_Occurred()) 1801 return NULL; 1802 1803 s->sock_timeout = block ? -1.0 : 0.0; 1804 internal_setblocking(s, block); 1805 1806 Py_INCREF(Py_None); 1807 return Py_None; 1808 } 1809 1810 PyDoc_STRVAR(setblocking_doc, 1811 "setblocking(flag)\n\ 1812 \n\ 1813 Set the socket to blocking (flag is true) or non-blocking (false).\n\ 1814 setblocking(True) is equivalent to settimeout(None);\n\ 1815 setblocking(False) is equivalent to settimeout(0.0)."); 1816 1817 /* s.settimeout(timeout) method. Argument: 1818 None -- no timeout, blocking mode; same as setblocking(True) 1819 0.0 -- non-blocking mode; same as setblocking(False) 1820 > 0 -- timeout mode; operations time out after timeout seconds 1821 < 0 -- illegal; raises an exception 1822 */ 1823 static PyObject * 1824 sock_settimeout(PySocketSockObject *s, PyObject *arg) 1825 { 1826 double timeout; 1827 1828 if (arg == Py_None) 1829 timeout = -1.0; 1830 else { 1831 timeout = PyFloat_AsDouble(arg); 1832 if (timeout < 0.0) { 1833 if (!PyErr_Occurred()) 1834 PyErr_SetString(PyExc_ValueError, 1835 "Timeout value out of range"); 1836 return NULL; 1837 } 1838 } 1839 1840 s->sock_timeout = timeout; 1841 internal_setblocking(s, timeout < 0.0); 1842 1843 Py_INCREF(Py_None); 1844 return Py_None; 1845 } 1846 1847 PyDoc_STRVAR(settimeout_doc, 1848 "settimeout(timeout)\n\ 1849 \n\ 1850 Set a timeout on socket operations. 'timeout' can be a float,\n\ 1851 giving in seconds, or None. Setting a timeout of None disables\n\ 1852 the timeout feature and is equivalent to setblocking(1).\n\ 1853 Setting a timeout of zero is the same as setblocking(0)."); 1854 1855 /* s.gettimeout() method. 1856 Returns the timeout associated with a socket. */ 1857 static PyObject * 1858 sock_gettimeout(PySocketSockObject *s) 1859 { 1860 if (s->sock_timeout < 0.0) { 1861 Py_INCREF(Py_None); 1862 return Py_None; 1863 } 1864 else 1865 return PyFloat_FromDouble(s->sock_timeout); 1866 } 1867 1868 PyDoc_STRVAR(gettimeout_doc, 1869 "gettimeout() -> timeout\n\ 1870 \n\ 1871 Returns the timeout in seconds (float) associated with socket \n\ 1872 operations. A timeout of None indicates that timeouts on socket \n\ 1873 operations are disabled."); 1874 1875 #ifdef RISCOS 1876 /* s.sleeptaskw(1 | 0) method */ 1877 1878 static PyObject * 1879 sock_sleeptaskw(PySocketSockObject *s,PyObject *arg) 1880 { 1881 int block; 1882 block = PyInt_AsLong(arg); 1883 if (block == -1 && PyErr_Occurred()) 1884 return NULL; 1885 Py_BEGIN_ALLOW_THREADS 1886 socketioctl(s->sock_fd, 0x80046679, (u_long*)&block); 1887 Py_END_ALLOW_THREADS 1888 1889 Py_INCREF(Py_None); 1890 return Py_None; 1891 } 1892 PyDoc_STRVAR(sleeptaskw_doc, 1893 "sleeptaskw(flag)\n\ 1894 \n\ 1895 Allow sleeps in taskwindows."); 1896 #endif 1897 1898 1899 /* s.setsockopt() method. 1900 With an integer third argument, sets an integer option. 1901 With a string third argument, sets an option from a buffer; 1902 use optional built-in module 'struct' to encode the string. */ 1903 1904 static PyObject * 1905 sock_setsockopt(PySocketSockObject *s, PyObject *args) 1906 { 1907 int level; 1908 int optname; 1909 int res; 1910 char *buf; 1911 int buflen; 1912 int flag; 1913 1914 if (PyArg_ParseTuple(args, "iii:setsockopt", 1915 &level, &optname, &flag)) { 1916 buf = (char *) &flag; 1917 buflen = sizeof flag; 1918 } 1919 else { 1920 PyErr_Clear(); 1921 if (!PyArg_ParseTuple(args, "iis#:setsockopt", 1922 &level, &optname, &buf, &buflen)) 1923 return NULL; 1924 } 1925 res = setsockopt(s->sock_fd, level, optname, (void *)buf, buflen); 1926 if (res < 0) 1927 return s->errorhandler(); 1928 Py_INCREF(Py_None); 1929 return Py_None; 1930 } 1931 1932 PyDoc_STRVAR(setsockopt_doc, 1933 "setsockopt(level, option, value)\n\ 1934 \n\ 1935 Set a socket option. See the Unix manual for level and option.\n\ 1936 The value argument can either be an integer or a string."); 1937 1938 1939 /* s.getsockopt() method. 1940 With two arguments, retrieves an integer option. 1941 With a third integer argument, retrieves a string buffer of that size; 1942 use optional built-in module 'struct' to decode the string. */ 1943 1944 static PyObject * 1945 sock_getsockopt(PySocketSockObject *s, PyObject *args) 1946 { 1947 int level; 1948 int optname; 1949 int res; 1950 PyObject *buf; 1951 socklen_t buflen = 0; 1952 1953 #ifdef __BEOS__ 1954 /* We have incomplete socket support. */ 1955 PyErr_SetString(socket_error, "getsockopt not supported"); 1956 return NULL; 1957 #else 1958 1959 if (!PyArg_ParseTuple(args, "ii|i:getsockopt", 1960 &level, &optname, &buflen)) 1961 return NULL; 1962 1963 if (buflen == 0) { 1964 int flag = 0; 1965 socklen_t flagsize = sizeof flag; 1966 res = getsockopt(s->sock_fd, level, optname, 1967 (void *)&flag, &flagsize); 1968 if (res < 0) 1969 return s->errorhandler(); 1970 return PyInt_FromLong(flag); 1971 } 1972 #ifdef __VMS 1973 /* socklen_t is unsigned so no negative test is needed, 1974 test buflen == 0 is previously done */ 1975 if (buflen > 1024) { 1976 #else 1977 if (buflen <= 0 || buflen > 1024) { 1978 #endif 1979 PyErr_SetString(socket_error, 1980 "getsockopt buflen out of range"); 1981 return NULL; 1982 } 1983 buf = PyString_FromStringAndSize((char *)NULL, buflen); 1984 if (buf == NULL) 1985 return NULL; 1986 res = getsockopt(s->sock_fd, level, optname, 1987 (void *)PyString_AS_STRING(buf), &buflen); 1988 if (res < 0) { 1989 Py_DECREF(buf); 1990 return s->errorhandler(); 1991 } 1992 _PyString_Resize(&buf, buflen); 1993 return buf; 1994 #endif /* __BEOS__ */ 1995 } 1996 1997 PyDoc_STRVAR(getsockopt_doc, 1998 "getsockopt(level, option[, buffersize]) -> value\n\ 1999 \n\ 2000 Get a socket option. See the Unix manual for level and option.\n\ 2001 If a nonzero buffersize argument is given, the return value is a\n\ 2002 string of that length; otherwise it is an integer."); 2003 2004 2005 /* s.bind(sockaddr) method */ 2006 2007 static PyObject * 2008 sock_bind(PySocketSockObject *s, PyObject *addro) 2009 { 2010 sock_addr_t addrbuf; 2011 int addrlen; 2012 int res; 2013 2014 if (!getsockaddrarg(s, addro, SAS2SA(&addrbuf), &addrlen)) 2015 return NULL; 2016 Py_BEGIN_ALLOW_THREADS 2017 res = bind(s->sock_fd, SAS2SA(&addrbuf), addrlen); 2018 Py_END_ALLOW_THREADS 2019 if (res < 0) 2020 return s->errorhandler(); 2021 Py_INCREF(Py_None); 2022 return Py_None; 2023 } 2024 2025 PyDoc_STRVAR(bind_doc, 2026 "bind(address)\n\ 2027 \n\ 2028 Bind the socket to a local address. For IP sockets, the address is a\n\ 2029 pair (host, port); the host must refer to the local host. For raw packet\n\ 2030 sockets the address is a tuple (ifname, proto [,pkttype [,hatype]])"); 2031 2032 2033 /* s.close() method. 2034 Set the file descriptor to -1 so operations tried subsequently 2035 will surely fail. */ 2036 2037 static PyObject * 2038 sock_close(PySocketSockObject *s) 2039 { 2040 SOCKET_T fd; 2041 2042 if ((fd = s->sock_fd) != -1) { 2043 s->sock_fd = -1; 2044 Py_BEGIN_ALLOW_THREADS 2045 (void) SOCKETCLOSE(fd); 2046 Py_END_ALLOW_THREADS 2047 } 2048 Py_INCREF(Py_None); 2049 return Py_None; 2050 } 2051 2052 PyDoc_STRVAR(close_doc, 2053 "close()\n\ 2054 \n\ 2055 Close the socket. It cannot be used after this call."); 2056 2057 static int 2058 internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, 2059 int *timeoutp) 2060 { 2061 int res, timeout; 2062 2063 timeout = 0; 2064 res = connect(s->sock_fd, addr, addrlen); 2065 2066 #ifdef MS_WINDOWS 2067 2068 if (s->sock_timeout > 0.0) { 2069 if (res < 0 && WSAGetLastError() == WSAEWOULDBLOCK && 2070 IS_SELECTABLE(s)) { 2071 /* This is a mess. Best solution: trust select */ 2072 fd_set fds; 2073 fd_set fds_exc; 2074 struct timeval tv; 2075 tv.tv_sec = (int)s->sock_timeout; 2076 tv.tv_usec = (int)((s->sock_timeout - tv.tv_sec) * 1e6); 2077 FD_ZERO(&fds); 2078 FD_SET(s->sock_fd, &fds); 2079 FD_ZERO(&fds_exc); 2080 FD_SET(s->sock_fd, &fds_exc); 2081 res = select(s->sock_fd+1, NULL, &fds, &fds_exc, &tv); 2082 if (res == 0) { 2083 res = WSAEWOULDBLOCK; 2084 timeout = 1; 2085 } else if (res > 0) { 2086 if (FD_ISSET(s->sock_fd, &fds)) 2087 /* The socket is in the writeable set - this 2088 means connected */ 2089 res = 0; 2090 else { 2091 /* As per MS docs, we need to call getsockopt() 2092 to get the underlying error */ 2093 int res_size = sizeof res; 2094 /* It must be in the exception set */ 2095 assert(FD_ISSET(s->sock_fd, &fds_exc)); 2096 if (0 == getsockopt(s->sock_fd, SOL_SOCKET, SO_ERROR, 2097 (char *)&res, &res_size)) 2098 /* getsockopt also clears WSAGetLastError, 2099 so reset it back. */ 2100 WSASetLastError(res); 2101 else 2102 res = WSAGetLastError(); 2103 } 2104 } 2105 /* else if (res < 0) an error occurred */ 2106 } 2107 } 2108 2109 if (res < 0) 2110 res = WSAGetLastError(); 2111 2112 #else 2113 2114 if (s->sock_timeout > 0.0) { 2115 if (res < 0 && errno == EINPROGRESS && IS_SELECTABLE(s)) { 2116 timeout = internal_select(s, 1); 2117 if (timeout == 0) { 2118 /* Bug #1019808: in case of an EINPROGRESS, 2119 use getsockopt(SO_ERROR) to get the real 2120 error. */ 2121 socklen_t res_size = sizeof res; 2122 (void)getsockopt(s->sock_fd, SOL_SOCKET, 2123 SO_ERROR, &res, &res_size); 2124 if (res == EISCONN) 2125 res = 0; 2126 errno = res; 2127 } 2128 else if (timeout == -1) { 2129 res = errno; /* had error */ 2130 } 2131 else 2132 res = EWOULDBLOCK; /* timed out */ 2133 } 2134 } 2135 2136 if (res < 0) 2137 res = errno; 2138 2139 #endif 2140 *timeoutp = timeout; 2141 2142 return res; 2143 } 2144 2145 /* s.connect(sockaddr) method */ 2146 2147 static PyObject * 2148 sock_connect(PySocketSockObject *s, PyObject *addro) 2149 { 2150 sock_addr_t addrbuf; 2151 int addrlen; 2152 int res; 2153 int timeout; 2154 2155 if (!getsockaddrarg(s, addro, SAS2SA(&addrbuf), &addrlen)) 2156 return NULL; 2157 2158 Py_BEGIN_ALLOW_THREADS 2159 res = internal_connect(s, SAS2SA(&addrbuf), addrlen, &timeout); 2160 Py_END_ALLOW_THREADS 2161 2162 if (timeout == 1) { 2163 PyErr_SetString(socket_timeout, "timed out"); 2164 return NULL; 2165 } 2166 if (res != 0) 2167 return s->errorhandler(); 2168 Py_INCREF(Py_None); 2169 return Py_None; 2170 } 2171 2172 PyDoc_STRVAR(connect_doc, 2173 "connect(address)\n\ 2174 \n\ 2175 Connect the socket to a remote address. For IP sockets, the address\n\ 2176 is a pair (host, port)."); 2177 2178 2179 /* s.connect_ex(sockaddr) method */ 2180 2181 static PyObject * 2182 sock_connect_ex(PySocketSockObject *s, PyObject *addro) 2183 { 2184 sock_addr_t addrbuf; 2185 int addrlen; 2186 int res; 2187 int timeout; 2188 2189 if (!getsockaddrarg(s, addro, SAS2SA(&addrbuf), &addrlen)) 2190 return NULL; 2191 2192 Py_BEGIN_ALLOW_THREADS 2193 res = internal_connect(s, SAS2SA(&addrbuf), addrlen, &timeout); 2194 Py_END_ALLOW_THREADS 2195 2196 /* Signals are not errors (though they may raise exceptions). Adapted 2197 from PyErr_SetFromErrnoWithFilenameObject(). */ 2198 #ifdef EINTR 2199 if (res == EINTR && PyErr_CheckSignals()) 2200 return NULL; 2201 #endif 2202 2203 return PyInt_FromLong((long) res); 2204 } 2205 2206 PyDoc_STRVAR(connect_ex_doc, 2207 "connect_ex(address) -> errno\n\ 2208 \n\ 2209 This is like connect(address), but returns an error code (the errno value)\n\ 2210 instead of raising an exception when an error occurs."); 2211 2212 2213 /* s.fileno() method */ 2214 2215 static PyObject * 2216 sock_fileno(PySocketSockObject *s) 2217 { 2218 #if SIZEOF_SOCKET_T <= SIZEOF_LONG 2219 return PyInt_FromLong((long) s->sock_fd); 2220 #else 2221 return PyLong_FromLongLong((PY_LONG_LONG)s->sock_fd); 2222 #endif 2223 } 2224 2225 PyDoc_STRVAR(fileno_doc, 2226 "fileno() -> integer\n\ 2227 \n\ 2228 Return the integer file descriptor of the socket."); 2229 2230 2231 #ifndef NO_DUP 2232 /* s.dup() method */ 2233 2234 static PyObject * 2235 sock_dup(PySocketSockObject *s) 2236 { 2237 SOCKET_T newfd; 2238 PyObject *sock; 2239 2240 newfd = dup(s->sock_fd); 2241 if (newfd < 0) 2242 return s->errorhandler(); 2243 sock = (PyObject *) new_sockobject(newfd, 2244 s->sock_family, 2245 s->sock_type, 2246 s->sock_proto); 2247 if (sock == NULL) 2248 SOCKETCLOSE(newfd); 2249 return sock; 2250 } 2251 2252 PyDoc_STRVAR(dup_doc, 2253 "dup() -> socket object\n\ 2254 \n\ 2255 Return a new socket object connected to the same system resource."); 2256 2257 #endif 2258 2259 2260 /* s.getsockname() method */ 2261 2262 static PyObject * 2263 sock_getsockname(PySocketSockObject *s) 2264 { 2265 sock_addr_t addrbuf; 2266 int res; 2267 socklen_t addrlen; 2268 2269 if (!getsockaddrlen(s, &addrlen)) 2270 return NULL; 2271 memset(&addrbuf, 0, addrlen); 2272 Py_BEGIN_ALLOW_THREADS 2273 res = getsockname(s->sock_fd, SAS2SA(&addrbuf), &addrlen); 2274 Py_END_ALLOW_THREADS 2275 if (res < 0) 2276 return s->errorhandler(); 2277 return makesockaddr(s->sock_fd, SAS2SA(&addrbuf), addrlen, 2278 s->sock_proto); 2279 } 2280 2281 PyDoc_STRVAR(getsockname_doc, 2282 "getsockname() -> address info\n\ 2283 \n\ 2284 Return the address of the local endpoint. For IP sockets, the address\n\ 2285 info is a pair (hostaddr, port)."); 2286 2287 2288 #ifdef HAVE_GETPEERNAME /* Cray APP doesn't have this :-( */ 2289 /* s.getpeername() method */ 2290 2291 static PyObject * 2292 sock_getpeername(PySocketSockObject *s) 2293 { 2294 sock_addr_t addrbuf; 2295 int res; 2296 socklen_t addrlen; 2297 2298 if (!getsockaddrlen(s, &addrlen)) 2299 return NULL; 2300 memset(&addrbuf, 0, addrlen); 2301 Py_BEGIN_ALLOW_THREADS 2302 res = getpeername(s->sock_fd, SAS2SA(&addrbuf), &addrlen); 2303 Py_END_ALLOW_THREADS 2304 if (res < 0) 2305 return s->errorhandler(); 2306 return makesockaddr(s->sock_fd, SAS2SA(&addrbuf), addrlen, 2307 s->sock_proto); 2308 } 2309 2310 PyDoc_STRVAR(getpeername_doc, 2311 "getpeername() -> address info\n\ 2312 \n\ 2313 Return the address of the remote endpoint. For IP sockets, the address\n\ 2314 info is a pair (hostaddr, port)."); 2315 2316 #endif /* HAVE_GETPEERNAME */ 2317 2318 2319 /* s.listen(n) method */ 2320 2321 static PyObject * 2322 sock_listen(PySocketSockObject *s, PyObject *arg) 2323 { 2324 int backlog; 2325 int res; 2326 2327 backlog = _PyInt_AsInt(arg); 2328 if (backlog == -1 && PyErr_Occurred()) 2329 return NULL; 2330 Py_BEGIN_ALLOW_THREADS 2331 /* To avoid problems on systems that don't allow a negative backlog 2332 * (which doesn't make sense anyway) we force a minimum value of 0. */ 2333 if (backlog < 0) 2334 backlog = 0; 2335 res = listen(s->sock_fd, backlog); 2336 Py_END_ALLOW_THREADS 2337 if (res < 0) 2338 return s->errorhandler(); 2339 Py_INCREF(Py_None); 2340 return Py_None; 2341 } 2342 2343 PyDoc_STRVAR(listen_doc, 2344 "listen(backlog)\n\ 2345 \n\ 2346 Enable a server to accept connections. The backlog argument must be at\n\ 2347 least 0 (if it is lower, it is set to 0); it specifies the number of\n\ 2348 unaccepted connections that the system will allow before refusing new\n\ 2349 connections."); 2350 2351 2352 #ifndef NO_DUP 2353 /* s.makefile(mode) method. 2354 Create a new open file object referring to a dupped version of 2355 the socket's file descriptor. (The dup() call is necessary so 2356 that the open file and socket objects may be closed independent 2357 of each other.) 2358 The mode argument specifies 'r' or 'w' passed to fdopen(). */ 2359 2360 static PyObject * 2361 sock_makefile(PySocketSockObject *s, PyObject *args) 2362 { 2363 extern int fclose(FILE *); 2364 char *mode = "r"; 2365 int bufsize = -1; 2366 #ifdef MS_WIN32 2367 Py_intptr_t fd; 2368 #else 2369 int fd; 2370 #endif 2371 FILE *fp; 2372 PyObject *f; 2373 #ifdef __VMS 2374 char *mode_r = "r"; 2375 char *mode_w = "w"; 2376 #endif 2377 2378 if (!PyArg_ParseTuple(args, "|si:makefile", &mode, &bufsize)) 2379 return NULL; 2380 #ifdef __VMS 2381 if (strcmp(mode,"rb") == 0) { 2382 mode = mode_r; 2383 } 2384 else { 2385 if (strcmp(mode,"wb") == 0) { 2386 mode = mode_w; 2387 } 2388 } 2389 #endif 2390 #ifdef MS_WIN32 2391 if (((fd = _open_osfhandle(s->sock_fd, _O_BINARY)) < 0) || 2392 ((fd = dup(fd)) < 0) || ((fp = fdopen(fd, mode)) == NULL)) 2393 #else 2394 if ((fd = dup(s->sock_fd)) < 0 || (fp = fdopen(fd, mode)) == NULL) 2395 #endif 2396 { 2397 if (fd >= 0) 2398 SOCKETCLOSE(fd); 2399 return s->errorhandler(); 2400 } 2401 f = PyFile_FromFile(fp, "<socket>", mode, fclose); 2402 if (f != NULL) 2403 PyFile_SetBufSize(f, bufsize); 2404 return f; 2405 } 2406 2407 PyDoc_STRVAR(makefile_doc, 2408 "makefile([mode[, buffersize]]) -> file object\n\ 2409 \n\ 2410 Return a regular file object corresponding to the socket.\n\ 2411 The mode and buffersize arguments are as for the built-in open() function."); 2412 2413 #endif /* NO_DUP */ 2414 2415 /* 2416 * This is the guts of the recv() and recv_into() methods, which reads into a 2417 * char buffer. If you have any inc/dec ref to do to the objects that contain 2418 * the buffer, do it in the caller. This function returns the number of bytes 2419 * successfully read. If there was an error, it returns -1. Note that it is 2420 * also possible that we return a number of bytes smaller than the request 2421 * bytes. 2422 */ 2423 static ssize_t 2424 sock_recv_guts(PySocketSockObject *s, char* cbuf, int len, int flags) 2425 { 2426 ssize_t outlen = -1; 2427 int timeout; 2428 #ifdef __VMS 2429 int remaining; 2430 char *read_buf; 2431 #endif 2432 2433 if (!IS_SELECTABLE(s)) { 2434 select_error(); 2435 return -1; 2436 } 2437 2438 #ifndef __VMS 2439 BEGIN_SELECT_LOOP(s) 2440 Py_BEGIN_ALLOW_THREADS 2441 timeout = internal_select_ex(s, 0, interval); 2442 if (!timeout) 2443 outlen = recv(s->sock_fd, cbuf, len, flags); 2444 Py_END_ALLOW_THREADS 2445 2446 if (timeout == 1) { 2447 PyErr_SetString(socket_timeout, "timed out"); 2448 return -1; 2449 } 2450 END_SELECT_LOOP(s) 2451 if (outlen < 0) { 2452 /* Note: the call to errorhandler() ALWAYS indirectly returned 2453 NULL, so ignore its return value */ 2454 s->errorhandler(); 2455 return -1; 2456 } 2457 #else 2458 read_buf = cbuf; 2459 remaining = len; 2460 while (remaining != 0) { 2461 unsigned int segment; 2462 int nread = -1; 2463 2464 segment = remaining /SEGMENT_SIZE; 2465 if (segment != 0) { 2466 segment = SEGMENT_SIZE; 2467 } 2468 else { 2469 segment = remaining; 2470 } 2471 2472 BEGIN_SELECT_LOOP(s) 2473 Py_BEGIN_ALLOW_THREADS 2474 timeout = internal_select_ex(s, 0, interval); 2475 if (!timeout) 2476 nread = recv(s->sock_fd, read_buf, segment, flags); 2477 Py_END_ALLOW_THREADS 2478 2479 if (timeout == 1) { 2480 PyErr_SetString(socket_timeout, "timed out"); 2481 return -1; 2482 } 2483 END_SELECT_LOOP(s) 2484 2485 if (nread < 0) { 2486 s->errorhandler(); 2487 return -1; 2488 } 2489 if (nread != remaining) { 2490 read_buf += nread; 2491 break; 2492 } 2493 2494 remaining -= segment; 2495 read_buf += segment; 2496 } 2497 outlen = read_buf - cbuf; 2498 #endif /* !__VMS */ 2499 2500 return outlen; 2501 } 2502 2503 2504 /* s.recv(nbytes [,flags]) method */ 2505 2506 static PyObject * 2507 sock_recv(PySocketSockObject *s, PyObject *args) 2508 { 2509 int recvlen, flags = 0; 2510 ssize_t outlen; 2511 PyObject *buf; 2512 2513 if (!PyArg_ParseTuple(args, "i|i:recv", &recvlen, &flags)) 2514 return NULL; 2515 2516 if (recvlen < 0) { 2517 PyErr_SetString(PyExc_ValueError, 2518 "negative buffersize in recv"); 2519 return NULL; 2520 } 2521 2522 /* Allocate a new string. */ 2523 buf = PyString_FromStringAndSize((char *) 0, recvlen); 2524 if (buf == NULL) 2525 return NULL; 2526 2527 /* Call the guts */ 2528 outlen = sock_recv_guts(s, PyString_AS_STRING(buf), recvlen, flags); 2529 if (outlen < 0) { 2530 /* An error occurred, release the string and return an 2531 error. */ 2532 Py_DECREF(buf); 2533 return NULL; 2534 } 2535 if (outlen != recvlen) { 2536 /* We did not read as many bytes as we anticipated, resize the 2537 string if possible and be successful. */ 2538 if (_PyString_Resize(&buf, outlen) < 0) 2539 /* Oopsy, not so successful after all. */ 2540 return NULL; 2541 } 2542 2543 return buf; 2544 } 2545 2546 PyDoc_STRVAR(recv_doc, 2547 "recv(buffersize[, flags]) -> data\n\ 2548 \n\ 2549 Receive up to buffersize bytes from the socket. For the optional flags\n\ 2550 argument, see the Unix manual. When no data is available, block until\n\ 2551 at least one byte is available or until the remote end is closed. When\n\ 2552 the remote end is closed and all data is read, return the empty string."); 2553 2554 2555 /* s.recv_into(buffer, [nbytes [,flags]]) method */ 2556 2557 static PyObject* 2558 sock_recv_into(PySocketSockObject *s, PyObject *args, PyObject *kwds) 2559 { 2560 static char *kwlist[] = {"buffer", "nbytes", "flags", 0}; 2561 2562 int recvlen = 0, flags = 0; 2563 ssize_t readlen; 2564 Py_buffer buf; 2565 Py_ssize_t buflen; 2566 2567 /* Get the buffer's memory */ 2568 if (!PyArg_ParseTupleAndKeywords(args, kwds, "w*|ii:recv_into", kwlist, 2569 &buf, &recvlen, &flags)) 2570 return NULL; 2571 buflen = buf.len; 2572 assert(buf.buf != 0 && buflen > 0); 2573 2574 if (recvlen < 0) { 2575 PyErr_SetString(PyExc_ValueError, 2576 "negative buffersize in recv_into"); 2577 goto error; 2578 } 2579 if (recvlen == 0) { 2580 /* If nbytes was not specified, use the buffer's length */ 2581 recvlen = buflen; 2582 } 2583 2584 /* Check if the buffer is large enough */ 2585 if (buflen < recvlen) { 2586 PyErr_SetString(PyExc_ValueError, 2587 "buffer too small for requested bytes"); 2588 goto error; 2589 } 2590 2591 /* Call the guts */ 2592 readlen = sock_recv_guts(s, buf.buf, recvlen, flags); 2593 if (readlen < 0) { 2594 /* Return an error. */ 2595 goto error; 2596 } 2597 2598 PyBuffer_Release(&buf); 2599 /* Return the number of bytes read. Note that we do not do anything 2600 special here in the case that readlen < recvlen. */ 2601 return PyInt_FromSsize_t(readlen); 2602 2603 error: 2604 PyBuffer_Release(&buf); 2605 return NULL; 2606 } 2607 2608 PyDoc_STRVAR(recv_into_doc, 2609 "recv_into(buffer, [nbytes[, flags]]) -> nbytes_read\n\ 2610 \n\ 2611 A version of recv() that stores its data into a buffer rather than creating \n\ 2612 a new string. Receive up to buffersize bytes from the socket. If buffersize \n\ 2613 is not specified (or 0), receive up to the size available in the given buffer.\n\ 2614 \n\ 2615 See recv() for documentation about the flags."); 2616 2617 2618 /* 2619 * This is the guts of the recvfrom() and recvfrom_into() methods, which reads 2620 * into a char buffer. If you have any inc/def ref to do to the objects that 2621 * contain the buffer, do it in the caller. This function returns the number 2622 * of bytes successfully read. If there was an error, it returns -1. Note 2623 * that it is also possible that we return a number of bytes smaller than the 2624 * request bytes. 2625 * 2626 * 'addr' is a return value for the address object. Note that you must decref 2627 * it yourself. 2628 */ 2629 static ssize_t 2630 sock_recvfrom_guts(PySocketSockObject *s, char* cbuf, int len, int flags, 2631 PyObject** addr) 2632 { 2633 sock_addr_t addrbuf; 2634 int timeout; 2635 ssize_t n = -1; 2636 socklen_t addrlen; 2637 2638 *addr = NULL; 2639 2640 if (!getsockaddrlen(s, &addrlen)) 2641 return -1; 2642 2643 if (!IS_SELECTABLE(s)) { 2644 select_error(); 2645 return -1; 2646 } 2647 2648 BEGIN_SELECT_LOOP(s) 2649 Py_BEGIN_ALLOW_THREADS 2650 memset(&addrbuf, 0, addrlen); 2651 timeout = internal_select_ex(s, 0, interval); 2652 if (!timeout) { 2653 #ifndef MS_WINDOWS 2654 #if defined(PYOS_OS2) && !defined(PYCC_GCC) 2655 n = recvfrom(s->sock_fd, cbuf, len, flags, 2656 SAS2SA(&addrbuf), &addrlen); 2657 #else 2658 n = recvfrom(s->sock_fd, cbuf, len, flags, 2659 (void *) &addrbuf, &addrlen); 2660 #endif 2661 #else 2662 n = recvfrom(s->sock_fd, cbuf, len, flags, 2663 SAS2SA(&addrbuf), &addrlen); 2664 #endif 2665 } 2666 Py_END_ALLOW_THREADS 2667 2668 if (timeout == 1) { 2669 PyErr_SetString(socket_timeout, "timed out"); 2670 return -1; 2671 } 2672 END_SELECT_LOOP(s) 2673 if (n < 0) { 2674 s->errorhandler(); 2675 return -1; 2676 } 2677 2678 if (!(*addr = makesockaddr(s->sock_fd, SAS2SA(&addrbuf), 2679 addrlen, s->sock_proto))) 2680 return -1; 2681 2682 return n; 2683 } 2684 2685 /* s.recvfrom(nbytes [,flags]) method */ 2686 2687 static PyObject * 2688 sock_recvfrom(PySocketSockObject *s, PyObject *args) 2689 { 2690 PyObject *buf = NULL; 2691 PyObject *addr = NULL; 2692 PyObject *ret = NULL; 2693 int recvlen, flags = 0; 2694 ssize_t outlen; 2695 2696 if (!PyArg_ParseTuple(args, "i|i:recvfrom", &recvlen, &flags)) 2697 return NULL; 2698 2699 if (recvlen < 0) { 2700 PyErr_SetString(PyExc_ValueError, 2701 "negative buffersize in recvfrom"); 2702 return NULL; 2703 } 2704 2705 buf = PyString_FromStringAndSize((char *) 0, recvlen); 2706 if (buf == NULL) 2707 return NULL; 2708 2709 outlen = sock_recvfrom_guts(s, PyString_AS_STRING(buf), 2710 recvlen, flags, &addr); 2711 if (outlen < 0) { 2712 goto finally; 2713 } 2714 2715 if (outlen != recvlen) { 2716 /* We did not read as many bytes as we anticipated, resize the 2717 string if possible and be successful. */ 2718 if (_PyString_Resize(&buf, outlen) < 0) 2719 /* Oopsy, not so successful after all. */ 2720 goto finally; 2721 } 2722 2723 ret = PyTuple_Pack(2, buf, addr); 2724 2725 finally: 2726 Py_XDECREF(buf); 2727 Py_XDECREF(addr); 2728 return ret; 2729 } 2730 2731 PyDoc_STRVAR(recvfrom_doc, 2732 "recvfrom(buffersize[, flags]) -> (data, address info)\n\ 2733 \n\ 2734 Like recv(buffersize, flags) but also return the sender's address info."); 2735 2736 2737 /* s.recvfrom_into(buffer[, nbytes [,flags]]) method */ 2738 2739 static PyObject * 2740 sock_recvfrom_into(PySocketSockObject *s, PyObject *args, PyObject* kwds) 2741 { 2742 static char *kwlist[] = {"buffer", "nbytes", "flags", 0}; 2743 2744 int recvlen = 0, flags = 0; 2745 ssize_t readlen; 2746 Py_buffer buf; 2747 int buflen; 2748 2749 PyObject *addr = NULL; 2750 2751 if (!PyArg_ParseTupleAndKeywords(args, kwds, "w*|ii:recvfrom_into", 2752 kwlist, &buf, 2753 &recvlen, &flags)) 2754 return NULL; 2755 buflen = buf.len; 2756 2757 if (recvlen < 0) { 2758 PyErr_SetString(PyExc_ValueError, 2759 "negative buffersize in recvfrom_into"); 2760 goto error; 2761 } 2762 if (recvlen == 0) { 2763 /* If nbytes was not specified, use the buffer's length */ 2764 recvlen = buflen; 2765 } else if (recvlen > buflen) { 2766 PyErr_SetString(PyExc_ValueError, 2767 "nbytes is greater than the length of the buffer"); 2768 goto error; 2769 } 2770 2771 readlen = sock_recvfrom_guts(s, buf.buf, recvlen, flags, &addr); 2772 if (readlen < 0) { 2773 /* Return an error */ 2774 goto error; 2775 } 2776 2777 PyBuffer_Release(&buf); 2778 /* Return the number of bytes read and the address. Note that we do 2779 not do anything special here in the case that readlen < recvlen. */ 2780 return Py_BuildValue("lN", readlen, addr); 2781 2782 error: 2783 Py_XDECREF(addr); 2784 PyBuffer_Release(&buf); 2785 return NULL; 2786 } 2787 2788 PyDoc_STRVAR(recvfrom_into_doc, 2789 "recvfrom_into(buffer[, nbytes[, flags]]) -> (nbytes, address info)\n\ 2790 \n\ 2791 Like recv_into(buffer[, nbytes[, flags]]) but also return the sender's address info."); 2792 2793 2794 /* s.send(data [,flags]) method */ 2795 2796 static PyObject * 2797 sock_send(PySocketSockObject *s, PyObject *args) 2798 { 2799 char *buf; 2800 int len, n = -1, flags = 0, timeout; 2801 Py_buffer pbuf; 2802 2803 if (!PyArg_ParseTuple(args, "s*|i:send", &pbuf, &flags)) 2804 return NULL; 2805 2806 if (!IS_SELECTABLE(s)) { 2807 PyBuffer_Release(&pbuf); 2808 return select_error(); 2809 } 2810 buf = pbuf.buf; 2811 len = pbuf.len; 2812 2813 BEGIN_SELECT_LOOP(s) 2814 Py_BEGIN_ALLOW_THREADS 2815 timeout = internal_select_ex(s, 1, interval); 2816 if (!timeout) 2817 #ifdef __VMS 2818 n = sendsegmented(s->sock_fd, buf, len, flags); 2819 #else 2820 n = send(s->sock_fd, buf, len, flags); 2821 #endif 2822 Py_END_ALLOW_THREADS 2823 if (timeout == 1) { 2824 PyBuffer_Release(&pbuf); 2825 PyErr_SetString(socket_timeout, "timed out"); 2826 return NULL; 2827 } 2828 END_SELECT_LOOP(s) 2829 2830 PyBuffer_Release(&pbuf); 2831 if (n < 0) 2832 return s->errorhandler(); 2833 return PyInt_FromLong((long)n); 2834 } 2835 2836 PyDoc_STRVAR(send_doc, 2837 "send(data[, flags]) -> count\n\ 2838 \n\ 2839 Send a data string to the socket. For the optional flags\n\ 2840 argument, see the Unix manual. Return the number of bytes\n\ 2841 sent; this may be less than len(data) if the network is busy."); 2842 2843 2844 /* s.sendall(data [,flags]) method */ 2845 2846 static PyObject * 2847 sock_sendall(PySocketSockObject *s, PyObject *args) 2848 { 2849 char *buf; 2850 int len, n = -1, flags = 0, timeout, saved_errno; 2851 Py_buffer pbuf; 2852 2853 if (!PyArg_ParseTuple(args, "s*|i:sendall", &pbuf, &flags)) 2854 return NULL; 2855 buf = pbuf.buf; 2856 len = pbuf.len; 2857 2858 if (!IS_SELECTABLE(s)) { 2859 PyBuffer_Release(&pbuf); 2860 return select_error(); 2861 } 2862 2863 do { 2864 BEGIN_SELECT_LOOP(s) 2865 Py_BEGIN_ALLOW_THREADS 2866 timeout = internal_select_ex(s, 1, interval); 2867 n = -1; 2868 if (!timeout) { 2869 #ifdef __VMS 2870 n = sendsegmented(s->sock_fd, buf, len, flags); 2871 #else 2872 n = send(s->sock_fd, buf, len, flags); 2873 #endif 2874 } 2875 Py_END_ALLOW_THREADS 2876 if (timeout == 1) { 2877 PyBuffer_Release(&pbuf); 2878 PyErr_SetString(socket_timeout, "timed out"); 2879 return NULL; 2880 } 2881 END_SELECT_LOOP(s) 2882 /* PyErr_CheckSignals() might change errno */ 2883 saved_errno = errno; 2884 /* We must run our signal handlers before looping again. 2885 send() can return a successful partial write when it is 2886 interrupted, so we can't restrict ourselves to EINTR. */ 2887 if (PyErr_CheckSignals()) { 2888 PyBuffer_Release(&pbuf); 2889 return NULL; 2890 } 2891 if (n < 0) { 2892 /* If interrupted, try again */ 2893 if (saved_errno == EINTR) 2894 continue; 2895 else 2896 break; 2897 } 2898 buf += n; 2899 len -= n; 2900 } while (len > 0); 2901 PyBuffer_Release(&pbuf); 2902 2903 if (n < 0) 2904 return s->errorhandler(); 2905 2906 Py_INCREF(Py_None); 2907 return Py_None; 2908 } 2909 2910 PyDoc_STRVAR(sendall_doc, 2911 "sendall(data[, flags])\n\ 2912 \n\ 2913 Send a data string to the socket. For the optional flags\n\ 2914 argument, see the Unix manual. This calls send() repeatedly\n\ 2915 until all data is sent. If an error occurs, it's impossible\n\ 2916 to tell how much data has been sent."); 2917 2918 2919 /* s.sendto(data, [flags,] sockaddr) method */ 2920 2921 static PyObject * 2922 sock_sendto(PySocketSockObject *s, PyObject *args) 2923 { 2924 Py_buffer pbuf; 2925 PyObject *addro; 2926 char *buf; 2927 Py_ssize_t len; 2928 sock_addr_t addrbuf; 2929 int addrlen, flags, timeout; 2930 long n = -1; 2931 int arglen; 2932 2933 flags = 0; 2934 arglen = PyTuple_Size(args); 2935 switch(arglen) { 2936 case 2: 2937 PyArg_ParseTuple(args, "s*O:sendto", &pbuf, &addro); 2938 break; 2939 case 3: 2940 PyArg_ParseTuple(args, "s*iO:sendto", &pbuf, &flags, &addro); 2941 break; 2942 default: 2943 PyErr_Format(PyExc_TypeError, "sendto() takes 2 or 3" 2944 " arguments (%d given)", arglen); 2945 } 2946 if (PyErr_Occurred()) 2947 return NULL; 2948 2949 buf = pbuf.buf; 2950 len = pbuf.len; 2951 2952 if (!IS_SELECTABLE(s)) { 2953 PyBuffer_Release(&pbuf); 2954 return select_error(); 2955 } 2956 2957 if (!getsockaddrarg(s, addro, SAS2SA(&addrbuf), &addrlen)) { 2958 PyBuffer_Release(&pbuf); 2959 return NULL; 2960 } 2961 2962 BEGIN_SELECT_LOOP(s) 2963 Py_BEGIN_ALLOW_THREADS 2964 timeout = internal_select_ex(s, 1, interval); 2965 if (!timeout) 2966 n = sendto(s->sock_fd, buf, len, flags, SAS2SA(&addrbuf), addrlen); 2967 Py_END_ALLOW_THREADS 2968 2969 if (timeout == 1) { 2970 PyBuffer_Release(&pbuf); 2971 PyErr_SetString(socket_timeout, "timed out"); 2972 return NULL; 2973 } 2974 END_SELECT_LOOP(s) 2975 PyBuffer_Release(&pbuf); 2976 if (n < 0) 2977 return s->errorhandler(); 2978 return PyInt_FromLong((long)n); 2979 } 2980 2981 PyDoc_STRVAR(sendto_doc, 2982 "sendto(data[, flags], address) -> count\n\ 2983 \n\ 2984 Like send(data, flags) but allows specifying the destination address.\n\ 2985 For IP sockets, the address is a pair (hostaddr, port)."); 2986 2987 2988 /* s.shutdown(how) method */ 2989 2990 static PyObject * 2991 sock_shutdown(PySocketSockObject *s, PyObject *arg) 2992 { 2993 int how; 2994 int res; 2995 2996 how = _PyInt_AsInt(arg); 2997 if (how == -1 && PyErr_Occurred()) 2998 return NULL; 2999 Py_BEGIN_ALLOW_THREADS 3000 res = shutdown(s->sock_fd, how); 3001 Py_END_ALLOW_THREADS 3002 if (res < 0) 3003 return s->errorhandler(); 3004 Py_INCREF(Py_None); 3005 return Py_None; 3006 } 3007 3008 PyDoc_STRVAR(shutdown_doc, 3009 "shutdown(flag)\n\ 3010 \n\ 3011 Shut down the reading side of the socket (flag == SHUT_RD), the writing side\n\ 3012 of the socket (flag == SHUT_WR), or both ends (flag == SHUT_RDWR)."); 3013 3014 #if defined(MS_WINDOWS) && defined(SIO_RCVALL) 3015 static PyObject* 3016 sock_ioctl(PySocketSockObject *s, PyObject *arg) 3017 { 3018 unsigned long cmd = SIO_RCVALL; 3019 PyObject *argO; 3020 DWORD recv; 3021 3022 if (!PyArg_ParseTuple(arg, "kO:ioctl", &cmd, &argO)) 3023 return NULL; 3024 3025 switch (cmd) { 3026 case SIO_RCVALL: { 3027 unsigned int option = RCVALL_ON; 3028 if (!PyArg_ParseTuple(arg, "kI:ioctl", &cmd, &option)) 3029 return NULL; 3030 if (WSAIoctl(s->sock_fd, cmd, &option, sizeof(option), 3031 NULL, 0, &recv, NULL, NULL) == SOCKET_ERROR) { 3032 return set_error(); 3033 } 3034 return PyLong_FromUnsignedLong(recv); } 3035 case SIO_KEEPALIVE_VALS: { 3036 struct tcp_keepalive ka; 3037 if (!PyArg_ParseTuple(arg, "k(kkk):ioctl", &cmd, 3038 &ka.onoff, &ka.keepalivetime, &ka.keepaliveinterval)) 3039 return NULL; 3040 if (WSAIoctl(s->sock_fd, cmd, &ka, sizeof(ka), 3041 NULL, 0, &recv, NULL, NULL) == SOCKET_ERROR) { 3042 return set_error(); 3043 } 3044 return PyLong_FromUnsignedLong(recv); } 3045 default: 3046 PyErr_Format(PyExc_ValueError, "invalid ioctl command %d", cmd); 3047 return NULL; 3048 } 3049 } 3050 PyDoc_STRVAR(sock_ioctl_doc, 3051 "ioctl(cmd, option) -> long\n\ 3052 \n\ 3053 Control the socket with WSAIoctl syscall. Currently supported 'cmd' values are\n\ 3054 SIO_RCVALL: 'option' must be one of the socket.RCVALL_* constants.\n\ 3055 SIO_KEEPALIVE_VALS: 'option' is a tuple of (onoff, timeout, interval)."); 3056 3057 #endif 3058 3059 /* List of methods for socket objects */ 3060 3061 static PyMethodDef sock_methods[] = { 3062 {"accept", (PyCFunction)sock_accept, METH_NOARGS, 3063 accept_doc}, 3064 {"bind", (PyCFunction)sock_bind, METH_O, 3065 bind_doc}, 3066 {"close", (PyCFunction)sock_close, METH_NOARGS, 3067 close_doc}, 3068 {"connect", (PyCFunction)sock_connect, METH_O, 3069 connect_doc}, 3070 {"connect_ex", (PyCFunction)sock_connect_ex, METH_O, 3071 connect_ex_doc}, 3072 #ifndef NO_DUP 3073 {"dup", (PyCFunction)sock_dup, METH_NOARGS, 3074 dup_doc}, 3075 #endif 3076 {"fileno", (PyCFunction)sock_fileno, METH_NOARGS, 3077 fileno_doc}, 3078 #ifdef HAVE_GETPEERNAME 3079 {"getpeername", (PyCFunction)sock_getpeername, 3080 METH_NOARGS, getpeername_doc}, 3081 #endif 3082 {"getsockname", (PyCFunction)sock_getsockname, 3083 METH_NOARGS, getsockname_doc}, 3084 {"getsockopt", (PyCFunction)sock_getsockopt, METH_VARARGS, 3085 getsockopt_doc}, 3086 #if defined(MS_WINDOWS) && defined(SIO_RCVALL) 3087 {"ioctl", (PyCFunction)sock_ioctl, METH_VARARGS, 3088 sock_ioctl_doc}, 3089 #endif 3090 {"listen", (PyCFunction)sock_listen, METH_O, 3091 listen_doc}, 3092 #ifndef NO_DUP 3093 {"makefile", (PyCFunction)sock_makefile, METH_VARARGS, 3094 makefile_doc}, 3095 #endif 3096 {"recv", (PyCFunction)sock_recv, METH_VARARGS, 3097 recv_doc}, 3098 {"recv_into", (PyCFunction)sock_recv_into, METH_VARARGS | METH_KEYWORDS, 3099 recv_into_doc}, 3100 {"recvfrom", (PyCFunction)sock_recvfrom, METH_VARARGS, 3101 recvfrom_doc}, 3102 {"recvfrom_into", (PyCFunction)sock_recvfrom_into, METH_VARARGS | METH_KEYWORDS, 3103 recvfrom_into_doc}, 3104 {"send", (PyCFunction)sock_send, METH_VARARGS, 3105 send_doc}, 3106 {"sendall", (PyCFunction)sock_sendall, METH_VARARGS, 3107 sendall_doc}, 3108 {"sendto", (PyCFunction)sock_sendto, METH_VARARGS, 3109 sendto_doc}, 3110 {"setblocking", (PyCFunction)sock_setblocking, METH_O, 3111 setblocking_doc}, 3112 {"settimeout", (PyCFunction)sock_settimeout, METH_O, 3113 settimeout_doc}, 3114 {"gettimeout", (PyCFunction)sock_gettimeout, METH_NOARGS, 3115 gettimeout_doc}, 3116 {"setsockopt", (PyCFunction)sock_setsockopt, METH_VARARGS, 3117 setsockopt_doc}, 3118 {"shutdown", (PyCFunction)sock_shutdown, METH_O, 3119 shutdown_doc}, 3120 #ifdef RISCOS 3121 {"sleeptaskw", (PyCFunction)sock_sleeptaskw, METH_O, 3122 sleeptaskw_doc}, 3123 #endif 3124 {NULL, NULL} /* sentinel */ 3125 }; 3126 3127 /* SockObject members */ 3128 static PyMemberDef sock_memberlist[] = { 3129 {"family", T_INT, offsetof(PySocketSockObject, sock_family), READONLY, "the socket family"}, 3130 {"type", T_INT, offsetof(PySocketSockObject, sock_type), READONLY, "the socket type"}, 3131 {"proto", T_INT, offsetof(PySocketSockObject, sock_proto), READONLY, "the socket protocol"}, 3132 {"timeout", T_DOUBLE, offsetof(PySocketSockObject, sock_timeout), READONLY, "the socket timeout"}, 3133 {0}, 3134 }; 3135 3136 /* Deallocate a socket object in response to the last Py_DECREF(). 3137 First close the file description. */ 3138 3139 static void 3140 sock_dealloc(PySocketSockObject *s) 3141 { 3142 if (s->sock_fd != -1) 3143 (void) SOCKETCLOSE(s->sock_fd); 3144 if (s->weakreflist != NULL) 3145 PyObject_ClearWeakRefs((PyObject *)s); 3146 Py_TYPE(s)->tp_free((PyObject *)s); 3147 } 3148 3149 3150 static PyObject * 3151 sock_repr(PySocketSockObject *s) 3152 { 3153 char buf[512]; 3154 long sock_fd; 3155 /* On Windows, this test is needed because SOCKET_T is unsigned */ 3156 if (s->sock_fd == INVALID_SOCKET) { 3157 sock_fd = -1; 3158 } 3159 #if SIZEOF_SOCKET_T > SIZEOF_LONG 3160 else if (s->sock_fd > LONG_MAX) { 3161 /* this can occur on Win64, and actually there is a special 3162 ugly printf formatter for decimal pointer length integer 3163 printing, only bother if necessary*/ 3164 PyErr_SetString(PyExc_OverflowError, 3165 "no printf formatter to display " 3166 "the socket descriptor in decimal"); 3167 return NULL; 3168 } 3169 #endif 3170 else 3171 sock_fd = (long)s->sock_fd; 3172 PyOS_snprintf( 3173 buf, sizeof(buf), 3174 "<socket object, fd=%ld, family=%d, type=%d, protocol=%d>", 3175 sock_fd, s->sock_family, 3176 s->sock_type, 3177 s->sock_proto); 3178 return PyString_FromString(buf); 3179 } 3180 3181 3182 /* Create a new, uninitialized socket object. */ 3183 3184 static PyObject * 3185 sock_new(PyTypeObject *type, PyObject *args, PyObject *kwds) 3186 { 3187 PyObject *new; 3188 3189 new = type->tp_alloc(type, 0); 3190 if (new != NULL) { 3191 ((PySocketSockObject *)new)->sock_fd = -1; 3192 ((PySocketSockObject *)new)->sock_timeout = -1.0; 3193 ((PySocketSockObject *)new)->errorhandler = &set_error; 3194 ((PySocketSockObject *)new)->weakreflist = NULL; 3195 } 3196 return new; 3197 } 3198 3199 3200 /* Initialize a new socket object. */ 3201 3202 /*ARGSUSED*/ 3203 static int 3204 sock_initobj(PyObject *self, PyObject *args, PyObject *kwds) 3205 { 3206 PySocketSockObject *s = (PySocketSockObject *)self; 3207 SOCKET_T fd; 3208 int family = AF_INET, type = SOCK_STREAM, proto = 0; 3209 static char *keywords[] = {"family", "type", "proto", 0}; 3210 3211 if (!PyArg_ParseTupleAndKeywords(args, kwds, 3212 "|iii:socket", keywords, 3213 &family, &type, &proto)) 3214 return -1; 3215 3216 Py_BEGIN_ALLOW_THREADS 3217 fd = socket(family, type, proto); 3218 Py_END_ALLOW_THREADS 3219 3220 if (fd == INVALID_SOCKET) { 3221 set_error(); 3222 return -1; 3223 } 3224 init_sockobject(s, fd, family, type, proto); 3225 3226 return 0; 3227 3228 } 3229 3230 3231 /* Type object for socket objects. */ 3232 3233 static PyTypeObject sock_type = { 3234 PyVarObject_HEAD_INIT(0, 0) /* Must fill in type value later */ 3235 "_socket.socket", /* tp_name */ 3236 sizeof(PySocketSockObject), /* tp_basicsize */ 3237 0, /* tp_itemsize */ 3238 (destructor)sock_dealloc, /* tp_dealloc */ 3239 0, /* tp_print */ 3240 0, /* tp_getattr */ 3241 0, /* tp_setattr */ 3242 0, /* tp_compare */ 3243 (reprfunc)sock_repr, /* tp_repr */ 3244 0, /* tp_as_number */ 3245 0, /* tp_as_sequence */ 3246 0, /* tp_as_mapping */ 3247 0, /* tp_hash */ 3248 0, /* tp_call */ 3249 0, /* tp_str */ 3250 PyObject_GenericGetAttr, /* tp_getattro */ 3251 0, /* tp_setattro */ 3252 0, /* tp_as_buffer */ 3253 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ 3254 sock_doc, /* tp_doc */ 3255 0, /* tp_traverse */ 3256 0, /* tp_clear */ 3257 0, /* tp_richcompare */ 3258 offsetof(PySocketSockObject, weakreflist), /* tp_weaklistoffset */ 3259 0, /* tp_iter */ 3260 0, /* tp_iternext */ 3261 sock_methods, /* tp_methods */ 3262 sock_memberlist, /* tp_members */ 3263 0, /* tp_getset */ 3264 0, /* tp_base */ 3265 0, /* tp_dict */ 3266 0, /* tp_descr_get */ 3267 0, /* tp_descr_set */ 3268 0, /* tp_dictoffset */ 3269 sock_initobj, /* tp_init */ 3270 PyType_GenericAlloc, /* tp_alloc */ 3271 sock_new, /* tp_new */ 3272 PyObject_Del, /* tp_free */ 3273 }; 3274 3275 3276 /* Python interface to gethostname(). */ 3277 3278 /*ARGSUSED*/ 3279 static PyObject * 3280 socket_gethostname(PyObject *self, PyObject *unused) 3281 { 3282 char buf[1024]; 3283 int res; 3284 Py_BEGIN_ALLOW_THREADS 3285 res = gethostname(buf, (int) sizeof buf - 1); 3286 Py_END_ALLOW_THREADS 3287 if (res < 0) 3288 return set_error(); 3289 buf[sizeof buf - 1] = '\0'; 3290 return PyString_FromString(buf); 3291 } 3292 3293 PyDoc_STRVAR(gethostname_doc, 3294 "gethostname() -> string\n\ 3295 \n\ 3296 Return the current host name."); 3297 3298 3299 /* Python interface to gethostbyname(name). */ 3300 3301 /*ARGSUSED*/ 3302 static PyObject * 3303 socket_gethostbyname(PyObject *self, PyObject *args) 3304 { 3305 char *name; 3306 sock_addr_t addrbuf; 3307 3308 if (!PyArg_ParseTuple(args, "s:gethostbyname", &name)) 3309 return NULL; 3310 if (setipaddr(name, SAS2SA(&addrbuf), sizeof(addrbuf), AF_INET) < 0) 3311 return NULL; 3312 return makeipaddr(SAS2SA(&addrbuf), sizeof(struct sockaddr_in)); 3313 } 3314 3315 PyDoc_STRVAR(gethostbyname_doc, 3316 "gethostbyname(host) -> address\n\ 3317 \n\ 3318 Return the IP address (a string of the form '255.255.255.255') for a host."); 3319 3320 3321 /* Convenience function common to gethostbyname_ex and gethostbyaddr */ 3322 3323 static PyObject * 3324 gethost_common(struct hostent *h, struct sockaddr *addr, int alen, int af) 3325 { 3326 char **pch; 3327 PyObject *rtn_tuple = (PyObject *)NULL; 3328 PyObject *name_list = (PyObject *)NULL; 3329 PyObject *addr_list = (PyObject *)NULL; 3330 PyObject *tmp; 3331 3332 if (h == NULL) { 3333 /* Let's get real error message to return */ 3334 #ifndef RISCOS 3335 set_herror(h_errno); 3336 #else 3337 PyErr_SetString(socket_error, "host not found"); 3338 #endif 3339 return NULL; 3340 } 3341 3342 if (h->h_addrtype != af) { 3343 /* Let's get real error message to return */ 3344 PyErr_SetString(socket_error, 3345 (char *)strerror(EAFNOSUPPORT)); 3346 3347 return NULL; 3348 } 3349 3350 switch (af) { 3351 3352 case AF_INET: 3353 if (alen < sizeof(struct sockaddr_in)) 3354 return NULL; 3355 break; 3356 3357 #ifdef ENABLE_IPV6 3358 case AF_INET6: 3359 if (alen < sizeof(struct sockaddr_in6)) 3360 return NULL; 3361 break; 3362 #endif 3363 3364 } 3365 3366 if ((name_list = PyList_New(0)) == NULL) 3367 goto err; 3368 3369 if ((addr_list = PyList_New(0)) == NULL) 3370 goto err; 3371 3372 /* SF #1511317: h_aliases can be NULL */ 3373 if (h->h_aliases) { 3374 for (pch = h->h_aliases; *pch != NULL; pch++) { 3375 int status; 3376 tmp = PyString_FromString(*pch); 3377 if (tmp == NULL) 3378 goto err; 3379 3380 status = PyList_Append(name_list, tmp); 3381 Py_DECREF(tmp); 3382 3383 if (status) 3384 goto err; 3385 } 3386 } 3387 3388 for (pch = h->h_addr_list; *pch != NULL; pch++) { 3389 int status; 3390 3391 switch (af) { 3392 3393 case AF_INET: 3394 { 3395 struct sockaddr_in sin; 3396 memset(&sin, 0, sizeof(sin)); 3397 sin.sin_family = af; 3398 #ifdef HAVE_SOCKADDR_SA_LEN 3399 sin.sin_len = sizeof(sin); 3400 #endif 3401 memcpy(&sin.sin_addr, *pch, sizeof(sin.sin_addr)); 3402 tmp = makeipaddr((struct sockaddr *)&sin, sizeof(sin)); 3403 3404 if (pch == h->h_addr_list && alen >= sizeof(sin)) 3405 memcpy((char *) addr, &sin, sizeof(sin)); 3406 break; 3407 } 3408 3409 #ifdef ENABLE_IPV6 3410 case AF_INET6: 3411 { 3412 struct sockaddr_in6 sin6; 3413 memset(&sin6, 0, sizeof(sin6)); 3414 sin6.sin6_family = af; 3415 #ifdef HAVE_SOCKADDR_SA_LEN 3416 sin6.sin6_len = sizeof(sin6); 3417 #endif 3418 memcpy(&sin6.sin6_addr, *pch, sizeof(sin6.sin6_addr)); 3419 tmp = makeipaddr((struct sockaddr *)&sin6, 3420 sizeof(sin6)); 3421 3422 if (pch == h->h_addr_list && alen >= sizeof(sin6)) 3423 memcpy((char *) addr, &sin6, sizeof(sin6)); 3424 break; 3425 } 3426 #endif 3427 3428 default: /* can't happen */ 3429 PyErr_SetString(socket_error, 3430 "unsupported address family"); 3431 return NULL; 3432 } 3433 3434 if (tmp == NULL) 3435 goto err; 3436 3437 status = PyList_Append(addr_list, tmp); 3438 Py_DECREF(tmp); 3439 3440 if (status) 3441 goto err; 3442 } 3443 3444 rtn_tuple = Py_BuildValue("sOO", h->h_name, name_list, addr_list); 3445 3446 err: 3447 Py_XDECREF(name_list); 3448 Py_XDECREF(addr_list); 3449 return rtn_tuple; 3450 } 3451 3452 3453 /* Python interface to gethostbyname_ex(name). */ 3454 3455 /*ARGSUSED*/ 3456 static PyObject * 3457 socket_gethostbyname_ex(PyObject *self, PyObject *args) 3458 { 3459 char *name; 3460 struct hostent *h; 3461 #ifdef ENABLE_IPV6 3462 struct sockaddr_storage addr; 3463 #else 3464 struct sockaddr_in addr; 3465 #endif 3466 struct sockaddr *sa; 3467 PyObject *ret; 3468 #ifdef HAVE_GETHOSTBYNAME_R 3469 struct hostent hp_allocated; 3470 #ifdef HAVE_GETHOSTBYNAME_R_3_ARG 3471 struct hostent_data data; 3472 #else 3473 char buf[16384]; 3474 int buf_len = (sizeof buf) - 1; 3475 int errnop; 3476 #endif 3477 #ifdef HAVE_GETHOSTBYNAME_R_3_ARG 3478 int result; 3479 #endif 3480 #endif /* HAVE_GETHOSTBYNAME_R */ 3481 3482 if (!PyArg_ParseTuple(args, "s:gethostbyname_ex", &name)) 3483 return NULL; 3484 if (setipaddr(name, (struct sockaddr *)&addr, sizeof(addr), AF_INET) < 0) 3485 return NULL; 3486 Py_BEGIN_ALLOW_THREADS 3487 #ifdef HAVE_GETHOSTBYNAME_R 3488 #if defined(HAVE_GETHOSTBYNAME_R_6_ARG) 3489 gethostbyname_r(name, &hp_allocated, buf, buf_len, 3490 &h, &errnop); 3491 #elif defined(HAVE_GETHOSTBYNAME_R_5_ARG) 3492 h = gethostbyname_r(name, &hp_allocated, buf, buf_len, &errnop); 3493 #else /* HAVE_GETHOSTBYNAME_R_3_ARG */ 3494 memset((void *) &data, '\0', sizeof(data)); 3495 result = gethostbyname_r(name, &hp_allocated, &data); 3496 h = (result != 0) ? NULL : &hp_allocated; 3497 #endif 3498 #else /* not HAVE_GETHOSTBYNAME_R */ 3499 #ifdef USE_GETHOSTBYNAME_LOCK 3500 PyThread_acquire_lock(netdb_lock, 1); 3501 #endif 3502 h = gethostbyname(name); 3503 #endif /* HAVE_GETHOSTBYNAME_R */ 3504 Py_END_ALLOW_THREADS 3505 /* Some C libraries would require addr.__ss_family instead of 3506 addr.ss_family. 3507 Therefore, we cast the sockaddr_storage into sockaddr to 3508 access sa_family. */ 3509 sa = (struct sockaddr*)&addr; 3510 ret = gethost_common(h, (struct sockaddr *)&addr, sizeof(addr), 3511 sa->sa_family); 3512 #ifdef USE_GETHOSTBYNAME_LOCK 3513 PyThread_release_lock(netdb_lock); 3514 #endif 3515 return ret; 3516 } 3517 3518 PyDoc_STRVAR(ghbn_ex_doc, 3519 "gethostbyname_ex(host) -> (name, aliaslist, addresslist)\n\ 3520 \n\ 3521 Return the true host name, a list of aliases, and a list of IP addresses,\n\ 3522 for a host. The host argument is a string giving a host name or IP number."); 3523 3524 3525 /* Python interface to gethostbyaddr(IP). */ 3526 3527 /*ARGSUSED*/ 3528 static PyObject * 3529 socket_gethostbyaddr(PyObject *self, PyObject *args) 3530 { 3531 #ifdef ENABLE_IPV6 3532 struct sockaddr_storage addr; 3533 #else 3534 struct sockaddr_in addr; 3535 #endif 3536 struct sockaddr *sa = (struct sockaddr *)&addr; 3537 char *ip_num; 3538 struct hostent *h; 3539 PyObject *ret; 3540 #ifdef HAVE_GETHOSTBYNAME_R 3541 struct hostent hp_allocated; 3542 #ifdef HAVE_GETHOSTBYNAME_R_3_ARG 3543 struct hostent_data data; 3544 #else 3545 /* glibcs up to 2.10 assume that the buf argument to 3546 gethostbyaddr_r is 8-byte aligned, which at least llvm-gcc 3547 does not ensure. The attribute below instructs the compiler 3548 to maintain this alignment. */ 3549 char buf[16384] Py_ALIGNED(8); 3550 int buf_len = (sizeof buf) - 1; 3551 int errnop; 3552 #endif 3553 #ifdef HAVE_GETHOSTBYNAME_R_3_ARG 3554 int result; 3555 #endif 3556 #endif /* HAVE_GETHOSTBYNAME_R */ 3557 char *ap; 3558 int al; 3559 int af; 3560 3561 if (!PyArg_ParseTuple(args, "s:gethostbyaddr", &ip_num)) 3562 return NULL; 3563 af = AF_UNSPEC; 3564 if (setipaddr(ip_num, sa, sizeof(addr), af) < 0) 3565 return NULL; 3566 af = sa->sa_family; 3567 ap = NULL; 3568 switch (af) { 3569 case AF_INET: 3570 ap = (char *)&((struct sockaddr_in *)sa)->sin_addr; 3571 al = sizeof(((struct sockaddr_in *)sa)->sin_addr); 3572 break; 3573 #ifdef ENABLE_IPV6 3574 case AF_INET6: 3575 ap = (char *)&((struct sockaddr_in6 *)sa)->sin6_addr; 3576 al = sizeof(((struct sockaddr_in6 *)sa)->sin6_addr); 3577 break; 3578 #endif 3579 default: 3580 PyErr_SetString(socket_error, "unsupported address family"); 3581 return NULL; 3582 } 3583 Py_BEGIN_ALLOW_THREADS 3584 #ifdef HAVE_GETHOSTBYNAME_R 3585 #if defined(HAVE_GETHOSTBYNAME_R_6_ARG) 3586 gethostbyaddr_r(ap, al, af, 3587 &hp_allocated, buf, buf_len, 3588 &h, &errnop); 3589 #elif defined(HAVE_GETHOSTBYNAME_R_5_ARG) 3590 h = gethostbyaddr_r(ap, al, af, 3591 &hp_allocated, buf, buf_len, &errnop); 3592 #else /* HAVE_GETHOSTBYNAME_R_3_ARG */ 3593 memset((void *) &data, '\0', sizeof(data)); 3594 result = gethostbyaddr_r(ap, al, af, &hp_allocated, &data); 3595 h = (result != 0) ? NULL : &hp_allocated; 3596 #endif 3597 #else /* not HAVE_GETHOSTBYNAME_R */ 3598 #ifdef USE_GETHOSTBYNAME_LOCK 3599 PyThread_acquire_lock(netdb_lock, 1); 3600 #endif 3601 h = gethostbyaddr(ap, al, af); 3602 #endif /* HAVE_GETHOSTBYNAME_R */ 3603 Py_END_ALLOW_THREADS 3604 ret = gethost_common(h, (struct sockaddr *)&addr, sizeof(addr), af); 3605 #ifdef USE_GETHOSTBYNAME_LOCK 3606 PyThread_release_lock(netdb_lock); 3607 #endif 3608 return ret; 3609 } 3610 3611 PyDoc_STRVAR(gethostbyaddr_doc, 3612 "gethostbyaddr(host) -> (name, aliaslist, addresslist)\n\ 3613 \n\ 3614 Return the true host name, a list of aliases, and a list of IP addresses,\n\ 3615 for a host. The host argument is a string giving a host name or IP number."); 3616 3617 3618 /* Python interface to getservbyname(name). 3619 This only returns the port number, since the other info is already 3620 known or not useful (like the list of aliases). */ 3621 3622 /*ARGSUSED*/ 3623 static PyObject * 3624 socket_getservbyname(PyObject *self, PyObject *args) 3625 { 3626 char *name, *proto=NULL; 3627 struct servent *sp; 3628 if (!PyArg_ParseTuple(args, "s|s:getservbyname", &name, &proto)) 3629 return NULL; 3630 Py_BEGIN_ALLOW_THREADS 3631 sp = getservbyname(name, proto); 3632 Py_END_ALLOW_THREADS 3633 if (sp == NULL) { 3634 PyErr_SetString(socket_error, "service/proto not found"); 3635 return NULL; 3636 } 3637 return PyInt_FromLong((long) ntohs(sp->s_port)); 3638 } 3639 3640 PyDoc_STRVAR(getservbyname_doc, 3641 "getservbyname(servicename[, protocolname]) -> integer\n\ 3642 \n\ 3643 Return a port number from a service name and protocol name.\n\ 3644 The optional protocol name, if given, should be 'tcp' or 'udp',\n\ 3645 otherwise any protocol will match."); 3646 3647 3648 /* Python interface to getservbyport(port). 3649 This only returns the service name, since the other info is already 3650 known or not useful (like the list of aliases). */ 3651 3652 /*ARGSUSED*/ 3653 static PyObject * 3654 socket_getservbyport(PyObject *self, PyObject *args) 3655 { 3656 int port; 3657 char *proto=NULL; 3658 struct servent *sp; 3659 if (!PyArg_ParseTuple(args, "i|s:getservbyport", &port, &proto)) 3660 return NULL; 3661 if (port < 0 || port > 0xffff) { 3662 PyErr_SetString( 3663 PyExc_OverflowError, 3664 "getservbyport: port must be 0-65535."); 3665 return NULL; 3666 } 3667 Py_BEGIN_ALLOW_THREADS 3668 sp = getservbyport(htons((short)port), proto); 3669 Py_END_ALLOW_THREADS 3670 if (sp == NULL) { 3671 PyErr_SetString(socket_error, "port/proto not found"); 3672 return NULL; 3673 } 3674 return PyString_FromString(sp->s_name); 3675 } 3676 3677 PyDoc_STRVAR(getservbyport_doc, 3678 "getservbyport(port[, protocolname]) -> string\n\ 3679 \n\ 3680 Return the service name from a port number and protocol name.\n\ 3681 The optional protocol name, if given, should be 'tcp' or 'udp',\n\ 3682 otherwise any protocol will match."); 3683 3684 /* Python interface to getprotobyname(name). 3685 This only returns the protocol number, since the other info is 3686 already known or not useful (like the list of aliases). */ 3687 3688 /*ARGSUSED*/ 3689 static PyObject * 3690 socket_getprotobyname(PyObject *self, PyObject *args) 3691 { 3692 char *name; 3693 struct protoent *sp; 3694 #ifdef __BEOS__ 3695 /* Not available in BeOS yet. - [cjh] */ 3696 PyErr_SetString(socket_error, "getprotobyname not supported"); 3697 return NULL; 3698 #else 3699 if (!PyArg_ParseTuple(args, "s:getprotobyname", &name)) 3700 return NULL; 3701 Py_BEGIN_ALLOW_THREADS 3702 sp = getprotobyname(name); 3703 Py_END_ALLOW_THREADS 3704 if (sp == NULL) { 3705 PyErr_SetString(socket_error, "protocol not found"); 3706 return NULL; 3707 } 3708 return PyInt_FromLong((long) sp->p_proto); 3709 #endif 3710 } 3711 3712 PyDoc_STRVAR(getprotobyname_doc, 3713 "getprotobyname(name) -> integer\n\ 3714 \n\ 3715 Return the protocol number for the named protocol. (Rarely used.)"); 3716 3717 3718 #ifdef HAVE_SOCKETPAIR 3719 /* Create a pair of sockets using the socketpair() function. 3720 Arguments as for socket() except the default family is AF_UNIX if 3721 defined on the platform; otherwise, the default is AF_INET. */ 3722 3723 /*ARGSUSED*/ 3724 static PyObject * 3725 socket_socketpair(PyObject *self, PyObject *args) 3726 { 3727 PySocketSockObject *s0 = NULL, *s1 = NULL; 3728 SOCKET_T sv[2]; 3729 int family, type = SOCK_STREAM, proto = 0; 3730 PyObject *res = NULL; 3731 3732 #if defined(AF_UNIX) 3733 family = AF_UNIX; 3734 #else 3735 family = AF_INET; 3736 #endif 3737 if (!PyArg_ParseTuple(args, "|iii:socketpair", 3738 &family, &type, &proto)) 3739 return NULL; 3740 /* Create a pair of socket fds */ 3741 if (socketpair(family, type, proto, sv) < 0) 3742 return set_error(); 3743 s0 = new_sockobject(sv[0], family, type, proto); 3744 if (s0 == NULL) 3745 goto finally; 3746 s1 = new_sockobject(sv[1], family, type, proto); 3747 if (s1 == NULL) 3748 goto finally; 3749 res = PyTuple_Pack(2, s0, s1); 3750 3751 finally: 3752 if (res == NULL) { 3753 if (s0 == NULL) 3754 SOCKETCLOSE(sv[0]); 3755 if (s1 == NULL) 3756 SOCKETCLOSE(sv[1]); 3757 } 3758 Py_XDECREF(s0); 3759 Py_XDECREF(s1); 3760 return res; 3761 } 3762 3763 PyDoc_STRVAR(socketpair_doc, 3764 "socketpair([family[, type[, proto]]]) -> (socket object, socket object)\n\ 3765 \n\ 3766 Create a pair of socket objects from the sockets returned by the platform\n\ 3767 socketpair() function.\n\ 3768 The arguments are the same as for socket() except the default family is\n\ 3769 AF_UNIX if defined on the platform; otherwise, the default is AF_INET."); 3770 3771 #endif /* HAVE_SOCKETPAIR */ 3772 3773 3774 #ifndef NO_DUP 3775 /* Create a socket object from a numeric file description. 3776 Useful e.g. if stdin is a socket. 3777 Additional arguments as for socket(). */ 3778 3779 /*ARGSUSED*/ 3780 static PyObject * 3781 socket_fromfd(PyObject *self, PyObject *args) 3782 { 3783 PySocketSockObject *s; 3784 SOCKET_T fd; 3785 int family, type, proto = 0; 3786 if (!PyArg_ParseTuple(args, "iii|i:fromfd", 3787 &fd, &family, &type, &proto)) 3788 return NULL; 3789 /* Dup the fd so it and the socket can be closed independently */ 3790 fd = dup(fd); 3791 if (fd < 0) 3792 return set_error(); 3793 s = new_sockobject(fd, family, type, proto); 3794 return (PyObject *) s; 3795 } 3796 3797 PyDoc_STRVAR(fromfd_doc, 3798 "fromfd(fd, family, type[, proto]) -> socket object\n\ 3799 \n\ 3800 Create a socket object from a duplicate of the given\n\ 3801 file descriptor.\n\ 3802 The remaining arguments are the same as for socket()."); 3803 3804 #endif /* NO_DUP */ 3805 3806 3807 static PyObject * 3808 socket_ntohs(PyObject *self, PyObject *args) 3809 { 3810 int x1, x2; 3811 3812 if (!PyArg_ParseTuple(args, "i:ntohs", &x1)) { 3813 return NULL; 3814 } 3815 if (x1 < 0) { 3816 PyErr_SetString(PyExc_OverflowError, 3817 "can't convert negative number to unsigned long"); 3818 return NULL; 3819 } 3820 x2 = (unsigned int)ntohs((unsigned short)x1); 3821 return PyInt_FromLong(x2); 3822 } 3823 3824 PyDoc_STRVAR(ntohs_doc, 3825 "ntohs(integer) -> integer\n\ 3826 \n\ 3827 Convert a 16-bit integer from network to host byte order."); 3828 3829 3830 static PyObject * 3831 socket_ntohl(PyObject *self, PyObject *arg) 3832 { 3833 unsigned long x; 3834 3835 if (PyInt_Check(arg)) { 3836 x = PyInt_AS_LONG(arg); 3837 if (x == (unsigned long) -1 && PyErr_Occurred()) 3838 return NULL; 3839 if ((long)x < 0) { 3840 PyErr_SetString(PyExc_OverflowError, 3841 "can't convert negative number to unsigned long"); 3842 return NULL; 3843 } 3844 } 3845 else if (PyLong_Check(arg)) { 3846 x = PyLong_AsUnsignedLong(arg); 3847 if (x == (unsigned long) -1 && PyErr_Occurred()) 3848 return NULL; 3849 #if SIZEOF_LONG > 4 3850 { 3851 unsigned long y; 3852 /* only want the trailing 32 bits */ 3853 y = x & 0xFFFFFFFFUL; 3854 if (y ^ x) 3855 return PyErr_Format(PyExc_OverflowError, 3856 "long int larger than 32 bits"); 3857 x = y; 3858 } 3859 #endif 3860 } 3861 else 3862 return PyErr_Format(PyExc_TypeError, 3863 "expected int/long, %s found", 3864 Py_TYPE(arg)->tp_name); 3865 if (x == (unsigned long) -1 && PyErr_Occurred()) 3866 return NULL; 3867 return PyLong_FromUnsignedLong(ntohl(x)); 3868 } 3869 3870 PyDoc_STRVAR(ntohl_doc, 3871 "ntohl(integer) -> integer\n\ 3872 \n\ 3873 Convert a 32-bit integer from network to host byte order."); 3874 3875 3876 static PyObject * 3877 socket_htons(PyObject *self, PyObject *args) 3878 { 3879 int x1, x2; 3880 3881 if (!PyArg_ParseTuple(args, "i:htons", &x1)) { 3882 return NULL; 3883 } 3884 if (x1 < 0) { 3885 PyErr_SetString(PyExc_OverflowError, 3886 "can't convert negative number to unsigned long"); 3887 return NULL; 3888 } 3889 x2 = (unsigned int)htons((unsigned short)x1); 3890 return PyInt_FromLong(x2); 3891 } 3892 3893 PyDoc_STRVAR(htons_doc, 3894 "htons(integer) -> integer\n\ 3895 \n\ 3896 Convert a 16-bit integer from host to network byte order."); 3897 3898 3899 static PyObject * 3900 socket_htonl(PyObject *self, PyObject *arg) 3901 { 3902 unsigned long x; 3903 3904 if (PyInt_Check(arg)) { 3905 x = PyInt_AS_LONG(arg); 3906 if (x == (unsigned long) -1 && PyErr_Occurred()) 3907 return NULL; 3908 if ((long)x < 0) { 3909 PyErr_SetString(PyExc_OverflowError, 3910 "can't convert negative number to unsigned long"); 3911 return NULL; 3912 } 3913 } 3914 else if (PyLong_Check(arg)) { 3915 x = PyLong_AsUnsignedLong(arg); 3916 if (x == (unsigned long) -1 && PyErr_Occurred()) 3917 return NULL; 3918 #if SIZEOF_LONG > 4 3919 { 3920 unsigned long y; 3921 /* only want the trailing 32 bits */ 3922 y = x & 0xFFFFFFFFUL; 3923 if (y ^ x) 3924 return PyErr_Format(PyExc_OverflowError, 3925 "long int larger than 32 bits"); 3926 x = y; 3927 } 3928 #endif 3929 } 3930 else 3931 return PyErr_Format(PyExc_TypeError, 3932 "expected int/long, %s found", 3933 Py_TYPE(arg)->tp_name); 3934 return PyLong_FromUnsignedLong(htonl((unsigned long)x)); 3935 } 3936 3937 PyDoc_STRVAR(htonl_doc, 3938 "htonl(integer) -> integer\n\ 3939 \n\ 3940 Convert a 32-bit integer from host to network byte order."); 3941 3942 /* socket.inet_aton() and socket.inet_ntoa() functions. */ 3943 3944 PyDoc_STRVAR(inet_aton_doc, 3945 "inet_aton(string) -> packed 32-bit IP representation\n\ 3946 \n\ 3947 Convert an IP address in string format (123.45.67.89) to the 32-bit packed\n\ 3948 binary format used in low-level network functions."); 3949 3950 static PyObject* 3951 socket_inet_aton(PyObject *self, PyObject *args) 3952 { 3953 #ifndef INADDR_NONE 3954 #define INADDR_NONE (-1) 3955 #endif 3956 #ifdef HAVE_INET_ATON 3957 struct in_addr buf; 3958 #endif 3959 3960 #if !defined(HAVE_INET_ATON) || defined(USE_INET_ATON_WEAKLINK) 3961 #if (SIZEOF_INT != 4) 3962 #error "Not sure if in_addr_t exists and int is not 32-bits." 3963 #endif 3964 /* Have to use inet_addr() instead */ 3965 unsigned int packed_addr; 3966 #endif 3967 char *ip_addr; 3968 3969 if (!PyArg_ParseTuple(args, "s:inet_aton", &ip_addr)) 3970 return NULL; 3971 3972 3973 #ifdef HAVE_INET_ATON 3974 3975 #ifdef USE_INET_ATON_WEAKLINK 3976 if (inet_aton != NULL) { 3977 #endif 3978 if (inet_aton(ip_addr, &buf)) 3979 return PyString_FromStringAndSize((char *)(&buf), 3980 sizeof(buf)); 3981 3982 PyErr_SetString(socket_error, 3983 "illegal IP address string passed to inet_aton"); 3984 return NULL; 3985 3986 #ifdef USE_INET_ATON_WEAKLINK 3987 } else { 3988 #endif 3989 3990 #endif 3991 3992 #if !defined(HAVE_INET_ATON) || defined(USE_INET_ATON_WEAKLINK) 3993 3994 /* special-case this address as inet_addr might return INADDR_NONE 3995 * for this */ 3996 if (strcmp(ip_addr, "255.255.255.255") == 0) { 3997 packed_addr = 0xFFFFFFFF; 3998 } else { 3999 4000 packed_addr = inet_addr(ip_addr); 4001 4002 if (packed_addr == INADDR_NONE) { /* invalid address */ 4003 PyErr_SetString(socket_error, 4004 "illegal IP address string passed to inet_aton"); 4005 return NULL; 4006 } 4007 } 4008 return PyString_FromStringAndSize((char *) &packed_addr, 4009 sizeof(packed_addr)); 4010 4011 #ifdef USE_INET_ATON_WEAKLINK 4012 } 4013 #endif 4014 4015 #endif 4016 } 4017 4018 PyDoc_STRVAR(inet_ntoa_doc, 4019 "inet_ntoa(packed_ip) -> ip_address_string\n\ 4020 \n\ 4021 Convert an IP address from 32-bit packed binary format to string format"); 4022 4023 static PyObject* 4024 socket_inet_ntoa(PyObject *self, PyObject *args) 4025 { 4026 char *packed_str; 4027 int addr_len; 4028 struct in_addr packed_addr; 4029 4030 if (!PyArg_ParseTuple(args, "s#:inet_ntoa", &packed_str, &addr_len)) { 4031 return NULL; 4032 } 4033 4034 if (addr_len != sizeof(packed_addr)) { 4035 PyErr_SetString(socket_error, 4036 "packed IP wrong length for inet_ntoa"); 4037 return NULL; 4038 } 4039 4040 memcpy(&packed_addr, packed_str, addr_len); 4041 4042 return PyString_FromString(inet_ntoa(packed_addr)); 4043 } 4044 4045 #ifdef HAVE_INET_PTON 4046 4047 PyDoc_STRVAR(inet_pton_doc, 4048 "inet_pton(af, ip) -> packed IP address string\n\ 4049 \n\ 4050 Convert an IP address from string format to a packed string suitable\n\ 4051 for use with low-level network functions."); 4052 4053 static PyObject * 4054 socket_inet_pton(PyObject *self, PyObject *args) 4055 { 4056 int af; 4057 char* ip; 4058 int retval; 4059 #ifdef ENABLE_IPV6 4060 char packed[MAX(sizeof(struct in_addr), sizeof(struct in6_addr))]; 4061 #else 4062 char packed[sizeof(struct in_addr)]; 4063 #endif 4064 if (!PyArg_ParseTuple(args, "is:inet_pton", &af, &ip)) { 4065 return NULL; 4066 } 4067 4068 #if !defined(ENABLE_IPV6) && defined(AF_INET6) 4069 if(af == AF_INET6) { 4070 PyErr_SetString(socket_error, 4071 "can't use AF_INET6, IPv6 is disabled"); 4072 return NULL; 4073 } 4074 #endif 4075 4076 retval = inet_pton(af, ip, packed); 4077 if (retval < 0) { 4078 PyErr_SetFromErrno(socket_error); 4079 return NULL; 4080 } else if (retval == 0) { 4081 PyErr_SetString(socket_error, 4082 "illegal IP address string passed to inet_pton"); 4083 return NULL; 4084 } else if (af == AF_INET) { 4085 return PyString_FromStringAndSize(packed, 4086 sizeof(struct in_addr)); 4087 #ifdef ENABLE_IPV6 4088 } else if (af == AF_INET6) { 4089 return PyString_FromStringAndSize(packed, 4090 sizeof(struct in6_addr)); 4091 #endif 4092 } else { 4093 PyErr_SetString(socket_error, "unknown address family"); 4094 return NULL; 4095 } 4096 } 4097 4098 PyDoc_STRVAR(inet_ntop_doc, 4099 "inet_ntop(af, packed_ip) -> string formatted IP address\n\ 4100 \n\ 4101 Convert a packed IP address of the given family to string format."); 4102 4103 static PyObject * 4104 socket_inet_ntop(PyObject *self, PyObject *args) 4105 { 4106 int af; 4107 char* packed; 4108 int len; 4109 const char* retval; 4110 #ifdef ENABLE_IPV6 4111 char ip[MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN) + 1]; 4112 #else 4113 char ip[INET_ADDRSTRLEN + 1]; 4114 #endif 4115 4116 /* Guarantee NUL-termination for PyString_FromString() below */ 4117 memset((void *) &ip[0], '\0', sizeof(ip)); 4118 4119 if (!PyArg_ParseTuple(args, "is#:inet_ntop", &af, &packed, &len)) { 4120 return NULL; 4121 } 4122 4123 if (af == AF_INET) { 4124 if (len != sizeof(struct in_addr)) { 4125 PyErr_SetString(PyExc_ValueError, 4126 "invalid length of packed IP address string"); 4127 return NULL; 4128 } 4129 #ifdef ENABLE_IPV6 4130 } else if (af == AF_INET6) { 4131 if (len != sizeof(struct in6_addr)) { 4132 PyErr_SetString(PyExc_ValueError, 4133 "invalid length of packed IP address string"); 4134 return NULL; 4135 } 4136 #endif 4137 } else { 4138 PyErr_Format(PyExc_ValueError, 4139 "unknown address family %d", af); 4140 return NULL; 4141 } 4142 4143 retval = inet_ntop(af, packed, ip, sizeof(ip)); 4144 if (!retval) { 4145 PyErr_SetFromErrno(socket_error); 4146 return NULL; 4147 } else { 4148 return PyString_FromString(retval); 4149 } 4150 4151 /* NOTREACHED */ 4152 PyErr_SetString(PyExc_RuntimeError, "invalid handling of inet_ntop"); 4153 return NULL; 4154 } 4155 4156 #endif /* HAVE_INET_PTON */ 4157 4158 /* Python interface to getaddrinfo(host, port). */ 4159 4160 /*ARGSUSED*/ 4161 static PyObject * 4162 socket_getaddrinfo(PyObject *self, PyObject *args) 4163 { 4164 struct addrinfo hints, *res; 4165 struct addrinfo *res0 = NULL; 4166 PyObject *hobj = NULL; 4167 PyObject *pobj = (PyObject *)NULL; 4168 char pbuf[30]; 4169 char *hptr, *pptr; 4170 int family, socktype, protocol, flags; 4171 int error; 4172 PyObject *all = (PyObject *)NULL; 4173 PyObject *single = (PyObject *)NULL; 4174 PyObject *idna = NULL; 4175 4176 family = socktype = protocol = flags = 0; 4177 family = AF_UNSPEC; 4178 if (!PyArg_ParseTuple(args, "OO|iiii:getaddrinfo", 4179 &hobj, &pobj, &family, &socktype, 4180 &protocol, &flags)) { 4181 return NULL; 4182 } 4183 if (hobj == Py_None) { 4184 hptr = NULL; 4185 } else if (PyUnicode_Check(hobj)) { 4186 idna = PyUnicode_AsEncodedString(hobj, "idna", NULL); 4187 if (!idna) 4188 return NULL; 4189 hptr = PyString_AsString(idna); 4190 } else if (PyString_Check(hobj)) { 4191 hptr = PyString_AsString(hobj); 4192 } else { 4193 PyErr_SetString(PyExc_TypeError, 4194 "getaddrinfo() argument 1 must be string or None"); 4195 return NULL; 4196 } 4197 if (PyInt_Check(pobj) || PyLong_Check(pobj)) { 4198 long value = PyLong_AsLong(pobj); 4199 if (value == -1 && PyErr_Occurred()) 4200 return NULL; 4201 PyOS_snprintf(pbuf, sizeof(pbuf), "%ld", value); 4202 pptr = pbuf; 4203 } else if (PyString_Check(pobj)) { 4204 pptr = PyString_AsString(pobj); 4205 } else if (pobj == Py_None) { 4206 pptr = (char *)NULL; 4207 } else { 4208 PyErr_SetString(socket_error, 4209 "getaddrinfo() argument 2 must be integer or string"); 4210 goto err; 4211 } 4212 #if defined(__APPLE__) && defined(AI_NUMERICSERV) 4213 if ((flags & AI_NUMERICSERV) && (pptr == NULL || (pptr[0] == '0' && pptr[1] == 0))) { 4214 /* On OSX upto at least OSX 10.8 getaddrinfo crashes 4215 * if AI_NUMERICSERV is set and the servname is NULL or "0". 4216 * This workaround avoids a segfault in libsystem. 4217 */ 4218 pptr = "00"; 4219 } 4220 #endif 4221 memset(&hints, 0, sizeof(hints)); 4222 hints.ai_family = family; 4223 hints.ai_socktype = socktype; 4224 hints.ai_protocol = protocol; 4225 hints.ai_flags = flags; 4226 Py_BEGIN_ALLOW_THREADS 4227 ACQUIRE_GETADDRINFO_LOCK 4228 error = getaddrinfo(hptr, pptr, &hints, &res0); 4229 Py_END_ALLOW_THREADS 4230 RELEASE_GETADDRINFO_LOCK /* see comment in setipaddr() */ 4231 if (error) { 4232 set_gaierror(error); 4233 goto err; 4234 } 4235 4236 all = PyList_New(0); 4237 if (all == NULL) 4238 goto err; 4239 for (res = res0; res; res = res->ai_next) { 4240 PyObject *addr = 4241 makesockaddr(-1, res->ai_addr, res->ai_addrlen, protocol); 4242 if (addr == NULL) 4243 goto err; 4244 single = Py_BuildValue("iiisO", res->ai_family, 4245 res->ai_socktype, res->ai_protocol, 4246 res->ai_canonname ? res->ai_canonname : "", 4247 addr); 4248 Py_DECREF(addr); 4249 if (single == NULL) 4250 goto err; 4251 4252 if (PyList_Append(all, single)) 4253 goto err; 4254 Py_XDECREF(single); 4255 } 4256 Py_XDECREF(idna); 4257 if (res0) 4258 freeaddrinfo(res0); 4259 return all; 4260 err: 4261 Py_XDECREF(single); 4262 Py_XDECREF(all); 4263 Py_XDECREF(idna); 4264 if (res0) 4265 freeaddrinfo(res0); 4266 return (PyObject *)NULL; 4267 } 4268 4269 PyDoc_STRVAR(getaddrinfo_doc, 4270 "getaddrinfo(host, port [, family, socktype, proto, flags])\n\ 4271 -> list of (family, socktype, proto, canonname, sockaddr)\n\ 4272 \n\ 4273 Resolve host and port into addrinfo struct."); 4274 4275 /* Python interface to getnameinfo(sa, flags). */ 4276 4277 /*ARGSUSED*/ 4278 static PyObject * 4279 socket_getnameinfo(PyObject *self, PyObject *args) 4280 { 4281 PyObject *sa = (PyObject *)NULL; 4282 int flags; 4283 char *hostp; 4284 int port; 4285 unsigned int flowinfo, scope_id; 4286 char hbuf[NI_MAXHOST], pbuf[NI_MAXSERV]; 4287 struct addrinfo hints, *res = NULL; 4288 int error; 4289 PyObject *ret = (PyObject *)NULL; 4290 4291 flags = flowinfo = scope_id = 0; 4292 if (!PyArg_ParseTuple(args, "Oi:getnameinfo", &sa, &flags)) 4293 return NULL; 4294 if (!PyTuple_Check(sa)) { 4295 PyErr_SetString(PyExc_TypeError, 4296 "getnameinfo() argument 1 must be a tuple"); 4297 return NULL; 4298 } 4299 if (!PyArg_ParseTuple(sa, "si|II", 4300 &hostp, &port, &flowinfo, &scope_id)) 4301 return NULL; 4302 if (flowinfo > 0xfffff) { 4303 PyErr_SetString(PyExc_OverflowError, 4304 "getsockaddrarg: flowinfo must be 0-1048575."); 4305 return NULL; 4306 } 4307 PyOS_snprintf(pbuf, sizeof(pbuf), "%d", port); 4308 memset(&hints, 0, sizeof(hints)); 4309 hints.ai_family = AF_UNSPEC; 4310 hints.ai_socktype = SOCK_DGRAM; /* make numeric port happy */ 4311 Py_BEGIN_ALLOW_THREADS 4312 ACQUIRE_GETADDRINFO_LOCK 4313 error = getaddrinfo(hostp, pbuf, &hints, &res); 4314 Py_END_ALLOW_THREADS 4315 RELEASE_GETADDRINFO_LOCK /* see comment in setipaddr() */ 4316 if (error) { 4317 set_gaierror(error); 4318 goto fail; 4319 } 4320 if (res->ai_next) { 4321 PyErr_SetString(socket_error, 4322 "sockaddr resolved to multiple addresses"); 4323 goto fail; 4324 } 4325 switch (res->ai_family) { 4326 case AF_INET: 4327 { 4328 if (PyTuple_GET_SIZE(sa) != 2) { 4329 PyErr_SetString(socket_error, 4330 "IPv4 sockaddr must be 2 tuple"); 4331 goto fail; 4332 } 4333 break; 4334 } 4335 #ifdef ENABLE_IPV6 4336 case AF_INET6: 4337 { 4338 struct sockaddr_in6 *sin6; 4339 sin6 = (struct sockaddr_in6 *)res->ai_addr; 4340 sin6->sin6_flowinfo = htonl(flowinfo); 4341 sin6->sin6_scope_id = scope_id; 4342 break; 4343 } 4344 #endif 4345 } 4346 error = getnameinfo(res->ai_addr, res->ai_addrlen, 4347 hbuf, sizeof(hbuf), pbuf, sizeof(pbuf), flags); 4348 if (error) { 4349 set_gaierror(error); 4350 goto fail; 4351 } 4352 ret = Py_BuildValue("ss", hbuf, pbuf); 4353 4354 fail: 4355 if (res) 4356 freeaddrinfo(res); 4357 return ret; 4358 } 4359 4360 PyDoc_STRVAR(getnameinfo_doc, 4361 "getnameinfo(sockaddr, flags) --> (host, port)\n\ 4362 \n\ 4363 Get host and port for a sockaddr."); 4364 4365 4366 /* Python API to getting and setting the default timeout value. */ 4367 4368 static PyObject * 4369 socket_getdefaulttimeout(PyObject *self) 4370 { 4371 if (defaulttimeout < 0.0) { 4372 Py_INCREF(Py_None); 4373 return Py_None; 4374 } 4375 else 4376 return PyFloat_FromDouble(defaulttimeout); 4377 } 4378 4379 PyDoc_STRVAR(getdefaulttimeout_doc, 4380 "getdefaulttimeout() -> timeout\n\ 4381 \n\ 4382 Returns the default timeout in seconds (float) for new socket objects.\n\ 4383 A value of None indicates that new socket objects have no timeout.\n\ 4384 When the socket module is first imported, the default is None."); 4385 4386 static PyObject * 4387 socket_setdefaulttimeout(PyObject *self, PyObject *arg) 4388 { 4389 double timeout; 4390 4391 if (arg == Py_None) 4392 timeout = -1.0; 4393 else { 4394 timeout = PyFloat_AsDouble(arg); 4395 if (timeout < 0.0) { 4396 if (!PyErr_Occurred()) 4397 PyErr_SetString(PyExc_ValueError, 4398 "Timeout value out of range"); 4399 return NULL; 4400 } 4401 } 4402 4403 defaulttimeout = timeout; 4404 4405 Py_INCREF(Py_None); 4406 return Py_None; 4407 } 4408 4409 PyDoc_STRVAR(setdefaulttimeout_doc, 4410 "setdefaulttimeout(timeout)\n\ 4411 \n\ 4412 Set the default timeout in seconds (float) for new socket objects.\n\ 4413 A value of None indicates that new socket objects have no timeout.\n\ 4414 When the socket module is first imported, the default is None."); 4415 4416 4417 /* List of functions exported by this module. */ 4418 4419 static PyMethodDef socket_methods[] = { 4420 {"gethostbyname", socket_gethostbyname, 4421 METH_VARARGS, gethostbyname_doc}, 4422 {"gethostbyname_ex", socket_gethostbyname_ex, 4423 METH_VARARGS, ghbn_ex_doc}, 4424 {"gethostbyaddr", socket_gethostbyaddr, 4425 METH_VARARGS, gethostbyaddr_doc}, 4426 {"gethostname", socket_gethostname, 4427 METH_NOARGS, gethostname_doc}, 4428 {"getservbyname", socket_getservbyname, 4429 METH_VARARGS, getservbyname_doc}, 4430 {"getservbyport", socket_getservbyport, 4431 METH_VARARGS, getservbyport_doc}, 4432 {"getprotobyname", socket_getprotobyname, 4433 METH_VARARGS, getprotobyname_doc}, 4434 #ifndef NO_DUP 4435 {"fromfd", socket_fromfd, 4436 METH_VARARGS, fromfd_doc}, 4437 #endif 4438 #ifdef HAVE_SOCKETPAIR 4439 {"socketpair", socket_socketpair, 4440 METH_VARARGS, socketpair_doc}, 4441 #endif 4442 {"ntohs", socket_ntohs, 4443 METH_VARARGS, ntohs_doc}, 4444 {"ntohl", socket_ntohl, 4445 METH_O, ntohl_doc}, 4446 {"htons", socket_htons, 4447 METH_VARARGS, htons_doc}, 4448 {"htonl", socket_htonl, 4449 METH_O, htonl_doc}, 4450 {"inet_aton", socket_inet_aton, 4451 METH_VARARGS, inet_aton_doc}, 4452 {"inet_ntoa", socket_inet_ntoa, 4453 METH_VARARGS, inet_ntoa_doc}, 4454 #ifdef HAVE_INET_PTON 4455 {"inet_pton", socket_inet_pton, 4456 METH_VARARGS, inet_pton_doc}, 4457 {"inet_ntop", socket_inet_ntop, 4458 METH_VARARGS, inet_ntop_doc}, 4459 #endif 4460 {"getaddrinfo", socket_getaddrinfo, 4461 METH_VARARGS, getaddrinfo_doc}, 4462 {"getnameinfo", socket_getnameinfo, 4463 METH_VARARGS, getnameinfo_doc}, 4464 {"getdefaulttimeout", (PyCFunction)socket_getdefaulttimeout, 4465 METH_NOARGS, getdefaulttimeout_doc}, 4466 {"setdefaulttimeout", socket_setdefaulttimeout, 4467 METH_O, setdefaulttimeout_doc}, 4468 {NULL, NULL} /* Sentinel */ 4469 }; 4470 4471 4472 #ifdef RISCOS 4473 #define OS_INIT_DEFINED 4474 4475 static int 4476 os_init(void) 4477 { 4478 _kernel_swi_regs r; 4479 4480 r.r[0] = 0; 4481 _kernel_swi(0x43380, &r, &r); 4482 taskwindow = r.r[0]; 4483 4484 return 1; 4485 } 4486 4487 #endif /* RISCOS */ 4488 4489 4490 #ifdef MS_WINDOWS 4491 #define OS_INIT_DEFINED 4492 4493 /* Additional initialization and cleanup for Windows */ 4494 4495 static void 4496 os_cleanup(void) 4497 { 4498 WSACleanup(); 4499 } 4500 4501 static int 4502 os_init(void) 4503 { 4504 WSADATA WSAData; 4505 int ret; 4506 char buf[100]; 4507 ret = WSAStartup(0x0101, &WSAData); 4508 switch (ret) { 4509 case 0: /* No error */ 4510 Py_AtExit(os_cleanup); 4511 return 1; /* Success */ 4512 case WSASYSNOTREADY: 4513 PyErr_SetString(PyExc_ImportError, 4514 "WSAStartup failed: network not ready"); 4515 break; 4516 case WSAVERNOTSUPPORTED: 4517 case WSAEINVAL: 4518 PyErr_SetString( 4519 PyExc_ImportError, 4520 "WSAStartup failed: requested version not supported"); 4521 break; 4522 default: 4523 PyOS_snprintf(buf, sizeof(buf), 4524 "WSAStartup failed: error code %d", ret); 4525 PyErr_SetString(PyExc_ImportError, buf); 4526 break; 4527 } 4528 return 0; /* Failure */ 4529 } 4530 4531 #endif /* MS_WINDOWS */ 4532 4533 4534 #ifdef PYOS_OS2 4535 #define OS_INIT_DEFINED 4536 4537 /* Additional initialization for OS/2 */ 4538 4539 static int 4540 os_init(void) 4541 { 4542 #ifndef PYCC_GCC 4543 char reason[64]; 4544 int rc = sock_init(); 4545 4546 if (rc == 0) { 4547 return 1; /* Success */ 4548 } 4549 4550 PyOS_snprintf(reason, sizeof(reason), 4551 "OS/2 TCP/IP Error# %d", sock_errno()); 4552 PyErr_SetString(PyExc_ImportError, reason); 4553 4554 return 0; /* Failure */ 4555 #else 4556 /* No need to initialize sockets with GCC/EMX */ 4557 return 1; /* Success */ 4558 #endif 4559 } 4560 4561 #endif /* PYOS_OS2 */ 4562 4563 4564 #ifndef OS_INIT_DEFINED 4565 static int 4566 os_init(void) 4567 { 4568 return 1; /* Success */ 4569 } 4570 #endif 4571 4572 4573 /* C API table - always add new things to the end for binary 4574 compatibility. */ 4575 static 4576 PySocketModule_APIObject PySocketModuleAPI = 4577 { 4578 &sock_type, 4579 NULL 4580 }; 4581 4582 4583 /* Initialize the _socket module. 4584 4585 This module is actually called "_socket", and there's a wrapper 4586 "socket.py" which implements some additional functionality. On some 4587 platforms (e.g. Windows and OS/2), socket.py also implements a 4588 wrapper for the socket type that provides missing functionality such 4589 as makefile(), dup() and fromfd(). The import of "_socket" may fail 4590 with an ImportError exception if os-specific initialization fails. 4591 On Windows, this does WINSOCK initialization. When WINSOCK is 4592 initialized successfully, a call to WSACleanup() is scheduled to be 4593 made at exit time. 4594 */ 4595 4596 PyDoc_STRVAR(socket_doc, 4597 "Implementation module for socket operations.\n\ 4598 \n\ 4599 See the socket module for documentation."); 4600 4601 PyMODINIT_FUNC 4602 init_socket(void) 4603 { 4604 PyObject *m, *has_ipv6; 4605 4606 if (!os_init()) 4607 return; 4608 4609 Py_TYPE(&sock_type) = &PyType_Type; 4610 m = Py_InitModule3(PySocket_MODULE_NAME, 4611 socket_methods, 4612 socket_doc); 4613 if (m == NULL) 4614 return; 4615 4616 socket_error = PyErr_NewException("socket.error", 4617 PyExc_IOError, NULL); 4618 if (socket_error == NULL) 4619 return; 4620 PySocketModuleAPI.error = socket_error; 4621 Py_INCREF(socket_error); 4622 PyModule_AddObject(m, "error", socket_error); 4623 socket_herror = PyErr_NewException("socket.herror", 4624 socket_error, NULL); 4625 if (socket_herror == NULL) 4626 return; 4627 Py_INCREF(socket_herror); 4628 PyModule_AddObject(m, "herror", socket_herror); 4629 socket_gaierror = PyErr_NewException("socket.gaierror", socket_error, 4630 NULL); 4631 if (socket_gaierror == NULL) 4632 return; 4633 Py_INCREF(socket_gaierror); 4634 PyModule_AddObject(m, "gaierror", socket_gaierror); 4635 socket_timeout = PyErr_NewException("socket.timeout", 4636 socket_error, NULL); 4637 if (socket_timeout == NULL) 4638 return; 4639 Py_INCREF(socket_timeout); 4640 PyModule_AddObject(m, "timeout", socket_timeout); 4641 Py_INCREF((PyObject *)&sock_type); 4642 if (PyModule_AddObject(m, "SocketType", 4643 (PyObject *)&sock_type) != 0) 4644 return; 4645 Py_INCREF((PyObject *)&sock_type); 4646 if (PyModule_AddObject(m, "socket", 4647 (PyObject *)&sock_type) != 0) 4648 return; 4649 4650 #ifdef ENABLE_IPV6 4651 has_ipv6 = Py_True; 4652 #else 4653 has_ipv6 = Py_False; 4654 #endif 4655 Py_INCREF(has_ipv6); 4656 PyModule_AddObject(m, "has_ipv6", has_ipv6); 4657 4658 /* Export C API */ 4659 if (PyModule_AddObject(m, PySocket_CAPI_NAME, 4660 PyCapsule_New(&PySocketModuleAPI, PySocket_CAPSULE_NAME, NULL) 4661 ) != 0) 4662 return; 4663 4664 /* Address families (we only support AF_INET and AF_UNIX) */ 4665 #ifdef AF_UNSPEC 4666 PyModule_AddIntConstant(m, "AF_UNSPEC", AF_UNSPEC); 4667 #endif 4668 PyModule_AddIntConstant(m, "AF_INET", AF_INET); 4669 #ifdef AF_INET6 4670 PyModule_AddIntConstant(m, "AF_INET6", AF_INET6); 4671 #endif /* AF_INET6 */ 4672 #if defined(AF_UNIX) 4673 PyModule_AddIntConstant(m, "AF_UNIX", AF_UNIX); 4674 #endif /* AF_UNIX */ 4675 #ifdef AF_AX25 4676 /* Amateur Radio AX.25 */ 4677 PyModule_AddIntConstant(m, "AF_AX25", AF_AX25); 4678 #endif 4679 #ifdef AF_IPX 4680 PyModule_AddIntConstant(m, "AF_IPX", AF_IPX); /* Novell IPX */ 4681 #endif 4682 #ifdef AF_APPLETALK 4683 /* Appletalk DDP */ 4684 PyModule_AddIntConstant(m, "AF_APPLETALK", AF_APPLETALK); 4685 #endif 4686 #ifdef AF_NETROM 4687 /* Amateur radio NetROM */ 4688 PyModule_AddIntConstant(m, "AF_NETROM", AF_NETROM); 4689 #endif 4690 #ifdef AF_BRIDGE 4691 /* Multiprotocol bridge */ 4692 PyModule_AddIntConstant(m, "AF_BRIDGE", AF_BRIDGE); 4693 #endif 4694 #ifdef AF_ATMPVC 4695 /* ATM PVCs */ 4696 PyModule_AddIntConstant(m, "AF_ATMPVC", AF_ATMPVC); 4697 #endif 4698 #ifdef AF_AAL5 4699 /* Reserved for Werner's ATM */ 4700 PyModule_AddIntConstant(m, "AF_AAL5", AF_AAL5); 4701 #endif 4702 #ifdef AF_X25 4703 /* Reserved for X.25 project */ 4704 PyModule_AddIntConstant(m, "AF_X25", AF_X25); 4705 #endif 4706 #ifdef AF_INET6 4707 PyModule_AddIntConstant(m, "AF_INET6", AF_INET6); /* IP version 6 */ 4708 #endif 4709 #ifdef AF_ROSE 4710 /* Amateur Radio X.25 PLP */ 4711 PyModule_AddIntConstant(m, "AF_ROSE", AF_ROSE); 4712 #endif 4713 #ifdef AF_DECnet 4714 /* Reserved for DECnet project */ 4715 PyModule_AddIntConstant(m, "AF_DECnet", AF_DECnet); 4716 #endif 4717 #ifdef AF_NETBEUI 4718 /* Reserved for 802.2LLC project */ 4719 PyModule_AddIntConstant(m, "AF_NETBEUI", AF_NETBEUI); 4720 #endif 4721 #ifdef AF_SECURITY 4722 /* Security callback pseudo AF */ 4723 PyModule_AddIntConstant(m, "AF_SECURITY", AF_SECURITY); 4724 #endif 4725 #ifdef AF_KEY 4726 /* PF_KEY key management API */ 4727 PyModule_AddIntConstant(m, "AF_KEY", AF_KEY); 4728 #endif 4729 #ifdef AF_NETLINK 4730 /* */ 4731 PyModule_AddIntConstant(m, "AF_NETLINK", AF_NETLINK); 4732 PyModule_AddIntConstant(m, "NETLINK_ROUTE", NETLINK_ROUTE); 4733 #ifdef NETLINK_SKIP 4734 PyModule_AddIntConstant(m, "NETLINK_SKIP", NETLINK_SKIP); 4735 #endif 4736 #ifdef NETLINK_W1 4737 PyModule_AddIntConstant(m, "NETLINK_W1", NETLINK_W1); 4738 #endif 4739 PyModule_AddIntConstant(m, "NETLINK_USERSOCK", NETLINK_USERSOCK); 4740 PyModule_AddIntConstant(m, "NETLINK_FIREWALL", NETLINK_FIREWALL); 4741 #ifdef NETLINK_TCPDIAG 4742 PyModule_AddIntConstant(m, "NETLINK_TCPDIAG", NETLINK_TCPDIAG); 4743 #endif 4744 #ifdef NETLINK_NFLOG 4745 PyModule_AddIntConstant(m, "NETLINK_NFLOG", NETLINK_NFLOG); 4746 #endif 4747 #ifdef NETLINK_XFRM 4748 PyModule_AddIntConstant(m, "NETLINK_XFRM", NETLINK_XFRM); 4749 #endif 4750 #ifdef NETLINK_ARPD 4751 PyModule_AddIntConstant(m, "NETLINK_ARPD", NETLINK_ARPD); 4752 #endif 4753 #ifdef NETLINK_ROUTE6 4754 PyModule_AddIntConstant(m, "NETLINK_ROUTE6", NETLINK_ROUTE6); 4755 #endif 4756 PyModule_AddIntConstant(m, "NETLINK_IP6_FW", NETLINK_IP6_FW); 4757 #ifdef NETLINK_DNRTMSG 4758 PyModule_AddIntConstant(m, "NETLINK_DNRTMSG", NETLINK_DNRTMSG); 4759 #endif 4760 #ifdef NETLINK_TAPBASE 4761 PyModule_AddIntConstant(m, "NETLINK_TAPBASE", NETLINK_TAPBASE); 4762 #endif 4763 #endif /* AF_NETLINK */ 4764 #ifdef AF_ROUTE 4765 /* Alias to emulate 4.4BSD */ 4766 PyModule_AddIntConstant(m, "AF_ROUTE", AF_ROUTE); 4767 #endif 4768 #ifdef AF_ASH 4769 /* Ash */ 4770 PyModule_AddIntConstant(m, "AF_ASH", AF_ASH); 4771 #endif 4772 #ifdef AF_ECONET 4773 /* Acorn Econet */ 4774 PyModule_AddIntConstant(m, "AF_ECONET", AF_ECONET); 4775 #endif 4776 #ifdef AF_ATMSVC 4777 /* ATM SVCs */ 4778 PyModule_AddIntConstant(m, "AF_ATMSVC", AF_ATMSVC); 4779 #endif 4780 #ifdef AF_SNA 4781 /* Linux SNA Project (nutters!) */ 4782 PyModule_AddIntConstant(m, "AF_SNA", AF_SNA); 4783 #endif 4784 #ifdef AF_IRDA 4785 /* IRDA sockets */ 4786 PyModule_AddIntConstant(m, "AF_IRDA", AF_IRDA); 4787 #endif 4788 #ifdef AF_PPPOX 4789 /* PPPoX sockets */ 4790 PyModule_AddIntConstant(m, "AF_PPPOX", AF_PPPOX); 4791 #endif 4792 #ifdef AF_WANPIPE 4793 /* Wanpipe API Sockets */ 4794 PyModule_AddIntConstant(m, "AF_WANPIPE", AF_WANPIPE); 4795 #endif 4796 #ifdef AF_LLC 4797 /* Linux LLC */ 4798 PyModule_AddIntConstant(m, "AF_LLC", AF_LLC); 4799 #endif 4800 4801 #ifdef USE_BLUETOOTH 4802 PyModule_AddIntConstant(m, "AF_BLUETOOTH", AF_BLUETOOTH); 4803 PyModule_AddIntConstant(m, "BTPROTO_L2CAP", BTPROTO_L2CAP); 4804 PyModule_AddIntConstant(m, "BTPROTO_HCI", BTPROTO_HCI); 4805 PyModule_AddIntConstant(m, "SOL_HCI", SOL_HCI); 4806 #if !defined(__NetBSD__) && !defined(__DragonFly__) 4807 PyModule_AddIntConstant(m, "HCI_FILTER", HCI_FILTER); 4808 #endif 4809 #if !defined(__FreeBSD__) 4810 #if !defined(__NetBSD__) && !defined(__DragonFly__) 4811 PyModule_AddIntConstant(m, "HCI_TIME_STAMP", HCI_TIME_STAMP); 4812 #endif 4813 PyModule_AddIntConstant(m, "HCI_DATA_DIR", HCI_DATA_DIR); 4814 PyModule_AddIntConstant(m, "BTPROTO_SCO", BTPROTO_SCO); 4815 #endif 4816 PyModule_AddIntConstant(m, "BTPROTO_RFCOMM", BTPROTO_RFCOMM); 4817 PyModule_AddStringConstant(m, "BDADDR_ANY", "00:00:00:00:00:00"); 4818 PyModule_AddStringConstant(m, "BDADDR_LOCAL", "00:00:00:FF:FF:FF"); 4819 #endif 4820 4821 #ifdef AF_PACKET 4822 PyModule_AddIntMacro(m, AF_PACKET); 4823 #endif 4824 #ifdef PF_PACKET 4825 PyModule_AddIntMacro(m, PF_PACKET); 4826 #endif 4827 #ifdef PACKET_HOST 4828 PyModule_AddIntMacro(m, PACKET_HOST); 4829 #endif 4830 #ifdef PACKET_BROADCAST 4831 PyModule_AddIntMacro(m, PACKET_BROADCAST); 4832 #endif 4833 #ifdef PACKET_MULTICAST 4834 PyModule_AddIntMacro(m, PACKET_MULTICAST); 4835 #endif 4836 #ifdef PACKET_OTHERHOST 4837 PyModule_AddIntMacro(m, PACKET_OTHERHOST); 4838 #endif 4839 #ifdef PACKET_OUTGOING 4840 PyModule_AddIntMacro(m, PACKET_OUTGOING); 4841 #endif 4842 #ifdef PACKET_LOOPBACK 4843 PyModule_AddIntMacro(m, PACKET_LOOPBACK); 4844 #endif 4845 #ifdef PACKET_FASTROUTE 4846 PyModule_AddIntMacro(m, PACKET_FASTROUTE); 4847 #endif 4848 4849 #ifdef HAVE_LINUX_TIPC_H 4850 PyModule_AddIntConstant(m, "AF_TIPC", AF_TIPC); 4851 4852 /* for addresses */ 4853 PyModule_AddIntConstant(m, "TIPC_ADDR_NAMESEQ", TIPC_ADDR_NAMESEQ); 4854 PyModule_AddIntConstant(m, "TIPC_ADDR_NAME", TIPC_ADDR_NAME); 4855 PyModule_AddIntConstant(m, "TIPC_ADDR_ID", TIPC_ADDR_ID); 4856 4857 PyModule_AddIntConstant(m, "TIPC_ZONE_SCOPE", TIPC_ZONE_SCOPE); 4858 PyModule_AddIntConstant(m, "TIPC_CLUSTER_SCOPE", TIPC_CLUSTER_SCOPE); 4859 PyModule_AddIntConstant(m, "TIPC_NODE_SCOPE", TIPC_NODE_SCOPE); 4860 4861 /* for setsockopt() */ 4862 PyModule_AddIntConstant(m, "SOL_TIPC", SOL_TIPC); 4863 PyModule_AddIntConstant(m, "TIPC_IMPORTANCE", TIPC_IMPORTANCE); 4864 PyModule_AddIntConstant(m, "TIPC_SRC_DROPPABLE", TIPC_SRC_DROPPABLE); 4865 PyModule_AddIntConstant(m, "TIPC_DEST_DROPPABLE", 4866 TIPC_DEST_DROPPABLE); 4867 PyModule_AddIntConstant(m, "TIPC_CONN_TIMEOUT", TIPC_CONN_TIMEOUT); 4868 4869 PyModule_AddIntConstant(m, "TIPC_LOW_IMPORTANCE", 4870 TIPC_LOW_IMPORTANCE); 4871 PyModule_AddIntConstant(m, "TIPC_MEDIUM_IMPORTANCE", 4872 TIPC_MEDIUM_IMPORTANCE); 4873 PyModule_AddIntConstant(m, "TIPC_HIGH_IMPORTANCE", 4874 TIPC_HIGH_IMPORTANCE); 4875 PyModule_AddIntConstant(m, "TIPC_CRITICAL_IMPORTANCE", 4876 TIPC_CRITICAL_IMPORTANCE); 4877 4878 /* for subscriptions */ 4879 PyModule_AddIntConstant(m, "TIPC_SUB_PORTS", TIPC_SUB_PORTS); 4880 PyModule_AddIntConstant(m, "TIPC_SUB_SERVICE", TIPC_SUB_SERVICE); 4881 #ifdef TIPC_SUB_CANCEL 4882 /* doesn't seem to be available everywhere */ 4883 PyModule_AddIntConstant(m, "TIPC_SUB_CANCEL", TIPC_SUB_CANCEL); 4884 #endif 4885 PyModule_AddIntConstant(m, "TIPC_WAIT_FOREVER", TIPC_WAIT_FOREVER); 4886 PyModule_AddIntConstant(m, "TIPC_PUBLISHED", TIPC_PUBLISHED); 4887 PyModule_AddIntConstant(m, "TIPC_WITHDRAWN", TIPC_WITHDRAWN); 4888 PyModule_AddIntConstant(m, "TIPC_SUBSCR_TIMEOUT", TIPC_SUBSCR_TIMEOUT); 4889 PyModule_AddIntConstant(m, "TIPC_CFG_SRV", TIPC_CFG_SRV); 4890 PyModule_AddIntConstant(m, "TIPC_TOP_SRV", TIPC_TOP_SRV); 4891 #endif 4892 4893 /* Socket types */ 4894 PyModule_AddIntConstant(m, "SOCK_STREAM", SOCK_STREAM); 4895 PyModule_AddIntConstant(m, "SOCK_DGRAM", SOCK_DGRAM); 4896 #ifndef __BEOS__ 4897 /* We have incomplete socket support. */ 4898 PyModule_AddIntConstant(m, "SOCK_RAW", SOCK_RAW); 4899 PyModule_AddIntConstant(m, "SOCK_SEQPACKET", SOCK_SEQPACKET); 4900 #if defined(SOCK_RDM) 4901 PyModule_AddIntConstant(m, "SOCK_RDM", SOCK_RDM); 4902 #endif 4903 #endif 4904 4905 #ifdef SO_DEBUG 4906 PyModule_AddIntConstant(m, "SO_DEBUG", SO_DEBUG); 4907 #endif 4908 #ifdef SO_ACCEPTCONN 4909 PyModule_AddIntConstant(m, "SO_ACCEPTCONN", SO_ACCEPTCONN); 4910 #endif 4911 #ifdef SO_REUSEADDR 4912 PyModule_AddIntConstant(m, "SO_REUSEADDR", SO_REUSEADDR); 4913 #endif 4914 #ifdef SO_EXCLUSIVEADDRUSE 4915 PyModule_AddIntConstant(m, "SO_EXCLUSIVEADDRUSE", SO_EXCLUSIVEADDRUSE); 4916 #endif 4917 4918 #ifdef SO_KEEPALIVE 4919 PyModule_AddIntConstant(m, "SO_KEEPALIVE", SO_KEEPALIVE); 4920 #endif 4921 #ifdef SO_DONTROUTE 4922 PyModule_AddIntConstant(m, "SO_DONTROUTE", SO_DONTROUTE); 4923 #endif 4924 #ifdef SO_BROADCAST 4925 PyModule_AddIntConstant(m, "SO_BROADCAST", SO_BROADCAST); 4926 #endif 4927 #ifdef SO_USELOOPBACK 4928 PyModule_AddIntConstant(m, "SO_USELOOPBACK", SO_USELOOPBACK); 4929 #endif 4930 #ifdef SO_LINGER 4931 PyModule_AddIntConstant(m, "SO_LINGER", SO_LINGER); 4932 #endif 4933 #ifdef SO_OOBINLINE 4934 PyModule_AddIntConstant(m, "SO_OOBINLINE", SO_OOBINLINE); 4935 #endif 4936 #ifdef SO_REUSEPORT 4937 PyModule_AddIntConstant(m, "SO_REUSEPORT", SO_REUSEPORT); 4938 #endif 4939 #ifdef SO_SNDBUF 4940 PyModule_AddIntConstant(m, "SO_SNDBUF", SO_SNDBUF); 4941 #endif 4942 #ifdef SO_RCVBUF 4943 PyModule_AddIntConstant(m, "SO_RCVBUF", SO_RCVBUF); 4944 #endif 4945 #ifdef SO_SNDLOWAT 4946 PyModule_AddIntConstant(m, "SO_SNDLOWAT", SO_SNDLOWAT); 4947 #endif 4948 #ifdef SO_RCVLOWAT 4949 PyModule_AddIntConstant(m, "SO_RCVLOWAT", SO_RCVLOWAT); 4950 #endif 4951 #ifdef SO_SNDTIMEO 4952 PyModule_AddIntConstant(m, "SO_SNDTIMEO", SO_SNDTIMEO); 4953 #endif 4954 #ifdef SO_RCVTIMEO 4955 PyModule_AddIntConstant(m, "SO_RCVTIMEO", SO_RCVTIMEO); 4956 #endif 4957 #ifdef SO_ERROR 4958 PyModule_AddIntConstant(m, "SO_ERROR", SO_ERROR); 4959 #endif 4960 #ifdef SO_TYPE 4961 PyModule_AddIntConstant(m, "SO_TYPE", SO_TYPE); 4962 #endif 4963 #ifdef SO_SETFIB 4964 PyModule_AddIntConstant(m, "SO_SETFIB", SO_SETFIB); 4965 #endif 4966 4967 /* Maximum number of connections for "listen" */ 4968 #ifdef SOMAXCONN 4969 PyModule_AddIntConstant(m, "SOMAXCONN", SOMAXCONN); 4970 #else 4971 PyModule_AddIntConstant(m, "SOMAXCONN", 5); /* Common value */ 4972 #endif 4973 4974 /* Flags for send, recv */ 4975 #ifdef MSG_OOB 4976 PyModule_AddIntConstant(m, "MSG_OOB", MSG_OOB); 4977 #endif 4978 #ifdef MSG_PEEK 4979 PyModule_AddIntConstant(m, "MSG_PEEK", MSG_PEEK); 4980 #endif 4981 #ifdef MSG_DONTROUTE 4982 PyModule_AddIntConstant(m, "MSG_DONTROUTE", MSG_DONTROUTE); 4983 #endif 4984 #ifdef MSG_DONTWAIT 4985 PyModule_AddIntConstant(m, "MSG_DONTWAIT", MSG_DONTWAIT); 4986 #endif 4987 #ifdef MSG_EOR 4988 PyModule_AddIntConstant(m, "MSG_EOR", MSG_EOR); 4989 #endif 4990 #ifdef MSG_TRUNC 4991 PyModule_AddIntConstant(m, "MSG_TRUNC", MSG_TRUNC); 4992 #endif 4993 #ifdef MSG_CTRUNC 4994 PyModule_AddIntConstant(m, "MSG_CTRUNC", MSG_CTRUNC); 4995 #endif 4996 #ifdef MSG_WAITALL 4997 PyModule_AddIntConstant(m, "MSG_WAITALL", MSG_WAITALL); 4998 #endif 4999 #ifdef MSG_BTAG 5000 PyModule_AddIntConstant(m, "MSG_BTAG", MSG_BTAG); 5001 #endif 5002 #ifdef MSG_ETAG 5003 PyModule_AddIntConstant(m, "MSG_ETAG", MSG_ETAG); 5004 #endif 5005 5006 /* Protocol level and numbers, usable for [gs]etsockopt */ 5007 #ifdef SOL_SOCKET 5008 PyModule_AddIntConstant(m, "SOL_SOCKET", SOL_SOCKET); 5009 #endif 5010 #ifdef SOL_IP 5011 PyModule_AddIntConstant(m, "SOL_IP", SOL_IP); 5012 #else 5013 PyModule_AddIntConstant(m, "SOL_IP", 0); 5014 #endif 5015 #ifdef SOL_IPX 5016 PyModule_AddIntConstant(m, "SOL_IPX", SOL_IPX); 5017 #endif 5018 #ifdef SOL_AX25 5019 PyModule_AddIntConstant(m, "SOL_AX25", SOL_AX25); 5020 #endif 5021 #ifdef SOL_ATALK 5022 PyModule_AddIntConstant(m, "SOL_ATALK", SOL_ATALK); 5023 #endif 5024 #ifdef SOL_NETROM 5025 PyModule_AddIntConstant(m, "SOL_NETROM", SOL_NETROM); 5026 #endif 5027 #ifdef SOL_ROSE 5028 PyModule_AddIntConstant(m, "SOL_ROSE", SOL_ROSE); 5029 #endif 5030 #ifdef SOL_TCP 5031 PyModule_AddIntConstant(m, "SOL_TCP", SOL_TCP); 5032 #else 5033 PyModule_AddIntConstant(m, "SOL_TCP", 6); 5034 #endif 5035 #ifdef SOL_UDP 5036 PyModule_AddIntConstant(m, "SOL_UDP", SOL_UDP); 5037 #else 5038 PyModule_AddIntConstant(m, "SOL_UDP", 17); 5039 #endif 5040 #ifdef IPPROTO_IP 5041 PyModule_AddIntConstant(m, "IPPROTO_IP", IPPROTO_IP); 5042 #else 5043 PyModule_AddIntConstant(m, "IPPROTO_IP", 0); 5044 #endif 5045 #ifdef IPPROTO_HOPOPTS 5046 PyModule_AddIntConstant(m, "IPPROTO_HOPOPTS", IPPROTO_HOPOPTS); 5047 #endif 5048 #ifdef IPPROTO_ICMP 5049 PyModule_AddIntConstant(m, "IPPROTO_ICMP", IPPROTO_ICMP); 5050 #else 5051 PyModule_AddIntConstant(m, "IPPROTO_ICMP", 1); 5052 #endif 5053 #ifdef IPPROTO_IGMP 5054 PyModule_AddIntConstant(m, "IPPROTO_IGMP", IPPROTO_IGMP); 5055 #endif 5056 #ifdef IPPROTO_GGP 5057 PyModule_AddIntConstant(m, "IPPROTO_GGP", IPPROTO_GGP); 5058 #endif 5059 #ifdef IPPROTO_IPV4 5060 PyModule_AddIntConstant(m, "IPPROTO_IPV4", IPPROTO_IPV4); 5061 #endif 5062 #ifdef IPPROTO_IPV6 5063 PyModule_AddIntConstant(m, "IPPROTO_IPV6", IPPROTO_IPV6); 5064 #endif 5065 #ifdef IPPROTO_IPIP 5066 PyModule_AddIntConstant(m, "IPPROTO_IPIP", IPPROTO_IPIP); 5067 #endif 5068 #ifdef IPPROTO_TCP 5069 PyModule_AddIntConstant(m, "IPPROTO_TCP", IPPROTO_TCP); 5070 #else 5071 PyModule_AddIntConstant(m, "IPPROTO_TCP", 6); 5072 #endif 5073 #ifdef IPPROTO_EGP 5074 PyModule_AddIntConstant(m, "IPPROTO_EGP", IPPROTO_EGP); 5075 #endif 5076 #ifdef IPPROTO_PUP 5077 PyModule_AddIntConstant(m, "IPPROTO_PUP", IPPROTO_PUP); 5078 #endif 5079 #ifdef IPPROTO_UDP 5080 PyModule_AddIntConstant(m, "IPPROTO_UDP", IPPROTO_UDP); 5081 #else 5082 PyModule_AddIntConstant(m, "IPPROTO_UDP", 17); 5083 #endif 5084 #ifdef IPPROTO_IDP 5085 PyModule_AddIntConstant(m, "IPPROTO_IDP", IPPROTO_IDP); 5086 #endif 5087 #ifdef IPPROTO_HELLO 5088 PyModule_AddIntConstant(m, "IPPROTO_HELLO", IPPROTO_HELLO); 5089 #endif 5090 #ifdef IPPROTO_ND 5091 PyModule_AddIntConstant(m, "IPPROTO_ND", IPPROTO_ND); 5092 #endif 5093 #ifdef IPPROTO_TP 5094 PyModule_AddIntConstant(m, "IPPROTO_TP", IPPROTO_TP); 5095 #endif 5096 #ifdef IPPROTO_IPV6 5097 PyModule_AddIntConstant(m, "IPPROTO_IPV6", IPPROTO_IPV6); 5098 #endif 5099 #ifdef IPPROTO_ROUTING 5100 PyModule_AddIntConstant(m, "IPPROTO_ROUTING", IPPROTO_ROUTING); 5101 #endif 5102 #ifdef IPPROTO_FRAGMENT 5103 PyModule_AddIntConstant(m, "IPPROTO_FRAGMENT", IPPROTO_FRAGMENT); 5104 #endif 5105 #ifdef IPPROTO_RSVP 5106 PyModule_AddIntConstant(m, "IPPROTO_RSVP", IPPROTO_RSVP); 5107 #endif 5108 #ifdef IPPROTO_GRE 5109 PyModule_AddIntConstant(m, "IPPROTO_GRE", IPPROTO_GRE); 5110 #endif 5111 #ifdef IPPROTO_ESP 5112 PyModule_AddIntConstant(m, "IPPROTO_ESP", IPPROTO_ESP); 5113 #endif 5114 #ifdef IPPROTO_AH 5115 PyModule_AddIntConstant(m, "IPPROTO_AH", IPPROTO_AH); 5116 #endif 5117 #ifdef IPPROTO_MOBILE 5118 PyModule_AddIntConstant(m, "IPPROTO_MOBILE", IPPROTO_MOBILE); 5119 #endif 5120 #ifdef IPPROTO_ICMPV6 5121 PyModule_AddIntConstant(m, "IPPROTO_ICMPV6", IPPROTO_ICMPV6); 5122 #endif 5123 #ifdef IPPROTO_NONE 5124 PyModule_AddIntConstant(m, "IPPROTO_NONE", IPPROTO_NONE); 5125 #endif 5126 #ifdef IPPROTO_DSTOPTS 5127 PyModule_AddIntConstant(m, "IPPROTO_DSTOPTS", IPPROTO_DSTOPTS); 5128 #endif 5129 #ifdef IPPROTO_XTP 5130 PyModule_AddIntConstant(m, "IPPROTO_XTP", IPPROTO_XTP); 5131 #endif 5132 #ifdef IPPROTO_EON 5133 PyModule_AddIntConstant(m, "IPPROTO_EON", IPPROTO_EON); 5134 #endif 5135 #ifdef IPPROTO_PIM 5136 PyModule_AddIntConstant(m, "IPPROTO_PIM", IPPROTO_PIM); 5137 #endif 5138 #ifdef IPPROTO_IPCOMP 5139 PyModule_AddIntConstant(m, "IPPROTO_IPCOMP", IPPROTO_IPCOMP); 5140 #endif 5141 #ifdef IPPROTO_VRRP 5142 PyModule_AddIntConstant(m, "IPPROTO_VRRP", IPPROTO_VRRP); 5143 #endif 5144 #ifdef IPPROTO_BIP 5145 PyModule_AddIntConstant(m, "IPPROTO_BIP", IPPROTO_BIP); 5146 #endif 5147 /**/ 5148 #ifdef IPPROTO_RAW 5149 PyModule_AddIntConstant(m, "IPPROTO_RAW", IPPROTO_RAW); 5150 #else 5151 PyModule_AddIntConstant(m, "IPPROTO_RAW", 255); 5152 #endif 5153 #ifdef IPPROTO_MAX 5154 PyModule_AddIntConstant(m, "IPPROTO_MAX", IPPROTO_MAX); 5155 #endif 5156 5157 /* Some port configuration */ 5158 #ifdef IPPORT_RESERVED 5159 PyModule_AddIntConstant(m, "IPPORT_RESERVED", IPPORT_RESERVED); 5160 #else 5161 PyModule_AddIntConstant(m, "IPPORT_RESERVED", 1024); 5162 #endif 5163 #ifdef IPPORT_USERRESERVED 5164 PyModule_AddIntConstant(m, "IPPORT_USERRESERVED", IPPORT_USERRESERVED); 5165 #else 5166 PyModule_AddIntConstant(m, "IPPORT_USERRESERVED", 5000); 5167 #endif 5168 5169 /* Some reserved IP v.4 addresses */ 5170 #ifdef INADDR_ANY 5171 PyModule_AddIntConstant(m, "INADDR_ANY", INADDR_ANY); 5172 #else 5173 PyModule_AddIntConstant(m, "INADDR_ANY", 0x00000000); 5174 #endif 5175 #ifdef INADDR_BROADCAST 5176 PyModule_AddIntConstant(m, "INADDR_BROADCAST", INADDR_BROADCAST); 5177 #else 5178 PyModule_AddIntConstant(m, "INADDR_BROADCAST", 0xffffffff); 5179 #endif 5180 #ifdef INADDR_LOOPBACK 5181 PyModule_AddIntConstant(m, "INADDR_LOOPBACK", INADDR_LOOPBACK); 5182 #else 5183 PyModule_AddIntConstant(m, "INADDR_LOOPBACK", 0x7F000001); 5184 #endif 5185 #ifdef INADDR_UNSPEC_GROUP 5186 PyModule_AddIntConstant(m, "INADDR_UNSPEC_GROUP", INADDR_UNSPEC_GROUP); 5187 #else 5188 PyModule_AddIntConstant(m, "INADDR_UNSPEC_GROUP", 0xe0000000); 5189 #endif 5190 #ifdef INADDR_ALLHOSTS_GROUP 5191 PyModule_AddIntConstant(m, "INADDR_ALLHOSTS_GROUP", 5192 INADDR_ALLHOSTS_GROUP); 5193 #else 5194 PyModule_AddIntConstant(m, "INADDR_ALLHOSTS_GROUP", 0xe0000001); 5195 #endif 5196 #ifdef INADDR_MAX_LOCAL_GROUP 5197 PyModule_AddIntConstant(m, "INADDR_MAX_LOCAL_GROUP", 5198 INADDR_MAX_LOCAL_GROUP); 5199 #else 5200 PyModule_AddIntConstant(m, "INADDR_MAX_LOCAL_GROUP", 0xe00000ff); 5201 #endif 5202 #ifdef INADDR_NONE 5203 PyModule_AddIntConstant(m, "INADDR_NONE", INADDR_NONE); 5204 #else 5205 PyModule_AddIntConstant(m, "INADDR_NONE", 0xffffffff); 5206 #endif 5207 5208 /* IPv4 [gs]etsockopt options */ 5209 #ifdef IP_OPTIONS 5210 PyModule_AddIntConstant(m, "IP_OPTIONS", IP_OPTIONS); 5211 #endif 5212 #ifdef IP_HDRINCL 5213 PyModule_AddIntConstant(m, "IP_HDRINCL", IP_HDRINCL); 5214 #endif 5215 #ifdef IP_TOS 5216 PyModule_AddIntConstant(m, "IP_TOS", IP_TOS); 5217 #endif 5218 #ifdef IP_TTL 5219 PyModule_AddIntConstant(m, "IP_TTL", IP_TTL); 5220 #endif 5221 #ifdef IP_RECVOPTS 5222 PyModule_AddIntConstant(m, "IP_RECVOPTS", IP_RECVOPTS); 5223 #endif 5224 #ifdef IP_RECVRETOPTS 5225 PyModule_AddIntConstant(m, "IP_RECVRETOPTS", IP_RECVRETOPTS); 5226 #endif 5227 #ifdef IP_RECVDSTADDR 5228 PyModule_AddIntConstant(m, "IP_RECVDSTADDR", IP_RECVDSTADDR); 5229 #endif 5230 #ifdef IP_RETOPTS 5231 PyModule_AddIntConstant(m, "IP_RETOPTS", IP_RETOPTS); 5232 #endif 5233 #ifdef IP_MULTICAST_IF 5234 PyModule_AddIntConstant(m, "IP_MULTICAST_IF", IP_MULTICAST_IF); 5235 #endif 5236 #ifdef IP_MULTICAST_TTL 5237 PyModule_AddIntConstant(m, "IP_MULTICAST_TTL", IP_MULTICAST_TTL); 5238 #endif 5239 #ifdef IP_MULTICAST_LOOP 5240 PyModule_AddIntConstant(m, "IP_MULTICAST_LOOP", IP_MULTICAST_LOOP); 5241 #endif 5242 #ifdef IP_ADD_MEMBERSHIP 5243 PyModule_AddIntConstant(m, "IP_ADD_MEMBERSHIP", IP_ADD_MEMBERSHIP); 5244 #endif 5245 #ifdef IP_DROP_MEMBERSHIP 5246 PyModule_AddIntConstant(m, "IP_DROP_MEMBERSHIP", IP_DROP_MEMBERSHIP); 5247 #endif 5248 #ifdef IP_DEFAULT_MULTICAST_TTL 5249 PyModule_AddIntConstant(m, "IP_DEFAULT_MULTICAST_TTL", 5250 IP_DEFAULT_MULTICAST_TTL); 5251 #endif 5252 #ifdef IP_DEFAULT_MULTICAST_LOOP 5253 PyModule_AddIntConstant(m, "IP_DEFAULT_MULTICAST_LOOP", 5254 IP_DEFAULT_MULTICAST_LOOP); 5255 #endif 5256 #ifdef IP_MAX_MEMBERSHIPS 5257 PyModule_AddIntConstant(m, "IP_MAX_MEMBERSHIPS", IP_MAX_MEMBERSHIPS); 5258 #endif 5259 5260 /* IPv6 [gs]etsockopt options, defined in RFC2553 */ 5261 #ifdef IPV6_JOIN_GROUP 5262 PyModule_AddIntConstant(m, "IPV6_JOIN_GROUP", IPV6_JOIN_GROUP); 5263 #endif 5264 #ifdef IPV6_LEAVE_GROUP 5265 PyModule_AddIntConstant(m, "IPV6_LEAVE_GROUP", IPV6_LEAVE_GROUP); 5266 #endif 5267 #ifdef IPV6_MULTICAST_HOPS 5268 PyModule_AddIntConstant(m, "IPV6_MULTICAST_HOPS", IPV6_MULTICAST_HOPS); 5269 #endif 5270 #ifdef IPV6_MULTICAST_IF 5271 PyModule_AddIntConstant(m, "IPV6_MULTICAST_IF", IPV6_MULTICAST_IF); 5272 #endif 5273 #ifdef IPV6_MULTICAST_LOOP 5274 PyModule_AddIntConstant(m, "IPV6_MULTICAST_LOOP", IPV6_MULTICAST_LOOP); 5275 #endif 5276 #ifdef IPV6_UNICAST_HOPS 5277 PyModule_AddIntConstant(m, "IPV6_UNICAST_HOPS", IPV6_UNICAST_HOPS); 5278 #endif 5279 /* Additional IPV6 socket options, defined in RFC 3493 */ 5280 #ifdef IPV6_V6ONLY 5281 PyModule_AddIntConstant(m, "IPV6_V6ONLY", IPV6_V6ONLY); 5282 #endif 5283 /* Advanced IPV6 socket options, from RFC 3542 */ 5284 #ifdef IPV6_CHECKSUM 5285 PyModule_AddIntConstant(m, "IPV6_CHECKSUM", IPV6_CHECKSUM); 5286 #endif 5287 #ifdef IPV6_DONTFRAG 5288 PyModule_AddIntConstant(m, "IPV6_DONTFRAG", IPV6_DONTFRAG); 5289 #endif 5290 #ifdef IPV6_DSTOPTS 5291 PyModule_AddIntConstant(m, "IPV6_DSTOPTS", IPV6_DSTOPTS); 5292 #endif 5293 #ifdef IPV6_HOPLIMIT 5294 PyModule_AddIntConstant(m, "IPV6_HOPLIMIT", IPV6_HOPLIMIT); 5295 #endif 5296 #ifdef IPV6_HOPOPTS 5297 PyModule_AddIntConstant(m, "IPV6_HOPOPTS", IPV6_HOPOPTS); 5298 #endif 5299 #ifdef IPV6_NEXTHOP 5300 PyModule_AddIntConstant(m, "IPV6_NEXTHOP", IPV6_NEXTHOP); 5301 #endif 5302 #ifdef IPV6_PATHMTU 5303 PyModule_AddIntConstant(m, "IPV6_PATHMTU", IPV6_PATHMTU); 5304 #endif 5305 #ifdef IPV6_PKTINFO 5306 PyModule_AddIntConstant(m, "IPV6_PKTINFO", IPV6_PKTINFO); 5307 #endif 5308 #ifdef IPV6_RECVDSTOPTS 5309 PyModule_AddIntConstant(m, "IPV6_RECVDSTOPTS", IPV6_RECVDSTOPTS); 5310 #endif 5311 #ifdef IPV6_RECVHOPLIMIT 5312 PyModule_AddIntConstant(m, "IPV6_RECVHOPLIMIT", IPV6_RECVHOPLIMIT); 5313 #endif 5314 #ifdef IPV6_RECVHOPOPTS 5315 PyModule_AddIntConstant(m, "IPV6_RECVHOPOPTS", IPV6_RECVHOPOPTS); 5316 #endif 5317 #ifdef IPV6_RECVPKTINFO 5318 PyModule_AddIntConstant(m, "IPV6_RECVPKTINFO", IPV6_RECVPKTINFO); 5319 #endif 5320 #ifdef IPV6_RECVRTHDR 5321 PyModule_AddIntConstant(m, "IPV6_RECVRTHDR", IPV6_RECVRTHDR); 5322 #endif 5323 #ifdef IPV6_RECVTCLASS 5324 PyModule_AddIntConstant(m, "IPV6_RECVTCLASS", IPV6_RECVTCLASS); 5325 #endif 5326 #ifdef IPV6_RTHDR 5327 PyModule_AddIntConstant(m, "IPV6_RTHDR", IPV6_RTHDR); 5328 #endif 5329 #ifdef IPV6_RTHDRDSTOPTS 5330 PyModule_AddIntConstant(m, "IPV6_RTHDRDSTOPTS", IPV6_RTHDRDSTOPTS); 5331 #endif 5332 #ifdef IPV6_RTHDR_TYPE_0 5333 PyModule_AddIntConstant(m, "IPV6_RTHDR_TYPE_0", IPV6_RTHDR_TYPE_0); 5334 #endif 5335 #ifdef IPV6_RECVPATHMTU 5336 PyModule_AddIntConstant(m, "IPV6_RECVPATHMTU", IPV6_RECVPATHMTU); 5337 #endif 5338 #ifdef IPV6_TCLASS 5339 PyModule_AddIntConstant(m, "IPV6_TCLASS", IPV6_TCLASS); 5340 #endif 5341 #ifdef IPV6_USE_MIN_MTU 5342 PyModule_AddIntConstant(m, "IPV6_USE_MIN_MTU", IPV6_USE_MIN_MTU); 5343 #endif 5344 5345 /* TCP options */ 5346 #ifdef TCP_NODELAY 5347 PyModule_AddIntConstant(m, "TCP_NODELAY", TCP_NODELAY); 5348 #endif 5349 #ifdef TCP_MAXSEG 5350 PyModule_AddIntConstant(m, "TCP_MAXSEG", TCP_MAXSEG); 5351 #endif 5352 #ifdef TCP_CORK 5353 PyModule_AddIntConstant(m, "TCP_CORK", TCP_CORK); 5354 #endif 5355 #ifdef TCP_KEEPIDLE 5356 PyModule_AddIntConstant(m, "TCP_KEEPIDLE", TCP_KEEPIDLE); 5357 #endif 5358 #ifdef TCP_KEEPINTVL 5359 PyModule_AddIntConstant(m, "TCP_KEEPINTVL", TCP_KEEPINTVL); 5360 #endif 5361 #ifdef TCP_KEEPCNT 5362 PyModule_AddIntConstant(m, "TCP_KEEPCNT", TCP_KEEPCNT); 5363 #endif 5364 #ifdef TCP_SYNCNT 5365 PyModule_AddIntConstant(m, "TCP_SYNCNT", TCP_SYNCNT); 5366 #endif 5367 #ifdef TCP_LINGER2 5368 PyModule_AddIntConstant(m, "TCP_LINGER2", TCP_LINGER2); 5369 #endif 5370 #ifdef TCP_DEFER_ACCEPT 5371 PyModule_AddIntConstant(m, "TCP_DEFER_ACCEPT", TCP_DEFER_ACCEPT); 5372 #endif 5373 #ifdef TCP_WINDOW_CLAMP 5374 PyModule_AddIntConstant(m, "TCP_WINDOW_CLAMP", TCP_WINDOW_CLAMP); 5375 #endif 5376 #ifdef TCP_INFO 5377 PyModule_AddIntConstant(m, "TCP_INFO", TCP_INFO); 5378 #endif 5379 #ifdef TCP_QUICKACK 5380 PyModule_AddIntConstant(m, "TCP_QUICKACK", TCP_QUICKACK); 5381 #endif 5382 5383 5384 /* IPX options */ 5385 #ifdef IPX_TYPE 5386 PyModule_AddIntConstant(m, "IPX_TYPE", IPX_TYPE); 5387 #endif 5388 5389 /* get{addr,name}info parameters */ 5390 #ifdef EAI_ADDRFAMILY 5391 PyModule_AddIntConstant(m, "EAI_ADDRFAMILY", EAI_ADDRFAMILY); 5392 #endif 5393 #ifdef EAI_AGAIN 5394 PyModule_AddIntConstant(m, "EAI_AGAIN", EAI_AGAIN); 5395 #endif 5396 #ifdef EAI_BADFLAGS 5397 PyModule_AddIntConstant(m, "EAI_BADFLAGS", EAI_BADFLAGS); 5398 #endif 5399 #ifdef EAI_FAIL 5400 PyModule_AddIntConstant(m, "EAI_FAIL", EAI_FAIL); 5401 #endif 5402 #ifdef EAI_FAMILY 5403 PyModule_AddIntConstant(m, "EAI_FAMILY", EAI_FAMILY); 5404 #endif 5405 #ifdef EAI_MEMORY 5406 PyModule_AddIntConstant(m, "EAI_MEMORY", EAI_MEMORY); 5407 #endif 5408 #ifdef EAI_NODATA 5409 PyModule_AddIntConstant(m, "EAI_NODATA", EAI_NODATA); 5410 #endif 5411 #ifdef EAI_NONAME 5412 PyModule_AddIntConstant(m, "EAI_NONAME", EAI_NONAME); 5413 #endif 5414 #ifdef EAI_OVERFLOW 5415 PyModule_AddIntConstant(m, "EAI_OVERFLOW", EAI_OVERFLOW); 5416 #endif 5417 #ifdef EAI_SERVICE 5418 PyModule_AddIntConstant(m, "EAI_SERVICE", EAI_SERVICE); 5419 #endif 5420 #ifdef EAI_SOCKTYPE 5421 PyModule_AddIntConstant(m, "EAI_SOCKTYPE", EAI_SOCKTYPE); 5422 #endif 5423 #ifdef EAI_SYSTEM 5424 PyModule_AddIntConstant(m, "EAI_SYSTEM", EAI_SYSTEM); 5425 #endif 5426 #ifdef EAI_BADHINTS 5427 PyModule_AddIntConstant(m, "EAI_BADHINTS", EAI_BADHINTS); 5428 #endif 5429 #ifdef EAI_PROTOCOL 5430 PyModule_AddIntConstant(m, "EAI_PROTOCOL", EAI_PROTOCOL); 5431 #endif 5432 #ifdef EAI_MAX 5433 PyModule_AddIntConstant(m, "EAI_MAX", EAI_MAX); 5434 #endif 5435 #ifdef AI_PASSIVE 5436 PyModule_AddIntConstant(m, "AI_PASSIVE", AI_PASSIVE); 5437 #endif 5438 #ifdef AI_CANONNAME 5439 PyModule_AddIntConstant(m, "AI_CANONNAME", AI_CANONNAME); 5440 #endif 5441 #ifdef AI_NUMERICHOST 5442 PyModule_AddIntConstant(m, "AI_NUMERICHOST", AI_NUMERICHOST); 5443 #endif 5444 #ifdef AI_NUMERICSERV 5445 PyModule_AddIntConstant(m, "AI_NUMERICSERV", AI_NUMERICSERV); 5446 #endif 5447 #ifdef AI_MASK 5448 PyModule_AddIntConstant(m, "AI_MASK", AI_MASK); 5449 #endif 5450 #ifdef AI_ALL 5451 PyModule_AddIntConstant(m, "AI_ALL", AI_ALL); 5452 #endif 5453 #ifdef AI_V4MAPPED_CFG 5454 PyModule_AddIntConstant(m, "AI_V4MAPPED_CFG", AI_V4MAPPED_CFG); 5455 #endif 5456 #ifdef AI_ADDRCONFIG 5457 PyModule_AddIntConstant(m, "AI_ADDRCONFIG", AI_ADDRCONFIG); 5458 #endif 5459 #ifdef AI_V4MAPPED 5460 PyModule_AddIntConstant(m, "AI_V4MAPPED", AI_V4MAPPED); 5461 #endif 5462 #ifdef AI_DEFAULT 5463 PyModule_AddIntConstant(m, "AI_DEFAULT", AI_DEFAULT); 5464 #endif 5465 #ifdef NI_MAXHOST 5466 PyModule_AddIntConstant(m, "NI_MAXHOST", NI_MAXHOST); 5467 #endif 5468 #ifdef NI_MAXSERV 5469 PyModule_AddIntConstant(m, "NI_MAXSERV", NI_MAXSERV); 5470 #endif 5471 #ifdef NI_NOFQDN 5472 PyModule_AddIntConstant(m, "NI_NOFQDN", NI_NOFQDN); 5473 #endif 5474 #ifdef NI_NUMERICHOST 5475 PyModule_AddIntConstant(m, "NI_NUMERICHOST", NI_NUMERICHOST); 5476 #endif 5477 #ifdef NI_NAMEREQD 5478 PyModule_AddIntConstant(m, "NI_NAMEREQD", NI_NAMEREQD); 5479 #endif 5480 #ifdef NI_NUMERICSERV 5481 PyModule_AddIntConstant(m, "NI_NUMERICSERV", NI_NUMERICSERV); 5482 #endif 5483 #ifdef NI_DGRAM 5484 PyModule_AddIntConstant(m, "NI_DGRAM", NI_DGRAM); 5485 #endif 5486 5487 /* shutdown() parameters */ 5488 #ifdef SHUT_RD 5489 PyModule_AddIntConstant(m, "SHUT_RD", SHUT_RD); 5490 #elif defined(SD_RECEIVE) 5491 PyModule_AddIntConstant(m, "SHUT_RD", SD_RECEIVE); 5492 #else 5493 PyModule_AddIntConstant(m, "SHUT_RD", 0); 5494 #endif 5495 #ifdef SHUT_WR 5496 PyModule_AddIntConstant(m, "SHUT_WR", SHUT_WR); 5497 #elif defined(SD_SEND) 5498 PyModule_AddIntConstant(m, "SHUT_WR", SD_SEND); 5499 #else 5500 PyModule_AddIntConstant(m, "SHUT_WR", 1); 5501 #endif 5502 #ifdef SHUT_RDWR 5503 PyModule_AddIntConstant(m, "SHUT_RDWR", SHUT_RDWR); 5504 #elif defined(SD_BOTH) 5505 PyModule_AddIntConstant(m, "SHUT_RDWR", SD_BOTH); 5506 #else 5507 PyModule_AddIntConstant(m, "SHUT_RDWR", 2); 5508 #endif 5509 5510 #ifdef SIO_RCVALL 5511 { 5512 DWORD codes[] = {SIO_RCVALL, SIO_KEEPALIVE_VALS}; 5513 const char *names[] = {"SIO_RCVALL", "SIO_KEEPALIVE_VALS"}; 5514 int i; 5515 for(i = 0; i<sizeof(codes)/sizeof(*codes); ++i) { 5516 PyObject *tmp; 5517 tmp = PyLong_FromUnsignedLong(codes[i]); 5518 if (tmp == NULL) 5519 return; 5520 PyModule_AddObject(m, names[i], tmp); 5521 } 5522 } 5523 PyModule_AddIntConstant(m, "RCVALL_OFF", RCVALL_OFF); 5524 PyModule_AddIntConstant(m, "RCVALL_ON", RCVALL_ON); 5525 PyModule_AddIntConstant(m, "RCVALL_SOCKETLEVELONLY", RCVALL_SOCKETLEVELONLY); 5526 #ifdef RCVALL_IPLEVEL 5527 PyModule_AddIntConstant(m, "RCVALL_IPLEVEL", RCVALL_IPLEVEL); 5528 #endif 5529 #ifdef RCVALL_MAX 5530 PyModule_AddIntConstant(m, "RCVALL_MAX", RCVALL_MAX); 5531 #endif 5532 #endif /* _MSTCPIP_ */ 5533 5534 /* Initialize gethostbyname lock */ 5535 #if defined(USE_GETHOSTBYNAME_LOCK) || defined(USE_GETADDRINFO_LOCK) 5536 netdb_lock = PyThread_allocate_lock(); 5537 #endif 5538 } 5539 5540 5541 #ifndef HAVE_INET_PTON 5542 #if !defined(NTDDI_VERSION) || (NTDDI_VERSION < NTDDI_LONGHORN) 5543 5544 /* Simplistic emulation code for inet_pton that only works for IPv4 */ 5545 /* These are not exposed because they do not set errno properly */ 5546 5547 int 5548 inet_pton(int af, const char *src, void *dst) 5549 { 5550 if (af == AF_INET) { 5551 #if (SIZEOF_INT != 4) 5552 #error "Not sure if in_addr_t exists and int is not 32-bits." 5553 #endif 5554 unsigned int packed_addr; 5555 packed_addr = inet_addr(src); 5556 if (packed_addr == INADDR_NONE) 5557 return 0; 5558 memcpy(dst, &packed_addr, 4); 5559 return 1; 5560 } 5561 /* Should set errno to EAFNOSUPPORT */ 5562 return -1; 5563 } 5564 5565 const char * 5566 inet_ntop(int af, const void *src, char *dst, socklen_t size) 5567 { 5568 if (af == AF_INET) { 5569 struct in_addr packed_addr; 5570 if (size < 16) 5571 /* Should set errno to ENOSPC. */ 5572 return NULL; 5573 memcpy(&packed_addr, src, sizeof(packed_addr)); 5574 return strncpy(dst, inet_ntoa(packed_addr), size); 5575 } 5576 /* Should set errno to EAFNOSUPPORT */ 5577 return NULL; 5578 } 5579 5580 #endif 5581 #endif 5582