Mercurial > cpython-lru_cache-weakref
annotate Modules/socketmodule.c @ 74917:76dfd1f08025
lib2to3 tests: Don't use deprecated API, switch to assertRegex()
| author | Victor Stinner <victor.stinner@haypocalc.com> |
|---|---|
| date | Mon, 13 Feb 2012 23:31:26 +0100 |
| parents | aa3680d2c24d |
| children | 2f10c1ad4b21 |
| rev | line source |
|---|---|
| 294 | 1 /* Socket module */ |
| 2 | |
| 3 /* | |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
4 |
| 294 | 5 This module provides an interface to Berkeley socket IPC. |
| 6 | |
| 7 Limitations: | |
| 8 | |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
9 - Only AF_INET, AF_INET6 and AF_UNIX address families are supported in a |
|
44568
305d7d2ce047
Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents:
44535
diff
changeset
|
10 portable manner, though AF_PACKET, AF_NETLINK and AF_TIPC are supported |
|
305d7d2ce047
Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents:
44535
diff
changeset
|
11 under Linux. |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
12 - No read/write operations (use sendall/recv or makefile instead). |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
13 - Additional restrictions apply on some non-Unix platforms (compensated |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
14 for by socket.py). |
| 294 | 15 |
|
2565
912813d573b4
fixed up comments describing interface
Guido van Rossum <guido@python.org>
parents:
2532
diff
changeset
|
16 Module interface: |
| 294 | 17 |
|
2565
912813d573b4
fixed up comments describing interface
Guido van Rossum <guido@python.org>
parents:
2532
diff
changeset
|
18 - socket.error: exception raised for socket specific errors |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
19 - socket.gaierror: exception raised for getaddrinfo/getnameinfo errors, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
20 a subclass of socket.error |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
21 - socket.herror: exception raised for gethostby* errors, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
22 a subclass of socket.error |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
23 - socket.gethostbyname(hostname) --> host IP address (string: 'dd.dd.dd.dd') |
|
2055
cf31eab6ab5a
Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents:
1970
diff
changeset
|
24 - socket.gethostbyaddr(IP address) --> (hostname, [alias, ...], [IP addr, ...]) |
|
2565
912813d573b4
fixed up comments describing interface
Guido van Rossum <guido@python.org>
parents:
2532
diff
changeset
|
25 - socket.gethostname() --> host name (string: 'spam' or 'spam.domain.com') |
|
4783
feba6d58d204
Added the new getprotobyname() call to the module overview at the top.
Guido van Rossum <guido@python.org>
parents:
4782
diff
changeset
|
26 - socket.getprotobyname(protocolname) --> protocol number |
|
32429
d8abf582f893
Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents:
32213
diff
changeset
|
27 - socket.getservbyname(servicename[, protocolname]) --> port number |
|
d8abf582f893
Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents:
32213
diff
changeset
|
28 - socket.getservbyport(portnumber[, protocolname]) --> service name |
|
41809
8e062e572ea4
Sockets facelift. APIs that could return binary data (e.g. aton() and
Guido van Rossum <guido@python.org>
parents:
41770
diff
changeset
|
29 - socket.socket([family[, type [, proto, fileno]]]) --> new socket object |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
30 (fileno specifies a pre-existing socket file descriptor) |
|
33063
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
31 - socket.socketpair([family[, type [, proto]]]) --> (socket, socket) |
|
3673
f6ace61c3dfe
ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents:
3672
diff
changeset
|
32 - socket.ntohs(16 bit value) --> new int object |
|
f6ace61c3dfe
ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents:
3672
diff
changeset
|
33 - socket.ntohl(32 bit value) --> new int object |
|
f6ace61c3dfe
ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents:
3672
diff
changeset
|
34 - socket.htons(16 bit value) --> new int object |
|
f6ace61c3dfe
ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents:
3672
diff
changeset
|
35 - socket.htonl(32 bit value) --> new int object |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
36 - socket.getaddrinfo(host, port [, family, socktype, proto, flags]) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
37 --> List of (family, socktype, proto, canonname, sockaddr) |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
38 - socket.getnameinfo(sockaddr, flags) --> (host, port) |
|
2565
912813d573b4
fixed up comments describing interface
Guido van Rossum <guido@python.org>
parents:
2532
diff
changeset
|
39 - socket.AF_INET, socket.SOCK_STREAM, etc.: constants from <socket.h> |
|
28818
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
40 - socket.has_ipv6: boolean value indicating if IPv6 is supported |
|
11217
f406e78ec10b
Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents:
11182
diff
changeset
|
41 - socket.inet_aton(IP address) -> 32-bit packed IP representation |
|
f406e78ec10b
Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents:
11182
diff
changeset
|
42 - socket.inet_ntoa(packed IP) -> IP address string |
|
24293
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
43 - socket.getdefaulttimeout() -> None | float |
|
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
44 - socket.setdefaulttimeout(None | float) |
|
70136
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
45 - socket.if_nameindex() -> list of tuples (if_index, if_name) |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
46 - socket.if_nametoindex(name) -> corresponding interface index |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
47 - socket.if_indextoname(index) -> corresponding interface name |
| 294 | 48 - an Internet socket address is a pair (hostname, port) |
| 49 where hostname can be anything recognized by gethostbyname() | |
| 50 (including the dd.dd.dd.dd notation) and port is in host byte order | |
| 51 - where a hostname is returned, the dd.dd.dd.dd notation is used | |
|
2565
912813d573b4
fixed up comments describing interface
Guido van Rossum <guido@python.org>
parents:
2532
diff
changeset
|
52 - a UNIX domain socket address is a string specifying the pathname |
|
16410
3d4a7cd0bf17
SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16400
diff
changeset
|
53 - an AF_PACKET socket address is a tuple containing a string |
|
3d4a7cd0bf17
SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16400
diff
changeset
|
54 specifying the ethernet interface and an integer specifying |
|
3d4a7cd0bf17
SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16400
diff
changeset
|
55 the Ethernet protocol number to be received. For example: |
|
16427
c8ef864ba861
fix a couple last-minute bugs in the raw socket support
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16410
diff
changeset
|
56 ("eth0",0x1234). Optional 3rd,4th,5th elements in the tuple |
|
32611
8b3288f607e1
[Patch #947352 from Jason Andryuk] Add support for AF_PACKET hardware addresses
Andrew M. Kuchling <amk@amk.ca>
parents:
32578
diff
changeset
|
57 specify packet-type and ha-type/addr. |
|
44568
305d7d2ce047
Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents:
44535
diff
changeset
|
58 - an AF_TIPC socket address is expressed as |
|
305d7d2ce047
Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents:
44535
diff
changeset
|
59 (addr_type, v1, v2, v3 [, scope]); where addr_type can be one of: |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
60 TIPC_ADDR_NAMESEQ, TIPC_ADDR_NAME, and TIPC_ADDR_ID; |
|
44568
305d7d2ce047
Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents:
44535
diff
changeset
|
61 and scope can be one of: |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
62 TIPC_ZONE_SCOPE, TIPC_CLUSTER_SCOPE, and TIPC_NODE_SCOPE. |
|
44568
305d7d2ce047
Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents:
44535
diff
changeset
|
63 The meaning of v1, v2 and v3 depends on the value of addr_type: |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
64 if addr_type is TIPC_ADDR_NAME: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
65 v1 is the server type |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
66 v2 is the port identifier |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
67 v3 is ignored |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
68 if addr_type is TIPC_ADDR_NAMESEQ: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
69 v1 is the server type |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
70 v2 is the lower port number |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
71 v3 is the upper port number |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
72 if addr_type is TIPC_ADDR_ID: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
73 v1 is the node |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
74 v2 is the ref |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
75 v3 is ignored |
|
44568
305d7d2ce047
Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents:
44535
diff
changeset
|
76 |
| 294 | 77 |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
78 Local naming conventions: |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
79 |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
80 - names starting with sock_ are socket object methods |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
81 - names starting with socket_ are module-level functions |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
82 - names starting with PySocket are exported through socketmodule.h |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
83 |
| 294 | 84 */ |
| 85 | |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
86 #ifdef __APPLE__ |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
87 /* |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
88 * inet_aton is not available on OSX 10.3, yet we want to use a binary |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
89 * that was build on 10.4 or later to work on that release, weak linking |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
90 * comes to the rescue. |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
91 */ |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
92 # pragma weak inet_aton |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
93 #endif |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
94 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
95 #include "Python.h" |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36684
diff
changeset
|
96 #include "structmember.h" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
97 |
|
28818
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
98 #undef MAX |
|
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
99 #define MAX(x, y) ((x) < (y) ? (y) : (x)) |
|
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
100 |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
101 /* Socket object documentation */ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
102 PyDoc_STRVAR(sock_doc, |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
103 "socket([family[, type[, proto]]]) -> socket object\n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
104 \n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
105 Open a socket of the given type. The family argument specifies the\n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
106 address family; it defaults to AF_INET. The type argument specifies\n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
107 whether this is a stream (SOCK_STREAM, this is the default)\n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
108 or datagram (SOCK_DGRAM) socket. The protocol argument defaults to 0,\n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
109 specifying the default protocol. Keyword arguments are accepted.\n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
110 \n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
111 A socket object represents one endpoint of a network connection.\n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
112 \n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
113 Methods of socket objects (keyword arguments not allowed):\n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
114 \n\ |
|
43881
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
115 _accept() -- accept connection, returning new socket fd and client address\n\ |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
116 bind(addr) -- bind the socket to a local address\n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
117 close() -- close the socket\n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
118 connect(addr) -- connect the socket to a remote address\n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
119 connect_ex(addr) -- connect, return an error code instead of an exception\n\ |
|
43881
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
120 _dup() -- return a new socket fd duplicated from fileno()\n\ |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
121 fileno() -- return underlying file descriptor\n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
122 getpeername() -- return remote address [*]\n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
123 getsockname() -- return local address\n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
124 getsockopt(level, optname[, buflen]) -- get socket options\n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
125 gettimeout() -- return timeout or None\n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
126 listen(n) -- start listening for incoming connections\n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
127 recv(buflen[, flags]) -- receive data\n\ |
|
38673
a19c20c5e5c7
Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
128 recv_into(buffer[, nbytes[, flags]]) -- receive data (into a buffer)\n\ |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
129 recvfrom(buflen[, flags]) -- receive data and sender\'s address\n\ |
|
38673
a19c20c5e5c7
Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
130 recvfrom_into(buffer[, nbytes, [, flags])\n\ |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
131 -- receive data and sender\'s address (into a buffer)\n\ |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
132 sendall(data[, flags]) -- send all data\n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
133 send(data[, flags]) -- send data, may not send all of it\n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
134 sendto(data[, flags], addr) -- send data to a given address\n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
135 setblocking(0 | 1) -- set or clear the blocking I/O flag\n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
136 setsockopt(level, optname, value) -- set socket options\n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
137 settimeout(None | float) -- set or clear the timeout\n\ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
138 shutdown(how) -- shut down traffic in one or both directions\n\ |
|
70136
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
139 if_nameindex() -- return all network interface indices and names\n\ |
|
70640
20d9926f5db5
Further documentation updates to be consistent with doc standards and comments
Gregory P. Smith <greg@krypto.org>
parents:
70226
diff
changeset
|
140 if_nametoindex(name) -- return the corresponding interface index\n\ |
|
20d9926f5db5
Further documentation updates to be consistent with doc standards and comments
Gregory P. Smith <greg@krypto.org>
parents:
70226
diff
changeset
|
141 if_indextoname(index) -- return the corresponding interface name\n\ |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
142 \n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
143 [*] not available on all platforms!"); |
|
10442
9184c9e108f9
Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents:
10441
diff
changeset
|
144 |
|
30722
651fc8d98d99
Fix a bunch of typos in documentation, docstrings and comments.
Walter Dörwald <walter@livinglogic.de>
parents:
30683
diff
changeset
|
145 /* XXX This is a terrible mess of platform-dependent preprocessor hacks. |
|
20727
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
146 I hope some day someone can clean this up please... */ |
|
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
147 |
|
11288
adf87d13a0c1
(1) On Linux, we really need to trust the configure script to select
Guido van Rossum <guido@python.org>
parents:
11268
diff
changeset
|
148 /* Hacks for gethostbyname_r(). On some non-Linux platforms, the configure |
|
adf87d13a0c1
(1) On Linux, we really need to trust the configure script to select
Guido van Rossum <guido@python.org>
parents:
11268
diff
changeset
|
149 script doesn't get this right, so we hardcode some platform checks below. |
|
adf87d13a0c1
(1) On Linux, we really need to trust the configure script to select
Guido van Rossum <guido@python.org>
parents:
11268
diff
changeset
|
150 On the other hand, not all Linux versions agree, so there the settings |
|
adf87d13a0c1
(1) On Linux, we really need to trust the configure script to select
Guido van Rossum <guido@python.org>
parents:
11268
diff
changeset
|
151 computed by the configure script are needed! */ |
|
adf87d13a0c1
(1) On Linux, we really need to trust the configure script to select
Guido van Rossum <guido@python.org>
parents:
11268
diff
changeset
|
152 |
|
adf87d13a0c1
(1) On Linux, we really need to trust the configure script to select
Guido van Rossum <guido@python.org>
parents:
11268
diff
changeset
|
153 #ifndef linux |
|
21959
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
154 # undef HAVE_GETHOSTBYNAME_R_3_ARG |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
155 # undef HAVE_GETHOSTBYNAME_R_5_ARG |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
156 # undef HAVE_GETHOSTBYNAME_R_6_ARG |
|
11288
adf87d13a0c1
(1) On Linux, we really need to trust the configure script to select
Guido van Rossum <guido@python.org>
parents:
11268
diff
changeset
|
157 #endif |
|
10454
dad14ffe1c22
Implement two suggestions by Jonathan Giddy: (1) in AIX, clear the
Guido van Rossum <guido@python.org>
parents:
10453
diff
changeset
|
158 |
|
72045
b4b84e87dc6b
Close #12826: fix socketmodule.c for OpenBSD, include sys/uio.h
Victor Stinner <vstinner@wyplay.com>
parents:
72030
diff
changeset
|
159 #if defined(__OpenBSD__) |
|
b4b84e87dc6b
Close #12826: fix socketmodule.c for OpenBSD, include sys/uio.h
Victor Stinner <vstinner@wyplay.com>
parents:
72030
diff
changeset
|
160 # include <sys/uio.h> |
|
b4b84e87dc6b
Close #12826: fix socketmodule.c for OpenBSD, include sys/uio.h
Victor Stinner <vstinner@wyplay.com>
parents:
72030
diff
changeset
|
161 #endif |
|
b4b84e87dc6b
Close #12826: fix socketmodule.c for OpenBSD, include sys/uio.h
Victor Stinner <vstinner@wyplay.com>
parents:
72030
diff
changeset
|
162 |
|
10579
1ed1eb5bc6ec
Put back __osf__ support for gethostbyname_r(); the real bug was that
Guido van Rossum <guido@python.org>
parents:
10561
diff
changeset
|
163 #ifndef WITH_THREAD |
|
21959
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
164 # undef HAVE_GETHOSTBYNAME_R |
|
10579
1ed1eb5bc6ec
Put back __osf__ support for gethostbyname_r(); the real bug was that
Guido van Rossum <guido@python.org>
parents:
10561
diff
changeset
|
165 #endif |
|
1ed1eb5bc6ec
Put back __osf__ support for gethostbyname_r(); the real bug was that
Guido van Rossum <guido@python.org>
parents:
10561
diff
changeset
|
166 |
|
10454
dad14ffe1c22
Implement two suggestions by Jonathan Giddy: (1) in AIX, clear the
Guido van Rossum <guido@python.org>
parents:
10453
diff
changeset
|
167 #ifdef HAVE_GETHOSTBYNAME_R |
|
68457
15b090c9442a
Issue #11495: OSF support is eliminated. It was deprecated in Python 3.2
Jesus Cea <jcea@jcea.es>
parents:
68258
diff
changeset
|
168 # if defined(_AIX) |
|
21959
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
169 # define HAVE_GETHOSTBYNAME_R_3_ARG |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
170 # elif defined(__sun) || defined(__sgi) |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
171 # define HAVE_GETHOSTBYNAME_R_5_ARG |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
172 # elif defined(linux) |
|
11288
adf87d13a0c1
(1) On Linux, we really need to trust the configure script to select
Guido van Rossum <guido@python.org>
parents:
11268
diff
changeset
|
173 /* Rely on the configure script */ |
|
21959
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
174 # else |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
175 # undef HAVE_GETHOSTBYNAME_R |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
176 # endif |
|
10454
dad14ffe1c22
Implement two suggestions by Jonathan Giddy: (1) in AIX, clear the
Guido van Rossum <guido@python.org>
parents:
10453
diff
changeset
|
177 #endif |
|
dad14ffe1c22
Implement two suggestions by Jonathan Giddy: (1) in AIX, clear the
Guido van Rossum <guido@python.org>
parents:
10453
diff
changeset
|
178 |
|
23723
2f6f8708e3e9
Whitespace normalization, folding long lines, uniform comment
Guido van Rossum <guido@python.org>
parents:
23722
diff
changeset
|
179 #if !defined(HAVE_GETHOSTBYNAME_R) && defined(WITH_THREAD) && \ |
|
2f6f8708e3e9
Whitespace normalization, folding long lines, uniform comment
Guido van Rossum <guido@python.org>
parents:
23722
diff
changeset
|
180 !defined(MS_WINDOWS) |
|
21959
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
181 # define USE_GETHOSTBYNAME_LOCK |
|
10442
9184c9e108f9
Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents:
10441
diff
changeset
|
182 #endif |
|
9184c9e108f9
Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents:
10441
diff
changeset
|
183 |
|
35635
27e1426b7f31
Patch #1288833: Removed thread lock from socket.getaddrinfo on
Hye-Shik Chang <hyeshik@gmail.com>
parents:
35551
diff
changeset
|
184 /* To use __FreeBSD_version */ |
|
27e1426b7f31
Patch #1288833: Removed thread lock from socket.getaddrinfo on
Hye-Shik Chang <hyeshik@gmail.com>
parents:
35551
diff
changeset
|
185 #ifdef HAVE_SYS_PARAM_H |
|
27e1426b7f31
Patch #1288833: Removed thread lock from socket.getaddrinfo on
Hye-Shik Chang <hyeshik@gmail.com>
parents:
35551
diff
changeset
|
186 #include <sys/param.h> |
|
27e1426b7f31
Patch #1288833: Removed thread lock from socket.getaddrinfo on
Hye-Shik Chang <hyeshik@gmail.com>
parents:
35551
diff
changeset
|
187 #endif |
|
29035
e1d5ca8ab7dc
[ 731644] & [ 604210 ] Release the GIL around getaddrinfo(), yet protect
Just van Rossum <just@letterror.com>
parents:
28953
diff
changeset
|
188 /* On systems on which getaddrinfo() is believed to not be thread-safe, |
|
29036
ccf7e138a126
Addition to [731644]: also use the lock when using the getaddrinfo
Just van Rossum <just@letterror.com>
parents:
29035
diff
changeset
|
189 (this includes the getaddrinfo emulation) protect access with a lock. */ |
|
35635
27e1426b7f31
Patch #1288833: Removed thread lock from socket.getaddrinfo on
Hye-Shik Chang <hyeshik@gmail.com>
parents:
35551
diff
changeset
|
190 #if defined(WITH_THREAD) && (defined(__APPLE__) || \ |
|
27e1426b7f31
Patch #1288833: Removed thread lock from socket.getaddrinfo on
Hye-Shik Chang <hyeshik@gmail.com>
parents:
35551
diff
changeset
|
191 (defined(__FreeBSD__) && __FreeBSD_version+0 < 503000) || \ |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
192 defined(__OpenBSD__) || defined(__NetBSD__) || \ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
193 defined(__VMS) || !defined(HAVE_GETADDRINFO)) |
|
29035
e1d5ca8ab7dc
[ 731644] & [ 604210 ] Release the GIL around getaddrinfo(), yet protect
Just van Rossum <just@letterror.com>
parents:
28953
diff
changeset
|
194 #define USE_GETADDRINFO_LOCK |
|
e1d5ca8ab7dc
[ 731644] & [ 604210 ] Release the GIL around getaddrinfo(), yet protect
Just van Rossum <just@letterror.com>
parents:
28953
diff
changeset
|
195 #endif |
|
e1d5ca8ab7dc
[ 731644] & [ 604210 ] Release the GIL around getaddrinfo(), yet protect
Just van Rossum <just@letterror.com>
parents:
28953
diff
changeset
|
196 |
|
e1d5ca8ab7dc
[ 731644] & [ 604210 ] Release the GIL around getaddrinfo(), yet protect
Just van Rossum <just@letterror.com>
parents:
28953
diff
changeset
|
197 #ifdef USE_GETADDRINFO_LOCK |
|
e1d5ca8ab7dc
[ 731644] & [ 604210 ] Release the GIL around getaddrinfo(), yet protect
Just van Rossum <just@letterror.com>
parents:
28953
diff
changeset
|
198 #define ACQUIRE_GETADDRINFO_LOCK PyThread_acquire_lock(netdb_lock, 1); |
|
e1d5ca8ab7dc
[ 731644] & [ 604210 ] Release the GIL around getaddrinfo(), yet protect
Just van Rossum <just@letterror.com>
parents:
28953
diff
changeset
|
199 #define RELEASE_GETADDRINFO_LOCK PyThread_release_lock(netdb_lock); |
|
e1d5ca8ab7dc
[ 731644] & [ 604210 ] Release the GIL around getaddrinfo(), yet protect
Just van Rossum <just@letterror.com>
parents:
28953
diff
changeset
|
200 #else |
|
e1d5ca8ab7dc
[ 731644] & [ 604210 ] Release the GIL around getaddrinfo(), yet protect
Just van Rossum <just@letterror.com>
parents:
28953
diff
changeset
|
201 #define ACQUIRE_GETADDRINFO_LOCK |
|
e1d5ca8ab7dc
[ 731644] & [ 604210 ] Release the GIL around getaddrinfo(), yet protect
Just van Rossum <just@letterror.com>
parents:
28953
diff
changeset
|
202 #define RELEASE_GETADDRINFO_LOCK |
|
e1d5ca8ab7dc
[ 731644] & [ 604210 ] Release the GIL around getaddrinfo(), yet protect
Just van Rossum <just@letterror.com>
parents:
28953
diff
changeset
|
203 #endif |
|
e1d5ca8ab7dc
[ 731644] & [ 604210 ] Release the GIL around getaddrinfo(), yet protect
Just van Rossum <just@letterror.com>
parents:
28953
diff
changeset
|
204 |
|
e1d5ca8ab7dc
[ 731644] & [ 604210 ] Release the GIL around getaddrinfo(), yet protect
Just van Rossum <just@letterror.com>
parents:
28953
diff
changeset
|
205 #if defined(USE_GETHOSTBYNAME_LOCK) || defined(USE_GETADDRINFO_LOCK) |
|
21959
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
206 # include "pythread.h" |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6718
diff
changeset
|
207 #endif |
| 294 | 208 |
|
6626
5e31d381fa47
os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents:
6618
diff
changeset
|
209 #if defined(PYCC_VACPP) |
|
21959
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
210 # include <types.h> |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
211 # include <io.h> |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
212 # include <sys/ioctl.h> |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
213 # include <utils.h> |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
214 # include <ctype.h> |
|
6626
5e31d381fa47
os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents:
6618
diff
changeset
|
215 #endif |
|
5e31d381fa47
os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents:
6618
diff
changeset
|
216 |
|
26551
0c995cd07026
Don't include <ioctl.h> unless on __VMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
26550
diff
changeset
|
217 #if defined(__VMS) |
|
26550
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
25994
diff
changeset
|
218 # include <ioctl.h> |
|
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
25994
diff
changeset
|
219 #endif |
|
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
25994
diff
changeset
|
220 |
|
74741
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
221 #ifdef __APPLE__ |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
222 # include <sys/ioctl.h> |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
223 #endif |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
224 |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
225 |
|
6626
5e31d381fa47
os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents:
6618
diff
changeset
|
226 #if defined(PYOS_OS2) |
|
21959
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
227 # define INCL_DOS |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
228 # define INCL_DOSERRORS |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
229 # define INCL_NOPMAPI |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
230 # include <os2.h> |
|
6626
5e31d381fa47
os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents:
6618
diff
changeset
|
231 #endif |
|
5e31d381fa47
os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents:
6618
diff
changeset
|
232 |
|
29929
08d2636b8e58
Get socketmodule compiling on IRIX 6.5.10.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
29790
diff
changeset
|
233 #if defined(__sgi) && _COMPILER_VERSION>700 && !_SGIAPI |
|
25327
337fcc24985b
Patch #608999: Fix portability problems with MIPSPro 7.x
Martin v. Löwis <martin@v.loewis.de>
parents:
25105
diff
changeset
|
234 /* make sure that the reentrant (gethostbyaddr_r etc) |
|
337fcc24985b
Patch #608999: Fix portability problems with MIPSPro 7.x
Martin v. Löwis <martin@v.loewis.de>
parents:
25105
diff
changeset
|
235 functions are declared correctly if compiling with |
|
337fcc24985b
Patch #608999: Fix portability problems with MIPSPro 7.x
Martin v. Löwis <martin@v.loewis.de>
parents:
25105
diff
changeset
|
236 MIPSPro 7.x in ANSI C mode (default) */ |
|
29929
08d2636b8e58
Get socketmodule compiling on IRIX 6.5.10.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
29790
diff
changeset
|
237 |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
238 /* XXX Using _SGIAPI is the wrong thing, |
|
29929
08d2636b8e58
Get socketmodule compiling on IRIX 6.5.10.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
29790
diff
changeset
|
239 but I don't know what the right thing is. */ |
|
33478
1b3ac674a57c
Patch for compilation on IRIX from rwgk on http://python.org/sf/728330
Trent Mick <trentm@activestate.com>
parents:
33427
diff
changeset
|
240 #undef _SGIAPI /* to avoid warning */ |
|
25327
337fcc24985b
Patch #608999: Fix portability problems with MIPSPro 7.x
Martin v. Löwis <martin@v.loewis.de>
parents:
25105
diff
changeset
|
241 #define _SGIAPI 1 |
|
29929
08d2636b8e58
Get socketmodule compiling on IRIX 6.5.10.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
29790
diff
changeset
|
242 |
|
33478
1b3ac674a57c
Patch for compilation on IRIX from rwgk on http://python.org/sf/728330
Trent Mick <trentm@activestate.com>
parents:
33427
diff
changeset
|
243 #undef _XOPEN_SOURCE |
|
1b3ac674a57c
Patch for compilation on IRIX from rwgk on http://python.org/sf/728330
Trent Mick <trentm@activestate.com>
parents:
33427
diff
changeset
|
244 #include <sys/socket.h> |
|
1b3ac674a57c
Patch for compilation on IRIX from rwgk on http://python.org/sf/728330
Trent Mick <trentm@activestate.com>
parents:
33427
diff
changeset
|
245 #include <sys/types.h> |
|
1b3ac674a57c
Patch for compilation on IRIX from rwgk on http://python.org/sf/728330
Trent Mick <trentm@activestate.com>
parents:
33427
diff
changeset
|
246 #include <netinet/in.h> |
|
1b3ac674a57c
Patch for compilation on IRIX from rwgk on http://python.org/sf/728330
Trent Mick <trentm@activestate.com>
parents:
33427
diff
changeset
|
247 #ifdef _SS_ALIGNSIZE |
|
1b3ac674a57c
Patch for compilation on IRIX from rwgk on http://python.org/sf/728330
Trent Mick <trentm@activestate.com>
parents:
33427
diff
changeset
|
248 #define HAVE_GETADDRINFO 1 |
|
1b3ac674a57c
Patch for compilation on IRIX from rwgk on http://python.org/sf/728330
Trent Mick <trentm@activestate.com>
parents:
33427
diff
changeset
|
249 #define HAVE_GETNAMEINFO 1 |
|
1b3ac674a57c
Patch for compilation on IRIX from rwgk on http://python.org/sf/728330
Trent Mick <trentm@activestate.com>
parents:
33427
diff
changeset
|
250 #endif |
|
1b3ac674a57c
Patch for compilation on IRIX from rwgk on http://python.org/sf/728330
Trent Mick <trentm@activestate.com>
parents:
33427
diff
changeset
|
251 |
|
29929
08d2636b8e58
Get socketmodule compiling on IRIX 6.5.10.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
29790
diff
changeset
|
252 #define HAVE_INET_PTON |
|
08d2636b8e58
Get socketmodule compiling on IRIX 6.5.10.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
29790
diff
changeset
|
253 #include <netdb.h> |
|
25327
337fcc24985b
Patch #608999: Fix portability problems with MIPSPro 7.x
Martin v. Löwis <martin@v.loewis.de>
parents:
25105
diff
changeset
|
254 #endif |
|
337fcc24985b
Patch #608999: Fix portability problems with MIPSPro 7.x
Martin v. Löwis <martin@v.loewis.de>
parents:
25105
diff
changeset
|
255 |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
256 /* Irix 6.5 fails to define this variable at all. This is needed |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
257 for both GCC and SGI's compiler. I'd say that the SGI headers |
|
36610
0671f3c462d5
Bug #854823: socketmodule now builds on Sun platforms even when
Georg Brandl <georg@python.org>
parents:
36476
diff
changeset
|
258 are just busted. Same thing for Solaris. */ |
|
0671f3c462d5
Bug #854823: socketmodule now builds on Sun platforms even when
Georg Brandl <georg@python.org>
parents:
36476
diff
changeset
|
259 #if (defined(__sgi) || defined(sun)) && !defined(INET_ADDRSTRLEN) |
|
30646
a6fb6822814a
made the SGI INET_ADDRSTRLEN define apply for any compiler on Irix. Both the
Anthony Baxter <anthonybaxter@gmail.com>
parents:
30630
diff
changeset
|
260 #define INET_ADDRSTRLEN 16 |
|
a6fb6822814a
made the SGI INET_ADDRSTRLEN define apply for any compiler on Irix. Both the
Anthony Baxter <anthonybaxter@gmail.com>
parents:
30630
diff
changeset
|
261 #endif |
|
a6fb6822814a
made the SGI INET_ADDRSTRLEN define apply for any compiler on Irix. Both the
Anthony Baxter <anthonybaxter@gmail.com>
parents:
30630
diff
changeset
|
262 |
|
21959
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
263 /* Generic includes */ |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
264 #ifdef HAVE_SYS_TYPES_H |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
265 #include <sys/types.h> |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
266 #endif |
|
21959
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
267 |
|
70151
b6aafb20e5f5
issue #1746656: Fix for OS X. configure and #include changes so that the socket
Gregory P. Smith <greg@krypto.org>
parents:
70136
diff
changeset
|
268 #ifdef HAVE_SYS_SOCKET_H |
|
b6aafb20e5f5
issue #1746656: Fix for OS X. configure and #include changes so that the socket
Gregory P. Smith <greg@krypto.org>
parents:
70136
diff
changeset
|
269 #include <sys/socket.h> |
|
b6aafb20e5f5
issue #1746656: Fix for OS X. configure and #include changes so that the socket
Gregory P. Smith <greg@krypto.org>
parents:
70136
diff
changeset
|
270 #endif |
|
b6aafb20e5f5
issue #1746656: Fix for OS X. configure and #include changes so that the socket
Gregory P. Smith <greg@krypto.org>
parents:
70136
diff
changeset
|
271 |
|
b6aafb20e5f5
issue #1746656: Fix for OS X. configure and #include changes so that the socket
Gregory P. Smith <greg@krypto.org>
parents:
70136
diff
changeset
|
272 #ifdef HAVE_NET_IF_H |
|
b6aafb20e5f5
issue #1746656: Fix for OS X. configure and #include changes so that the socket
Gregory P. Smith <greg@krypto.org>
parents:
70136
diff
changeset
|
273 #include <net/if.h> |
|
b6aafb20e5f5
issue #1746656: Fix for OS X. configure and #include changes so that the socket
Gregory P. Smith <greg@krypto.org>
parents:
70136
diff
changeset
|
274 #endif |
|
b6aafb20e5f5
issue #1746656: Fix for OS X. configure and #include changes so that the socket
Gregory P. Smith <greg@krypto.org>
parents:
70136
diff
changeset
|
275 |
|
21961
ea23e6e49290
Also fix the comment.
Marc-André Lemburg <mal@egenix.com>
parents:
21960
diff
changeset
|
276 /* Generic socket object definitions and includes */ |
|
21959
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
277 #define PySocket_BUILDING_SOCKET |
|
21960
7a917ad8f442
Fix the name of the header file.
Marc-André Lemburg <mal@egenix.com>
parents:
21959
diff
changeset
|
278 #include "socketmodule.h" |
|
21959
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
279 |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
280 /* Addressing includes */ |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
281 |
|
3738
ce74bba8a6a6
Slightly different Windows ifdefs
Guido van Rossum <guido@python.org>
parents:
3702
diff
changeset
|
282 #ifndef MS_WINDOWS |
|
21959
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
283 |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
284 /* Non-MS WINDOWS includes */ |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
285 # include <netdb.h> |
|
72030
9fc5231c36e0
Attempt to address Windows buildbot failures
Nick Coghlan <ncoghlan@gmail.com>
parents:
72029
diff
changeset
|
286 # include <unistd.h> |
|
11217
f406e78ec10b
Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents:
11182
diff
changeset
|
287 |
|
11288
adf87d13a0c1
(1) On Linux, we really need to trust the configure script to select
Guido van Rossum <guido@python.org>
parents:
11268
diff
changeset
|
288 /* Headers needed for inet_ntoa() and inet_addr() */ |
| 42645 | 289 # if defined(PYOS_OS2) && defined(PYCC_VACPP) |
|
21959
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
290 # include <netdb.h> |
|
20871
f576ffd57966
SF patch 473749 compile under OS/2 VA C++, from Michael Muller.
Tim Peters <tim.peters@gmail.com>
parents:
20853
diff
changeset
|
291 typedef size_t socklen_t; |
|
21959
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
292 # else |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
293 # include <arpa/inet.h> |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
294 # endif |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
295 |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
296 # include <fcntl.h> |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
297 |
|
20654
edd9d0b3c47e
SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents:
20648
diff
changeset
|
298 #else |
|
21959
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
299 |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
300 /* MS_WINDOWS includes */ |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
301 # ifdef HAVE_FCNTL_H |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
302 # include <fcntl.h> |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
303 # endif |
|
21959
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
304 |
|
16410
3d4a7cd0bf17
SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16400
diff
changeset
|
305 #endif |
|
3d4a7cd0bf17
SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16400
diff
changeset
|
306 |
|
31504
2abc52c3d4c2
remove support for missing ANSI C header files (limits.h, stddef.h, etc).
Skip Montanaro <skip@pobox.com>
parents:
31443
diff
changeset
|
307 #include <stddef.h> |
|
18263
41491d196748
Provide a definition for offsetof.
Martin v. Löwis <martin@v.loewis.de>
parents:
18262
diff
changeset
|
308 |
|
41491d196748
Provide a definition for offsetof.
Martin v. Löwis <martin@v.loewis.de>
parents:
18262
diff
changeset
|
309 #ifndef offsetof |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
310 # define offsetof(type, member) ((size_t)(&((type *)0)->member)) |
|
18263
41491d196748
Provide a definition for offsetof.
Martin v. Löwis <martin@v.loewis.de>
parents:
18262
diff
changeset
|
311 #endif |
|
41491d196748
Provide a definition for offsetof.
Martin v. Löwis <martin@v.loewis.de>
parents:
18262
diff
changeset
|
312 |
|
25994
bb813346b227
Use O_NONBLOCK rather than O_NDELAY, so we get POSIX non-blocking I/O.
Neal Norwitz <nnorwitz@gmail.com>
parents:
25327
diff
changeset
|
313 #ifndef O_NONBLOCK |
|
bb813346b227
Use O_NONBLOCK rather than O_NDELAY, so we get POSIX non-blocking I/O.
Neal Norwitz <nnorwitz@gmail.com>
parents:
25327
diff
changeset
|
314 # define O_NONBLOCK O_NDELAY |
|
2055
cf31eab6ab5a
Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents:
1970
diff
changeset
|
315 #endif |
|
cf31eab6ab5a
Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents:
1970
diff
changeset
|
316 |
|
33427
8480b72aa624
Apply patch from http://python.org/sf/728330 to fix socket module compilation on Solaris 2.6, HP-UX 11, AIX 5.1 and (possibly) some IRIX versions.
Trent Mick <trentm@activestate.com>
parents:
33280
diff
changeset
|
317 /* include Python's addrinfo.h unless it causes trouble */ |
|
8480b72aa624
Apply patch from http://python.org/sf/728330 to fix socket module compilation on Solaris 2.6, HP-UX 11, AIX 5.1 and (possibly) some IRIX versions.
Trent Mick <trentm@activestate.com>
parents:
33280
diff
changeset
|
318 #if defined(__sgi) && _COMPILER_VERSION>700 && defined(_SS_ALIGNSIZE) |
|
8480b72aa624
Apply patch from http://python.org/sf/728330 to fix socket module compilation on Solaris 2.6, HP-UX 11, AIX 5.1 and (possibly) some IRIX versions.
Trent Mick <trentm@activestate.com>
parents:
33280
diff
changeset
|
319 /* Do not include addinfo.h on some newer IRIX versions. |
|
8480b72aa624
Apply patch from http://python.org/sf/728330 to fix socket module compilation on Solaris 2.6, HP-UX 11, AIX 5.1 and (possibly) some IRIX versions.
Trent Mick <trentm@activestate.com>
parents:
33280
diff
changeset
|
320 * _SS_ALIGNSIZE is defined in sys/socket.h by 6.5.21, |
|
8480b72aa624
Apply patch from http://python.org/sf/728330 to fix socket module compilation on Solaris 2.6, HP-UX 11, AIX 5.1 and (possibly) some IRIX versions.
Trent Mick <trentm@activestate.com>
parents:
33280
diff
changeset
|
321 * for example, but not by 6.5.10. |
|
8480b72aa624
Apply patch from http://python.org/sf/728330 to fix socket module compilation on Solaris 2.6, HP-UX 11, AIX 5.1 and (possibly) some IRIX versions.
Trent Mick <trentm@activestate.com>
parents:
33280
diff
changeset
|
322 */ |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
323 #elif defined(_MSC_VER) && _MSC_VER>1201 |
|
33427
8480b72aa624
Apply patch from http://python.org/sf/728330 to fix socket module compilation on Solaris 2.6, HP-UX 11, AIX 5.1 and (possibly) some IRIX versions.
Trent Mick <trentm@activestate.com>
parents:
33280
diff
changeset
|
324 /* Do not include addrinfo.h for MSVC7 or greater. 'addrinfo' and |
|
8480b72aa624
Apply patch from http://python.org/sf/728330 to fix socket module compilation on Solaris 2.6, HP-UX 11, AIX 5.1 and (possibly) some IRIX versions.
Trent Mick <trentm@activestate.com>
parents:
33280
diff
changeset
|
325 * EAI_* constants are defined in (the already included) ws2tcpip.h. |
|
8480b72aa624
Apply patch from http://python.org/sf/728330 to fix socket module compilation on Solaris 2.6, HP-UX 11, AIX 5.1 and (possibly) some IRIX versions.
Trent Mick <trentm@activestate.com>
parents:
33280
diff
changeset
|
326 */ |
|
8480b72aa624
Apply patch from http://python.org/sf/728330 to fix socket module compilation on Solaris 2.6, HP-UX 11, AIX 5.1 and (possibly) some IRIX versions.
Trent Mick <trentm@activestate.com>
parents:
33280
diff
changeset
|
327 #else |
|
8480b72aa624
Apply patch from http://python.org/sf/728330 to fix socket module compilation on Solaris 2.6, HP-UX 11, AIX 5.1 and (possibly) some IRIX versions.
Trent Mick <trentm@activestate.com>
parents:
33280
diff
changeset
|
328 # include "addrinfo.h" |
|
8480b72aa624
Apply patch from http://python.org/sf/728330 to fix socket module compilation on Solaris 2.6, HP-UX 11, AIX 5.1 and (possibly) some IRIX versions.
Trent Mick <trentm@activestate.com>
parents:
33280
diff
changeset
|
329 #endif |
|
33066
cda0455bd0a0
Bug #1001857: socketmodule does not build under cygwin
Jason Tishler <jason@tishler.net>
parents:
33063
diff
changeset
|
330 |
|
18262
6b0a8157be3b
Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents:
18253
diff
changeset
|
331 #ifndef HAVE_INET_PTON |
|
43926
2de7d00fbf19
The patch from weck does a better job than my original idea. Thanks!
Christian Heimes <christian@cheimes.de>
parents:
43881
diff
changeset
|
332 #if !defined(NTDDI_VERSION) || (NTDDI_VERSION < NTDDI_LONGHORN) |
|
23723
2f6f8708e3e9
Whitespace normalization, folding long lines, uniform comment
Guido van Rossum <guido@python.org>
parents:
23722
diff
changeset
|
333 int inet_pton(int af, const char *src, void *dst); |
|
18790
7cd22bf56d7b
Silence warnings in MSVC++: hide unused variables, add constness back to
Martin v. Löwis <martin@v.loewis.de>
parents:
18753
diff
changeset
|
334 const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); |
|
18262
6b0a8157be3b
Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents:
18253
diff
changeset
|
335 #endif |
| 43874 | 336 #endif |
|
18262
6b0a8157be3b
Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents:
18253
diff
changeset
|
337 |
|
18954
fefcc1e80cee
Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents:
18915
diff
changeset
|
338 #ifdef __APPLE__ |
|
fefcc1e80cee
Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents:
18915
diff
changeset
|
339 /* On OS X, getaddrinfo returns no error indication of lookup |
|
fefcc1e80cee
Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents:
18915
diff
changeset
|
340 failure, so we must use the emulation instead of the libinfo |
|
fefcc1e80cee
Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents:
18915
diff
changeset
|
341 implementation. Unfortunately, performing an autoconf test |
|
fefcc1e80cee
Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents:
18915
diff
changeset
|
342 for this bug would require DNS access for the machine performing |
|
fefcc1e80cee
Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents:
18915
diff
changeset
|
343 the configuration, which is not acceptable. Therefore, we |
|
fefcc1e80cee
Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents:
18915
diff
changeset
|
344 determine the bug just by checking for __APPLE__. If this bug |
|
fefcc1e80cee
Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents:
18915
diff
changeset
|
345 gets ever fixed, perhaps checking for sys/version.h would be |
|
fefcc1e80cee
Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents:
18915
diff
changeset
|
346 appropriate, which is 10/0 on the system with the bug. */ |
|
24078
702a5900df7d
Mac OS X Jaguar (developer preview) seems to have a working getaddrinfo().
Jack Jansen <jack.jansen@cwi.nl>
parents:
23832
diff
changeset
|
347 #ifndef HAVE_GETNAMEINFO |
|
702a5900df7d
Mac OS X Jaguar (developer preview) seems to have a working getaddrinfo().
Jack Jansen <jack.jansen@cwi.nl>
parents:
23832
diff
changeset
|
348 /* This bug seems to be fixed in Jaguar. Ths easiest way I could |
|
702a5900df7d
Mac OS X Jaguar (developer preview) seems to have a working getaddrinfo().
Jack Jansen <jack.jansen@cwi.nl>
parents:
23832
diff
changeset
|
349 Find to check for Jaguar is that it has getnameinfo(), which |
|
702a5900df7d
Mac OS X Jaguar (developer preview) seems to have a working getaddrinfo().
Jack Jansen <jack.jansen@cwi.nl>
parents:
23832
diff
changeset
|
350 older releases don't have */ |
|
18954
fefcc1e80cee
Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents:
18915
diff
changeset
|
351 #undef HAVE_GETADDRINFO |
|
fefcc1e80cee
Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents:
18915
diff
changeset
|
352 #endif |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
353 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
354 #ifdef HAVE_INET_ATON |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
355 #define USE_INET_ATON_WEAKLINK |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
356 #endif |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
357 |
|
24078
702a5900df7d
Mac OS X Jaguar (developer preview) seems to have a working getaddrinfo().
Jack Jansen <jack.jansen@cwi.nl>
parents:
23832
diff
changeset
|
358 #endif |
|
18954
fefcc1e80cee
Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents:
18915
diff
changeset
|
359 |
|
18246
c4db09b87424
Patch #401196: Configuration machinery for IPv6.
Martin v. Löwis <martin@v.loewis.de>
parents:
17806
diff
changeset
|
360 /* I know this is a bad practice, but it is the easiest... */ |
|
18954
fefcc1e80cee
Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents:
18915
diff
changeset
|
361 #if !defined(HAVE_GETADDRINFO) |
|
28913
b04c074586aa
Patch #725942: Always rename emulation functions.
Martin v. Löwis <martin@v.loewis.de>
parents:
28818
diff
changeset
|
362 /* avoid clashes with the C library definition of the symbol. */ |
|
b04c074586aa
Patch #725942: Always rename emulation functions.
Martin v. Löwis <martin@v.loewis.de>
parents:
28818
diff
changeset
|
363 #define getaddrinfo fake_getaddrinfo |
|
b04c074586aa
Patch #725942: Always rename emulation functions.
Martin v. Löwis <martin@v.loewis.de>
parents:
28818
diff
changeset
|
364 #define gai_strerror fake_gai_strerror |
|
b04c074586aa
Patch #725942: Always rename emulation functions.
Martin v. Löwis <martin@v.loewis.de>
parents:
28818
diff
changeset
|
365 #define freeaddrinfo fake_freeaddrinfo |
|
18246
c4db09b87424
Patch #401196: Configuration machinery for IPv6.
Martin v. Löwis <martin@v.loewis.de>
parents:
17806
diff
changeset
|
366 #include "getaddrinfo.c" |
|
c4db09b87424
Patch #401196: Configuration machinery for IPv6.
Martin v. Löwis <martin@v.loewis.de>
parents:
17806
diff
changeset
|
367 #endif |
|
18954
fefcc1e80cee
Do not use the system getaddrinfo on Mac OS X. Fixes bug #445928.
Martin v. Löwis <martin@v.loewis.de>
parents:
18915
diff
changeset
|
368 #if !defined(HAVE_GETNAMEINFO) |
|
28913
b04c074586aa
Patch #725942: Always rename emulation functions.
Martin v. Löwis <martin@v.loewis.de>
parents:
28818
diff
changeset
|
369 #define getnameinfo fake_getnameinfo |
|
18246
c4db09b87424
Patch #401196: Configuration machinery for IPv6.
Martin v. Löwis <martin@v.loewis.de>
parents:
17806
diff
changeset
|
370 #include "getnameinfo.c" |
|
c4db09b87424
Patch #401196: Configuration machinery for IPv6.
Martin v. Löwis <martin@v.loewis.de>
parents:
17806
diff
changeset
|
371 #endif |
|
c4db09b87424
Patch #401196: Configuration machinery for IPv6.
Martin v. Löwis <martin@v.loewis.de>
parents:
17806
diff
changeset
|
372 |
|
43881
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
373 #ifdef MS_WINDOWS |
|
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
374 /* On Windows a socket is really a handle not an fd */ |
|
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
375 static SOCKET |
|
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
376 dup_socket(SOCKET handle) |
|
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
377 { |
|
64393
633166d4fc12
Merged revisions 84450 via svnmerge from
Daniel Stutzbach <daniel@stutzbachenterprises.com>
parents:
64121
diff
changeset
|
378 WSAPROTOCOL_INFO info; |
|
633166d4fc12
Merged revisions 84450 via svnmerge from
Daniel Stutzbach <daniel@stutzbachenterprises.com>
parents:
64121
diff
changeset
|
379 |
|
633166d4fc12
Merged revisions 84450 via svnmerge from
Daniel Stutzbach <daniel@stutzbachenterprises.com>
parents:
64121
diff
changeset
|
380 if (WSADuplicateSocket(handle, GetCurrentProcessId(), &info)) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
381 return INVALID_SOCKET; |
|
64393
633166d4fc12
Merged revisions 84450 via svnmerge from
Daniel Stutzbach <daniel@stutzbachenterprises.com>
parents:
64121
diff
changeset
|
382 |
|
633166d4fc12
Merged revisions 84450 via svnmerge from
Daniel Stutzbach <daniel@stutzbachenterprises.com>
parents:
64121
diff
changeset
|
383 return WSASocket(FROM_PROTOCOL_INFO, FROM_PROTOCOL_INFO, |
|
633166d4fc12
Merged revisions 84450 via svnmerge from
Daniel Stutzbach <daniel@stutzbachenterprises.com>
parents:
64121
diff
changeset
|
384 FROM_PROTOCOL_INFO, &info, 0, 0); |
|
43881
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
385 } |
|
12436
dff7b26116de
Use an explicit macro SOCKETCLOSE which expands to closesocket (on
Guido van Rossum <guido@python.org>
parents:
12319
diff
changeset
|
386 #define SOCKETCLOSE closesocket |
|
43881
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
387 #else |
|
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
388 /* On Unix we can use dup to duplicate the file descriptor of a socket*/ |
|
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
389 #define dup_socket(fd) dup(fd) |
|
1792
a584b4bbbc59
Changes to make it work and compile on NT, by Mark Hammond.
Guido van Rossum <guido@python.org>
parents:
1760
diff
changeset
|
390 #endif |
|
a584b4bbbc59
Changes to make it work and compile on NT, by Mark Hammond.
Guido van Rossum <guido@python.org>
parents:
1760
diff
changeset
|
391 |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
392 #ifdef MS_WIN32 |
|
23723
2f6f8708e3e9
Whitespace normalization, folding long lines, uniform comment
Guido van Rossum <guido@python.org>
parents:
23722
diff
changeset
|
393 #define EAFNOSUPPORT WSAEAFNOSUPPORT |
|
2f6f8708e3e9
Whitespace normalization, folding long lines, uniform comment
Guido van Rossum <guido@python.org>
parents:
23722
diff
changeset
|
394 #define snprintf _snprintf |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
395 #endif |
|
13171
c17fd2ca6659
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
12712
diff
changeset
|
396 |
|
22115
d104bb50a194
OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
22096
diff
changeset
|
397 #if defined(PYOS_OS2) && !defined(PYCC_GCC) |
|
12436
dff7b26116de
Use an explicit macro SOCKETCLOSE which expands to closesocket (on
Guido van Rossum <guido@python.org>
parents:
12319
diff
changeset
|
398 #define SOCKETCLOSE soclose |
|
6626
5e31d381fa47
os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents:
6618
diff
changeset
|
399 #define NO_DUP /* Sockets are Not Actual File Handles under OS/2 */ |
|
5e31d381fa47
os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents:
6618
diff
changeset
|
400 #endif |
|
5e31d381fa47
os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents:
6618
diff
changeset
|
401 |
|
12436
dff7b26116de
Use an explicit macro SOCKETCLOSE which expands to closesocket (on
Guido van Rossum <guido@python.org>
parents:
12319
diff
changeset
|
402 #ifndef SOCKETCLOSE |
|
dff7b26116de
Use an explicit macro SOCKETCLOSE which expands to closesocket (on
Guido van Rossum <guido@python.org>
parents:
12319
diff
changeset
|
403 #define SOCKETCLOSE close |
|
dff7b26116de
Use an explicit macro SOCKETCLOSE which expands to closesocket (on
Guido van Rossum <guido@python.org>
parents:
12319
diff
changeset
|
404 #endif |
|
dff7b26116de
Use an explicit macro SOCKETCLOSE which expands to closesocket (on
Guido van Rossum <guido@python.org>
parents:
12319
diff
changeset
|
405 |
|
65429
15859740aae6
Merged revisions 85586-85587,85596-85598 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65245
diff
changeset
|
406 #if (defined(HAVE_BLUETOOTH_H) || defined(HAVE_BLUETOOTH_BLUETOOTH_H)) && !defined(__NetBSD__) && !defined(__DragonFly__) |
|
31443
afb4c9726d1a
Add FreeBSD support for bluetooth sockets.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
31441
diff
changeset
|
407 #define USE_BLUETOOTH 1 |
|
afb4c9726d1a
Add FreeBSD support for bluetooth sockets.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
31441
diff
changeset
|
408 #if defined(__FreeBSD__) |
|
afb4c9726d1a
Add FreeBSD support for bluetooth sockets.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
31441
diff
changeset
|
409 #define BTPROTO_L2CAP BLUETOOTH_PROTO_L2CAP |
|
afb4c9726d1a
Add FreeBSD support for bluetooth sockets.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
31441
diff
changeset
|
410 #define BTPROTO_RFCOMM BLUETOOTH_PROTO_RFCOMM |
|
40893
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40638
diff
changeset
|
411 #define BTPROTO_HCI BLUETOOTH_PROTO_HCI |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41943
diff
changeset
|
412 #define SOL_HCI SOL_HCI_RAW |
|
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41943
diff
changeset
|
413 #define HCI_FILTER SO_HCI_RAW_FILTER |
|
31443
afb4c9726d1a
Add FreeBSD support for bluetooth sockets.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
31441
diff
changeset
|
414 #define sockaddr_l2 sockaddr_l2cap |
|
afb4c9726d1a
Add FreeBSD support for bluetooth sockets.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
31441
diff
changeset
|
415 #define sockaddr_rc sockaddr_rfcomm |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41943
diff
changeset
|
416 #define hci_dev hci_node |
|
31443
afb4c9726d1a
Add FreeBSD support for bluetooth sockets.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
31441
diff
changeset
|
417 #define _BT_L2_MEMB(sa, memb) ((sa)->l2cap_##memb) |
|
afb4c9726d1a
Add FreeBSD support for bluetooth sockets.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
31441
diff
changeset
|
418 #define _BT_RC_MEMB(sa, memb) ((sa)->rfcomm_##memb) |
|
40893
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40638
diff
changeset
|
419 #define _BT_HCI_MEMB(sa, memb) ((sa)->hci_##memb) |
|
65429
15859740aae6
Merged revisions 85586-85587,85596-85598 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65245
diff
changeset
|
420 #elif defined(__NetBSD__) || defined(__DragonFly__) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
421 #define sockaddr_l2 sockaddr_bt |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
422 #define sockaddr_rc sockaddr_bt |
|
40893
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40638
diff
changeset
|
423 #define sockaddr_hci sockaddr_bt |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
424 #define sockaddr_sco sockaddr_bt |
|
65429
15859740aae6
Merged revisions 85586-85587,85596-85598 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65245
diff
changeset
|
425 #define SOL_HCI BTPROTO_HCI |
|
15859740aae6
Merged revisions 85586-85587,85596-85598 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65245
diff
changeset
|
426 #define HCI_DATA_DIR SO_HCI_DIRECTION |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
427 #define _BT_L2_MEMB(sa, memb) ((sa)->bt_##memb) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
428 #define _BT_RC_MEMB(sa, memb) ((sa)->bt_##memb) |
|
40893
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40638
diff
changeset
|
429 #define _BT_HCI_MEMB(sa, memb) ((sa)->bt_##memb) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
430 #define _BT_SCO_MEMB(sa, memb) ((sa)->bt_##memb) |
|
31443
afb4c9726d1a
Add FreeBSD support for bluetooth sockets.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
31441
diff
changeset
|
431 #else |
|
afb4c9726d1a
Add FreeBSD support for bluetooth sockets.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
31441
diff
changeset
|
432 #define _BT_L2_MEMB(sa, memb) ((sa)->l2_##memb) |
|
afb4c9726d1a
Add FreeBSD support for bluetooth sockets.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
31441
diff
changeset
|
433 #define _BT_RC_MEMB(sa, memb) ((sa)->rc_##memb) |
|
40893
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40638
diff
changeset
|
434 #define _BT_HCI_MEMB(sa, memb) ((sa)->hci_##memb) |
|
31443
afb4c9726d1a
Add FreeBSD support for bluetooth sockets.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
31441
diff
changeset
|
435 #define _BT_SCO_MEMB(sa, memb) ((sa)->sco_##memb) |
|
afb4c9726d1a
Add FreeBSD support for bluetooth sockets.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
31441
diff
changeset
|
436 #endif |
|
afb4c9726d1a
Add FreeBSD support for bluetooth sockets.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
31441
diff
changeset
|
437 #endif |
|
afb4c9726d1a
Add FreeBSD support for bluetooth sockets.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
31441
diff
changeset
|
438 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
439 #ifdef __VMS |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
440 /* TCP/IP Services for VMS uses a maximum send/recv buffer length */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
441 #define SEGMENT_SIZE (32 * 1024 -1) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
442 #endif |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
443 |
|
74142
683a1b1ff15d
Issue #8623: Fix some strict-aliasing warnings. Patch by David Watson.
Charles-François Natali <neologix@free.fr>
parents:
74012
diff
changeset
|
444 /* Convert "sock_addr_t *" to "struct sockaddr *". */ |
|
683a1b1ff15d
Issue #8623: Fix some strict-aliasing warnings. Patch by David Watson.
Charles-François Natali <neologix@free.fr>
parents:
74012
diff
changeset
|
445 #define SAS2SA(x) (&((x)->sa)) |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
446 |
|
28953
09422c301826
Patch #724588: Check whether the address of hstrerror and inet_pton can
Martin v. Löwis <martin@v.loewis.de>
parents:
28949
diff
changeset
|
447 /* |
|
09422c301826
Patch #724588: Check whether the address of hstrerror and inet_pton can
Martin v. Löwis <martin@v.loewis.de>
parents:
28949
diff
changeset
|
448 * Constants for getnameinfo() |
|
09422c301826
Patch #724588: Check whether the address of hstrerror and inet_pton can
Martin v. Löwis <martin@v.loewis.de>
parents:
28949
diff
changeset
|
449 */ |
|
09422c301826
Patch #724588: Check whether the address of hstrerror and inet_pton can
Martin v. Löwis <martin@v.loewis.de>
parents:
28949
diff
changeset
|
450 #if !defined(NI_MAXHOST) |
|
09422c301826
Patch #724588: Check whether the address of hstrerror and inet_pton can
Martin v. Löwis <martin@v.loewis.de>
parents:
28949
diff
changeset
|
451 #define NI_MAXHOST 1025 |
|
09422c301826
Patch #724588: Check whether the address of hstrerror and inet_pton can
Martin v. Löwis <martin@v.loewis.de>
parents:
28949
diff
changeset
|
452 #endif |
|
09422c301826
Patch #724588: Check whether the address of hstrerror and inet_pton can
Martin v. Löwis <martin@v.loewis.de>
parents:
28949
diff
changeset
|
453 #if !defined(NI_MAXSERV) |
|
09422c301826
Patch #724588: Check whether the address of hstrerror and inet_pton can
Martin v. Löwis <martin@v.loewis.de>
parents:
28949
diff
changeset
|
454 #define NI_MAXSERV 32 |
|
09422c301826
Patch #724588: Check whether the address of hstrerror and inet_pton can
Martin v. Löwis <martin@v.loewis.de>
parents:
28949
diff
changeset
|
455 #endif |
|
09422c301826
Patch #724588: Check whether the address of hstrerror and inet_pton can
Martin v. Löwis <martin@v.loewis.de>
parents:
28949
diff
changeset
|
456 |
|
41809
8e062e572ea4
Sockets facelift. APIs that could return binary data (e.g. aton() and
Guido van Rossum <guido@python.org>
parents:
41770
diff
changeset
|
457 #ifndef INVALID_SOCKET /* MS defines this */ |
|
8e062e572ea4
Sockets facelift. APIs that could return binary data (e.g. aton() and
Guido van Rossum <guido@python.org>
parents:
41770
diff
changeset
|
458 #define INVALID_SOCKET (-1) |
|
8e062e572ea4
Sockets facelift. APIs that could return binary data (e.g. aton() and
Guido van Rossum <guido@python.org>
parents:
41770
diff
changeset
|
459 #endif |
|
8e062e572ea4
Sockets facelift. APIs that could return binary data (e.g. aton() and
Guido van Rossum <guido@python.org>
parents:
41770
diff
changeset
|
460 |
|
20727
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
461 /* XXX There's a problem here: *static* functions are not supposed to have |
|
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
462 a Py prefix (or use CapitalizedWords). Later... */ |
|
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
463 |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
464 /* Global variable holding the exception type for errors detected |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
465 by this module (but not argument type or memory errors, etc.). */ |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
466 static PyObject *socket_herror; |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
467 static PyObject *socket_gaierror; |
|
29651
0a3751df4195
SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents:
29066
diff
changeset
|
468 static PyObject *socket_timeout; |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
469 |
|
21970
b1a871dc5196
Moved the declaration of PySocketSock_Type from socketmodule.h to
Tim Peters <tim.peters@gmail.com>
parents:
21964
diff
changeset
|
470 /* A forward reference to the socket type object. |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
471 The sock_type variable contains pointers to various functions, |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
472 some of which call new_sockobject(), which uses sock_type, so |
|
21970
b1a871dc5196
Moved the declaration of PySocketSock_Type from socketmodule.h to
Tim Peters <tim.peters@gmail.com>
parents:
21964
diff
changeset
|
473 there has to be a circular reference. */ |
|
24280
1598a1e473e2
staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
24078
diff
changeset
|
474 static PyTypeObject sock_type; |
|
16947
b25131bc6ec7
RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents:
16472
diff
changeset
|
475 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
476 #if defined(HAVE_POLL_H) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
477 #include <poll.h> |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
478 #elif defined(HAVE_SYS_POLL_H) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
479 #include <sys/poll.h> |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
480 #endif |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
481 |
|
72029
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
482 /* Largest value to try to store in a socklen_t (used when handling |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
483 ancillary data). POSIX requires socklen_t to hold at least |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
484 (2**31)-1 and recommends against storing larger values, but |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
485 socklen_t was originally int in the BSD interface, so to be on the |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
486 safe side we use the smaller of (2**31)-1 and INT_MAX. */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
487 #if INT_MAX > 0x7fffffff |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
488 #define SOCKLEN_T_LIMIT 0x7fffffff |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
489 #else |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
490 #define SOCKLEN_T_LIMIT INT_MAX |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
491 #endif |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
492 |
|
72115
852ca32eb18d
Issue #12287: Fix a stack corruption in ossaudiodev module when the FD is
Charles-François Natali <neologix@free.fr>
parents:
71864
diff
changeset
|
493 #ifdef HAVE_POLL |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
494 /* Instead of select(), we'll use poll() since poll() works on any fd. */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
495 #define IS_SELECTABLE(s) 1 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
496 /* Can we call select() with this socket without a buffer overrun? */ |
|
36476
c073dffbe70e
Introduce Py_SOCKET_FD_CAN_BE_GE_FD_SETSIZE.
Martin v. Löwis <martin@v.loewis.de>
parents:
36452
diff
changeset
|
497 #else |
|
72115
852ca32eb18d
Issue #12287: Fix a stack corruption in ossaudiodev module when the FD is
Charles-François Natali <neologix@free.fr>
parents:
71864
diff
changeset
|
498 /* If there's no timeout left, we don't have to call select, so it's a safe, |
|
852ca32eb18d
Issue #12287: Fix a stack corruption in ossaudiodev module when the FD is
Charles-François Natali <neologix@free.fr>
parents:
71864
diff
changeset
|
499 * little white lie. */ |
|
852ca32eb18d
Issue #12287: Fix a stack corruption in ossaudiodev module when the FD is
Charles-François Natali <neologix@free.fr>
parents:
71864
diff
changeset
|
500 #define IS_SELECTABLE(s) (_PyIsSelectable_fd((s)->sock_fd) || (s)->sock_timeout <= 0.0) |
|
36476
c073dffbe70e
Introduce Py_SOCKET_FD_CAN_BE_GE_FD_SETSIZE.
Martin v. Löwis <martin@v.loewis.de>
parents:
36452
diff
changeset
|
501 #endif |
|
36452
7789cc557e1e
Bug #876637, prevent stack corruption when socket descriptor
Neal Norwitz <nnorwitz@gmail.com>
parents:
36324
diff
changeset
|
502 |
|
7789cc557e1e
Bug #876637, prevent stack corruption when socket descriptor
Neal Norwitz <nnorwitz@gmail.com>
parents:
36324
diff
changeset
|
503 static PyObject* |
|
7789cc557e1e
Bug #876637, prevent stack corruption when socket descriptor
Neal Norwitz <nnorwitz@gmail.com>
parents:
36324
diff
changeset
|
504 select_error(void) |
|
7789cc557e1e
Bug #876637, prevent stack corruption when socket descriptor
Neal Norwitz <nnorwitz@gmail.com>
parents:
36324
diff
changeset
|
505 { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
506 PyErr_SetString(PyExc_OSError, "unable to select on socket"); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
507 return NULL; |
|
36452
7789cc557e1e
Bug #876637, prevent stack corruption when socket descriptor
Neal Norwitz <nnorwitz@gmail.com>
parents:
36324
diff
changeset
|
508 } |
|
7789cc557e1e
Bug #876637, prevent stack corruption when socket descriptor
Neal Norwitz <nnorwitz@gmail.com>
parents:
36324
diff
changeset
|
509 |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
510 #ifdef MS_WINDOWS |
|
64991
6c1f10e07455
Fix compilation under Windows
Antoine Pitrou <solipsis@pitrou.net>
parents:
64988
diff
changeset
|
511 #ifndef WSAEAGAIN |
|
6c1f10e07455
Fix compilation under Windows
Antoine Pitrou <solipsis@pitrou.net>
parents:
64988
diff
changeset
|
512 #define WSAEAGAIN WSAEWOULDBLOCK |
|
6c1f10e07455
Fix compilation under Windows
Antoine Pitrou <solipsis@pitrou.net>
parents:
64988
diff
changeset
|
513 #endif |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
514 #define CHECK_ERRNO(expected) \ |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
515 (WSAGetLastError() == WSA ## expected) |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
516 #else |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
517 #define CHECK_ERRNO(expected) \ |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
518 (errno == expected) |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
519 #endif |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
520 |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
521 /* Convenience function to raise an error according to errno |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
522 and return a NULL pointer from a function. */ |
| 294 | 523 |
| 1970 | 524 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
525 set_error(void) |
| 294 | 526 { |
|
3702
3408756ec601
changed windows test symbols; removed debug printf from sockets
Guido van Rossum <guido@python.org>
parents:
3700
diff
changeset
|
527 #ifdef MS_WINDOWS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
528 int err_no = WSAGetLastError(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
529 /* PyErr_SetExcFromWindowsErr() invokes FormatMessage() which |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
530 recognizes the error codes used by both GetLastError() and |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
531 WSAGetLastError */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
532 if (err_no) |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
533 return PyErr_SetExcFromWindowsErr(PyExc_OSError, err_no); |
|
1915
80818c106e3e
* Modules/xxmodule.c: integrated with xxobject.c by Jack
Guido van Rossum <guido@python.org>
parents:
1867
diff
changeset
|
534 #endif |
|
6626
5e31d381fa47
os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents:
6618
diff
changeset
|
535 |
|
22115
d104bb50a194
OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
22096
diff
changeset
|
536 #if defined(PYOS_OS2) && !defined(PYCC_GCC) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
537 if (sock_errno() != NO_ERROR) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
538 APIRET rc; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
539 ULONG msglen; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
540 char outbuf[100]; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
541 int myerrorcode = sock_errno(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
542 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
543 /* Retrieve socket-related error message from MPTN.MSG file */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
544 rc = DosGetMessage(NULL, 0, outbuf, sizeof(outbuf), |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
545 myerrorcode - SOCBASEERR + 26, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
546 "mptn.msg", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
547 &msglen); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
548 if (rc == NO_ERROR) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
549 PyObject *v; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
550 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
551 /* OS/2 doesn't guarantee a terminator */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
552 outbuf[msglen] = '\0'; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
553 if (strlen(outbuf) > 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
554 /* If non-empty msg, trim CRLF */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
555 char *lastc = &outbuf[ strlen(outbuf)-1 ]; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
556 while (lastc > outbuf && |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
557 isspace(Py_CHARMASK(*lastc))) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
558 /* Trim trailing whitespace (CRLF) */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
559 *lastc-- = '\0'; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
560 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
561 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
562 v = Py_BuildValue("(is)", myerrorcode, outbuf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
563 if (v != NULL) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
564 PyErr_SetObject(PyExc_OSError, v); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
565 Py_DECREF(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
566 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
567 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
568 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
569 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
570 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
571 |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
572 return PyErr_SetFromErrno(PyExc_OSError); |
| 294 | 573 } |
| 574 | |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
575 |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
576 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
577 set_herror(int h_error) |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
578 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
579 PyObject *v; |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
580 |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
581 #ifdef HAVE_HSTRERROR |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
582 v = Py_BuildValue("(is)", h_error, (char *)hstrerror(h_error)); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
583 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
584 v = Py_BuildValue("(is)", h_error, "host not found"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
585 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
586 if (v != NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
587 PyErr_SetObject(socket_herror, v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
588 Py_DECREF(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
589 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
590 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
591 return NULL; |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
592 } |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
593 |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
594 |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
595 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
596 set_gaierror(int error) |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
597 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
598 PyObject *v; |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
599 |
|
22096
9e5ff6747437
Patch #520062: Support IPv6 with VC.NET.
Martin v. Löwis <martin@v.loewis.de>
parents:
21970
diff
changeset
|
600 #ifdef EAI_SYSTEM |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
601 /* EAI_SYSTEM is not available on Windows XP. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
602 if (error == EAI_SYSTEM) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
603 return set_error(); |
|
22096
9e5ff6747437
Patch #520062: Support IPv6 with VC.NET.
Martin v. Löwis <martin@v.loewis.de>
parents:
21970
diff
changeset
|
604 #endif |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
605 |
|
19278
1afc3116c602
Fix portability problems with glibc 2.0, as reported in #449157.
Martin v. Löwis <martin@v.loewis.de>
parents:
19197
diff
changeset
|
606 #ifdef HAVE_GAI_STRERROR |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
607 v = Py_BuildValue("(is)", error, gai_strerror(error)); |
|
19278
1afc3116c602
Fix portability problems with glibc 2.0, as reported in #449157.
Martin v. Löwis <martin@v.loewis.de>
parents:
19197
diff
changeset
|
608 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
609 v = Py_BuildValue("(is)", error, "getaddrinfo failed"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
610 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
611 if (v != NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
612 PyErr_SetObject(socket_gaierror, v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
613 Py_DECREF(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
614 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
615 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
616 return NULL; |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
617 } |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
618 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
619 #ifdef __VMS |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
620 /* Function to send in segments */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
621 static int |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
622 sendsegmented(int sock_fd, char *buf, int len, int flags) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
623 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
624 int n = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
625 int remaining = len; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
626 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
627 while (remaining > 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
628 unsigned int segment; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
629 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
630 segment = (remaining >= SEGMENT_SIZE ? SEGMENT_SIZE : remaining); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
631 n = send(sock_fd, buf, segment, flags); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
632 if (n < 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
633 return n; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
634 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
635 remaining -= segment; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
636 buf += segment; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
637 } /* end while */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
638 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
639 return len; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
640 } |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
641 #endif |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
642 |
|
23723
2f6f8708e3e9
Whitespace normalization, folding long lines, uniform comment
Guido van Rossum <guido@python.org>
parents:
23722
diff
changeset
|
643 /* Function to perform the setting of socket blocking mode |
|
2f6f8708e3e9
Whitespace normalization, folding long lines, uniform comment
Guido van Rossum <guido@python.org>
parents:
23722
diff
changeset
|
644 internally. block = (1 | 0). */ |
|
23715
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
645 static int |
|
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
646 internal_setblocking(PySocketSockObject *s, int block) |
|
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
647 { |
|
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
648 #ifndef MS_WINDOWS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
649 int delay_flag; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
650 #endif |
|
65314
12442ac3f7dd
Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
65243
diff
changeset
|
651 #ifdef SOCK_NONBLOCK |
|
12442ac3f7dd
Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
65243
diff
changeset
|
652 if (block) |
|
12442ac3f7dd
Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
65243
diff
changeset
|
653 s->sock_type &= (~SOCK_NONBLOCK); |
|
12442ac3f7dd
Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
65243
diff
changeset
|
654 else |
|
12442ac3f7dd
Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
65243
diff
changeset
|
655 s->sock_type |= SOCK_NONBLOCK; |
|
12442ac3f7dd
Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
65243
diff
changeset
|
656 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
657 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
658 Py_BEGIN_ALLOW_THREADS |
|
23715
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
659 #ifndef MS_WINDOWS |
|
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
660 #if defined(PYOS_OS2) && !defined(PYCC_GCC) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
661 block = !block; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
662 ioctl(s->sock_fd, FIONBIO, (caddr_t)&block, sizeof(block)); |
|
26550
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
25994
diff
changeset
|
663 #elif defined(__VMS) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
664 block = !block; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
665 ioctl(s->sock_fd, FIONBIO, (unsigned int *)&block); |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
666 #else /* !PYOS_OS2 && !__VMS */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
667 delay_flag = fcntl(s->sock_fd, F_GETFL, 0); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
668 if (block) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
669 delay_flag &= (~O_NONBLOCK); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
670 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
671 delay_flag |= O_NONBLOCK; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
672 fcntl(s->sock_fd, F_SETFL, delay_flag); |
|
23715
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
673 #endif /* !PYOS_OS2 */ |
|
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
674 #else /* MS_WINDOWS */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
675 block = !block; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
676 ioctlsocket(s->sock_fd, FIONBIO, (u_long*)&block); |
|
23715
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
677 #endif /* MS_WINDOWS */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
678 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
679 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
680 /* Since these don't return anything */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
681 return 1; |
|
23715
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
682 } |
|
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
683 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
684 /* Do a select()/poll() on the socket, if necessary (sock_timeout > 0). |
|
23815
203d1412a7e8
Major overhaul of timeout sockets:
Guido van Rossum <guido@python.org>
parents:
23807
diff
changeset
|
685 The argument writing indicates the direction. |
|
29651
0a3751df4195
SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents:
29066
diff
changeset
|
686 This does not raise an exception; we'll let our caller do that |
|
0a3751df4195
SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents:
29066
diff
changeset
|
687 after they've reacquired the interpreter lock. |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
688 Returns 1 on timeout, -1 on error, 0 otherwise. */ |
|
29651
0a3751df4195
SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents:
29066
diff
changeset
|
689 static int |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
690 internal_select_ex(PySocketSockObject *s, int writing, double interval) |
|
23715
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
691 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
692 int n; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
693 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
694 /* Nothing to do unless we're in timeout mode (not non-blocking) */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
695 if (s->sock_timeout <= 0.0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
696 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
697 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
698 /* Guard against closed socket */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
699 if (s->sock_fd < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
700 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
701 |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
702 /* Handling this condition here simplifies the select loops */ |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
703 if (interval < 0.0) |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
704 return 1; |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
705 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
706 /* Prefer poll, if available, since you can poll() any fd |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
707 * which can't be done with select(). */ |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
708 #ifdef HAVE_POLL |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
709 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
710 struct pollfd pollfd; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
711 int timeout; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
712 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
713 pollfd.fd = s->sock_fd; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
714 pollfd.events = writing ? POLLOUT : POLLIN; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
715 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
716 /* s->sock_timeout is in seconds, timeout in ms */ |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
717 timeout = (int)(interval * 1000 + 0.5); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
718 n = poll(&pollfd, 1, timeout); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
719 } |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
720 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
721 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
722 /* Construct the arguments to select */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
723 fd_set fds; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
724 struct timeval tv; |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
725 tv.tv_sec = (int)interval; |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
726 tv.tv_usec = (int)((interval - tv.tv_sec) * 1e6); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
727 FD_ZERO(&fds); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
728 FD_SET(s->sock_fd, &fds); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
729 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
730 /* See if the socket is ready */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
731 if (writing) |
|
64121
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
732 n = select(Py_SAFE_DOWNCAST(s->sock_fd+1, SOCKET_T, int), |
|
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
733 NULL, &fds, NULL, &tv); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
734 else |
|
64121
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
735 n = select(Py_SAFE_DOWNCAST(s->sock_fd+1, SOCKET_T, int), |
|
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
736 &fds, NULL, NULL, &tv); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
737 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
738 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
739 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
740 if (n < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
741 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
742 if (n == 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
743 return 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
744 return 0; |
|
23715
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
745 } |
|
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
746 |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
747 static int |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
748 internal_select(PySocketSockObject *s, int writing) |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
749 { |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
750 return internal_select_ex(s, writing, s->sock_timeout); |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
751 } |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
752 |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
753 /* |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
754 Two macros for automatic retry of select() in case of false positives |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
755 (for example, select() could indicate a socket is ready for reading |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
756 but the data then discarded by the OS because of a wrong checksum). |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
757 Here is an example of use: |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
758 |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
759 BEGIN_SELECT_LOOP(s) |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
760 Py_BEGIN_ALLOW_THREADS |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
761 timeout = internal_select_ex(s, 0, interval); |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
762 if (!timeout) |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
763 outlen = recv(s->sock_fd, cbuf, len, flags); |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
764 Py_END_ALLOW_THREADS |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
765 if (timeout == 1) { |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
766 PyErr_SetString(socket_timeout, "timed out"); |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
767 return -1; |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
768 } |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
769 END_SELECT_LOOP(s) |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
770 */ |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
771 |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
772 #define BEGIN_SELECT_LOOP(s) \ |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
773 { \ |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
774 _PyTime_timeval now, deadline = {0, 0}; \ |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
775 double interval = s->sock_timeout; \ |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
776 int has_timeout = s->sock_timeout > 0.0; \ |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
777 if (has_timeout) { \ |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
778 _PyTime_gettimeofday(&now); \ |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
779 deadline = now; \ |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
780 _PyTime_ADD_SECONDS(deadline, s->sock_timeout); \ |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
781 } \ |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
782 while (1) { \ |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
783 errno = 0; \ |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
784 |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
785 #define END_SELECT_LOOP(s) \ |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
786 if (!has_timeout || \ |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
787 (!CHECK_ERRNO(EWOULDBLOCK) && !CHECK_ERRNO(EAGAIN))) \ |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
788 break; \ |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
789 _PyTime_gettimeofday(&now); \ |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
790 interval = _PyTime_INTERVAL(now, deadline); \ |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
791 } \ |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
792 } \ |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
793 |
|
20727
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
794 /* Initialize a new socket object. */ |
|
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
795 |
|
24305
428cbbf05639
A Python float is a C double; redeclare defaulttimeout as such; stops
Tim Peters <tim.peters@gmail.com>
parents:
24303
diff
changeset
|
796 static double defaulttimeout = -1.0; /* Default timeout for new sockets */ |
|
24293
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
797 |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
798 static void |
|
20727
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
799 init_sockobject(PySocketSockObject *s, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
800 SOCKET_T fd, int family, int type, int proto) |
|
20727
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
801 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
802 s->sock_fd = fd; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
803 s->sock_family = family; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
804 s->sock_type = type; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
805 s->sock_proto = proto; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
806 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
807 s->errorhandler = &set_error; |
|
65314
12442ac3f7dd
Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
65243
diff
changeset
|
808 #ifdef SOCK_NONBLOCK |
|
12442ac3f7dd
Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
65243
diff
changeset
|
809 if (type & SOCK_NONBLOCK) |
|
12442ac3f7dd
Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
65243
diff
changeset
|
810 s->sock_timeout = 0.0; |
|
12442ac3f7dd
Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
65243
diff
changeset
|
811 else |
|
12442ac3f7dd
Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
65243
diff
changeset
|
812 #endif |
|
12442ac3f7dd
Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
65243
diff
changeset
|
813 { |
|
12442ac3f7dd
Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
65243
diff
changeset
|
814 s->sock_timeout = defaulttimeout; |
|
12442ac3f7dd
Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
65243
diff
changeset
|
815 if (defaulttimeout >= 0.0) |
|
12442ac3f7dd
Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
65243
diff
changeset
|
816 internal_setblocking(s, 0); |
|
12442ac3f7dd
Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
65243
diff
changeset
|
817 } |
|
24293
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
818 |
|
20727
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
819 } |
|
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
820 |
|
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
821 |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
822 /* Create a new socket object. |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
823 This just creates the object and initializes it. |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
824 If the creation fails, return NULL and set an exception (implicit |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
825 in NEWOBJ()). */ |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
826 |
| 1970 | 827 static PySocketSockObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
828 new_sockobject(SOCKET_T fd, int family, int type, int proto) |
| 294 | 829 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
830 PySocketSockObject *s; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
831 s = (PySocketSockObject *) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
832 PyType_GenericNew(&sock_type, NULL, NULL); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
833 if (s != NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
834 init_sockobject(s, fd, family, type, proto); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
835 return s; |
| 294 | 836 } |
| 837 | |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
838 |
|
16947
b25131bc6ec7
RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents:
16472
diff
changeset
|
839 /* Lock to allow python interpreter to continue, but only allow one |
|
29035
e1d5ca8ab7dc
[ 731644] & [ 604210 ] Release the GIL around getaddrinfo(), yet protect
Just van Rossum <just@letterror.com>
parents:
28953
diff
changeset
|
840 thread to be in gethostbyname or getaddrinfo */ |
|
e1d5ca8ab7dc
[ 731644] & [ 604210 ] Release the GIL around getaddrinfo(), yet protect
Just van Rossum <just@letterror.com>
parents:
28953
diff
changeset
|
841 #if defined(USE_GETHOSTBYNAME_LOCK) || defined(USE_GETADDRINFO_LOCK) |
|
e1d5ca8ab7dc
[ 731644] & [ 604210 ] Release the GIL around getaddrinfo(), yet protect
Just van Rossum <just@letterror.com>
parents:
28953
diff
changeset
|
842 PyThread_type_lock netdb_lock; |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6718
diff
changeset
|
843 #endif |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6718
diff
changeset
|
844 |
|
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6718
diff
changeset
|
845 |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
846 /* Convert a string specifying a host name or one of a few symbolic |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
847 names to a numeric IP address. This usually calls gethostbyname() |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
848 to do the work; the names "" and "<broadcast>" are special. |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
849 Return the length (IPv4 should be 4 bytes), or negative if |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
850 an error occurred; then an exception is raised. */ |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
851 |
| 294 | 852 static int |
|
24411
8e266d0acd10
Pass length of result structure into setipaddr. Fixes bug #565747.
Martin v. Löwis <martin@v.loewis.de>
parents:
24380
diff
changeset
|
853 setipaddr(char *name, struct sockaddr *addr_ret, size_t addr_ret_size, int af) |
| 294 | 854 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
855 struct addrinfo hints, *res; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
856 int error; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
857 int d1, d2, d3, d4; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
858 char ch; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
859 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
860 memset((void *) addr_ret, '\0', sizeof(*addr_ret)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
861 if (name[0] == '\0') { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
862 int siz; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
863 memset(&hints, 0, sizeof(hints)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
864 hints.ai_family = af; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
865 hints.ai_socktype = SOCK_DGRAM; /*dummy*/ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
866 hints.ai_flags = AI_PASSIVE; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
867 Py_BEGIN_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
868 ACQUIRE_GETADDRINFO_LOCK |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
869 error = getaddrinfo(NULL, "0", &hints, &res); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
870 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
871 /* We assume that those thread-unsafe getaddrinfo() versions |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
872 *are* safe regarding their return value, ie. that a |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
873 subsequent call to getaddrinfo() does not destroy the |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
874 outcome of the first call. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
875 RELEASE_GETADDRINFO_LOCK |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
876 if (error) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
877 set_gaierror(error); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
878 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
879 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
880 switch (res->ai_family) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
881 case AF_INET: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
882 siz = 4; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
883 break; |
|
21128
15ff504632ed
Remove INET6 define. Use ENABLE_IPV6 instead.
Martin v. Löwis <martin@v.loewis.de>
parents:
21094
diff
changeset
|
884 #ifdef ENABLE_IPV6 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
885 case AF_INET6: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
886 siz = 16; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
887 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
888 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
889 default: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
890 freeaddrinfo(res); |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
891 PyErr_SetString(PyExc_OSError, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
892 "unsupported address family"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
893 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
894 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
895 if (res->ai_next) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
896 freeaddrinfo(res); |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
897 PyErr_SetString(PyExc_OSError, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
898 "wildcard resolved to multiple address"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
899 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
900 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
901 if (res->ai_addrlen < addr_ret_size) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
902 addr_ret_size = res->ai_addrlen; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
903 memcpy(addr_ret, res->ai_addr, addr_ret_size); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
904 freeaddrinfo(res); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
905 return siz; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
906 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
907 if (name[0] == '<' && strcmp(name, "<broadcast>") == 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
908 struct sockaddr_in *sin; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
909 if (af != AF_INET && af != AF_UNSPEC) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
910 PyErr_SetString(PyExc_OSError, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
911 "address family mismatched"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
912 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
913 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
914 sin = (struct sockaddr_in *)addr_ret; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
915 memset((void *) sin, '\0', sizeof(*sin)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
916 sin->sin_family = AF_INET; |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
917 #ifdef HAVE_SOCKADDR_SA_LEN |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
918 sin->sin_len = sizeof(*sin); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
919 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
920 sin->sin_addr.s_addr = INADDR_BROADCAST; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
921 return sizeof(sin->sin_addr); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
922 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
923 if (sscanf(name, "%d.%d.%d.%d%c", &d1, &d2, &d3, &d4, &ch) == 4 && |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
924 0 <= d1 && d1 <= 255 && 0 <= d2 && d2 <= 255 && |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
925 0 <= d3 && d3 <= 255 && 0 <= d4 && d4 <= 255) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
926 struct sockaddr_in *sin; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
927 sin = (struct sockaddr_in *)addr_ret; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
928 sin->sin_addr.s_addr = htonl( |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
929 ((long) d1 << 24) | ((long) d2 << 16) | |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
930 ((long) d3 << 8) | ((long) d4 << 0)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
931 sin->sin_family = AF_INET; |
|
28925
a769e079bb12
Patch 731209: Restore socketmodule's behaviour with dotted quad addresses
Anthony Baxter <anthonybaxter@gmail.com>
parents:
28913
diff
changeset
|
932 #ifdef HAVE_SOCKADDR_SA_LEN |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
933 sin->sin_len = sizeof(*sin); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
934 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
935 return 4; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
936 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
937 memset(&hints, 0, sizeof(hints)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
938 hints.ai_family = af; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
939 Py_BEGIN_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
940 ACQUIRE_GETADDRINFO_LOCK |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
941 error = getaddrinfo(name, NULL, &hints, &res); |
|
20661
f7009167dd67
After discussion with itojun, it was clarified that Tru64 is in error,
Martin v. Löwis <martin@v.loewis.de>
parents:
20654
diff
changeset
|
942 #if defined(__digital__) && defined(__unix__) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
943 if (error == EAI_NONAME && af == AF_UNSPEC) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
944 /* On Tru64 V5.1, numeric-to-addr conversion fails |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
945 if no address family is given. Assume IPv4 for now.*/ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
946 hints.ai_family = AF_INET; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
947 error = getaddrinfo(name, NULL, &hints, &res); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
948 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
949 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
950 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
951 RELEASE_GETADDRINFO_LOCK /* see comment in setipaddr() */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
952 if (error) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
953 set_gaierror(error); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
954 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
955 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
956 if (res->ai_addrlen < addr_ret_size) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
957 addr_ret_size = res->ai_addrlen; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
958 memcpy((char *) addr_ret, res->ai_addr, addr_ret_size); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
959 freeaddrinfo(res); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
960 switch (addr_ret->sa_family) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
961 case AF_INET: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
962 return 4; |
|
21128
15ff504632ed
Remove INET6 define. Use ENABLE_IPV6 instead.
Martin v. Löwis <martin@v.loewis.de>
parents:
21094
diff
changeset
|
963 #ifdef ENABLE_IPV6 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
964 case AF_INET6: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
965 return 16; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
966 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
967 default: |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
968 PyErr_SetString(PyExc_OSError, "unknown address family"); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
969 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
970 } |
| 294 | 971 } |
| 972 | |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
973 |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
974 /* Create a string object representing an IP address. |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
975 This is always a string of the form 'dd.dd.dd.dd' (with variable |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
976 size numbers). */ |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
977 |
| 1970 | 978 static PyObject * |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
979 makeipaddr(struct sockaddr *addr, int addrlen) |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
980 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
981 char buf[NI_MAXHOST]; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
982 int error; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
983 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
984 error = getnameinfo(addr, addrlen, buf, sizeof(buf), NULL, 0, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
985 NI_NUMERICHOST); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
986 if (error) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
987 set_gaierror(error); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
988 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
989 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
990 return PyUnicode_FromString(buf); |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
991 } |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
992 |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
993 |
|
32213
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
994 #ifdef USE_BLUETOOTH |
|
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
995 /* Convert a string representation of a Bluetooth address into a numeric |
|
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
996 address. Returns the length (6), or raises an exception and returns -1 if |
|
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
997 an error occurred. */ |
|
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
998 |
|
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
999 static int |
|
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
1000 setbdaddr(char *name, bdaddr_t *bdaddr) |
|
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
1001 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1002 unsigned int b0, b1, b2, b3, b4, b5; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1003 char ch; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1004 int n; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1005 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1006 n = sscanf(name, "%X:%X:%X:%X:%X:%X%c", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1007 &b5, &b4, &b3, &b2, &b1, &b0, &ch); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1008 if (n == 6 && (b0 | b1 | b2 | b3 | b4 | b5) < 256) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1009 bdaddr->b[0] = b0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1010 bdaddr->b[1] = b1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1011 bdaddr->b[2] = b2; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1012 bdaddr->b[3] = b3; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1013 bdaddr->b[4] = b4; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1014 bdaddr->b[5] = b5; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1015 return 6; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1016 } else { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
1017 PyErr_SetString(PyExc_OSError, "bad bluetooth address"); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1018 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1019 } |
|
32213
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
1020 } |
|
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
1021 |
|
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
1022 /* Create a string representation of the Bluetooth address. This is always a |
|
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
1023 string of the form 'XX:XX:XX:XX:XX:XX' where XX is a two digit hexadecimal |
|
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
1024 value (zero padded if necessary). */ |
|
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
1025 |
|
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
1026 static PyObject * |
|
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
1027 makebdaddr(bdaddr_t *bdaddr) |
|
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
1028 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1029 char buf[(6 * 2) + 5 + 1]; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1030 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1031 sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1032 bdaddr->b[5], bdaddr->b[4], bdaddr->b[3], |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1033 bdaddr->b[2], bdaddr->b[1], bdaddr->b[0]); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1034 return PyUnicode_FromString(buf); |
|
32213
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
1035 } |
|
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
1036 #endif |
|
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
1037 |
|
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
1038 |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
1039 /* Create an object representing the given socket address, |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
1040 suitable for passing it back to bind(), connect() etc. |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
1041 The family field of the sockaddr structure is inspected |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
1042 to determine what kind of address it really is. */ |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
1043 |
| 294 | 1044 /*ARGSUSED*/ |
| 1970 | 1045 static PyObject * |
|
64121
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
1046 makesockaddr(SOCKET_T sockfd, struct sockaddr *addr, size_t addrlen, int proto) |
| 294 | 1047 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1048 if (addrlen == 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1049 /* No address -- may be recvfrom() from known socket */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1050 Py_INCREF(Py_None); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1051 return Py_None; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1052 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1053 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1054 switch (addr->sa_family) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1055 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1056 case AF_INET: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1057 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1058 struct sockaddr_in *a; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1059 PyObject *addrobj = makeipaddr(addr, sizeof(*a)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1060 PyObject *ret = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1061 if (addrobj) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1062 a = (struct sockaddr_in *)addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1063 ret = Py_BuildValue("Oi", addrobj, ntohs(a->sin_port)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1064 Py_DECREF(addrobj); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1065 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1066 return ret; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1067 } |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
1068 |
|
31867
51aaceeaabe1
OS/2's TCP/IP stack supports AF_UNIX sockets, with the limitation that
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
31790
diff
changeset
|
1069 #if defined(AF_UNIX) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1070 case AF_UNIX: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1071 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1072 struct sockaddr_un *a = (struct sockaddr_un *) addr; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36684
diff
changeset
|
1073 #ifdef linux |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1074 if (a->sun_path[0] == 0) { /* Linux abstract namespace */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1075 addrlen -= offsetof(struct sockaddr_un, sun_path); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1076 return PyBytes_FromStringAndSize(a->sun_path, addrlen); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1077 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1078 else |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36684
diff
changeset
|
1079 #endif /* linux */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1080 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1081 /* regular NULL-terminated string */ |
|
73998
1f23bb74f4bc
Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents:
73683
diff
changeset
|
1082 return PyUnicode_DecodeFSDefault(a->sun_path); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1083 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1084 } |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
1085 #endif /* AF_UNIX */ |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
1086 |
|
36286
ae4480935016
Patch #1103116: AF_NETLINK sockets basic support.
Martin v. Löwis <martin@v.loewis.de>
parents:
36090
diff
changeset
|
1087 #if defined(AF_NETLINK) |
|
ae4480935016
Patch #1103116: AF_NETLINK sockets basic support.
Martin v. Löwis <martin@v.loewis.de>
parents:
36090
diff
changeset
|
1088 case AF_NETLINK: |
|
ae4480935016
Patch #1103116: AF_NETLINK sockets basic support.
Martin v. Löwis <martin@v.loewis.de>
parents:
36090
diff
changeset
|
1089 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1090 struct sockaddr_nl *a = (struct sockaddr_nl *) addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1091 return Py_BuildValue("II", a->nl_pid, a->nl_groups); |
|
36286
ae4480935016
Patch #1103116: AF_NETLINK sockets basic support.
Martin v. Löwis <martin@v.loewis.de>
parents:
36090
diff
changeset
|
1092 } |
|
ae4480935016
Patch #1103116: AF_NETLINK sockets basic support.
Martin v. Löwis <martin@v.loewis.de>
parents:
36090
diff
changeset
|
1093 #endif /* AF_NETLINK */ |
|
ae4480935016
Patch #1103116: AF_NETLINK sockets basic support.
Martin v. Löwis <martin@v.loewis.de>
parents:
36090
diff
changeset
|
1094 |
|
21128
15ff504632ed
Remove INET6 define. Use ENABLE_IPV6 instead.
Martin v. Löwis <martin@v.loewis.de>
parents:
21094
diff
changeset
|
1095 #ifdef ENABLE_IPV6 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1096 case AF_INET6: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1097 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1098 struct sockaddr_in6 *a; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1099 PyObject *addrobj = makeipaddr(addr, sizeof(*a)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1100 PyObject *ret = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1101 if (addrobj) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1102 a = (struct sockaddr_in6 *)addr; |
|
74233
cc346a672091
Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents:
72115
diff
changeset
|
1103 ret = Py_BuildValue("OiII", |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1104 addrobj, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1105 ntohs(a->sin6_port), |
|
74233
cc346a672091
Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents:
72115
diff
changeset
|
1106 ntohl(a->sin6_flowinfo), |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1107 a->sin6_scope_id); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1108 Py_DECREF(addrobj); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1109 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1110 return ret; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1111 } |
|
16410
3d4a7cd0bf17
SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16400
diff
changeset
|
1112 #endif |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
1113 |
|
32213
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
1114 #ifdef USE_BLUETOOTH |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1115 case AF_BLUETOOTH: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1116 switch (proto) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1117 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1118 case BTPROTO_L2CAP: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1119 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1120 struct sockaddr_l2 *a = (struct sockaddr_l2 *) addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1121 PyObject *addrobj = makebdaddr(&_BT_L2_MEMB(a, bdaddr)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1122 PyObject *ret = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1123 if (addrobj) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1124 ret = Py_BuildValue("Oi", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1125 addrobj, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1126 _BT_L2_MEMB(a, psm)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1127 Py_DECREF(addrobj); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1128 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1129 return ret; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1130 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1131 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1132 case BTPROTO_RFCOMM: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1133 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1134 struct sockaddr_rc *a = (struct sockaddr_rc *) addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1135 PyObject *addrobj = makebdaddr(&_BT_RC_MEMB(a, bdaddr)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1136 PyObject *ret = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1137 if (addrobj) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1138 ret = Py_BuildValue("Oi", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1139 addrobj, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1140 _BT_RC_MEMB(a, channel)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1141 Py_DECREF(addrobj); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1142 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1143 return ret; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1144 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1145 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1146 case BTPROTO_HCI: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1147 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1148 struct sockaddr_hci *a = (struct sockaddr_hci *) addr; |
|
65429
15859740aae6
Merged revisions 85586-85587,85596-85598 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65245
diff
changeset
|
1149 #if defined(__NetBSD__) || defined(__DragonFly__) |
|
15859740aae6
Merged revisions 85586-85587,85596-85598 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65245
diff
changeset
|
1150 return makebdaddr(&_BT_HCI_MEMB(a, bdaddr)); |
|
15859740aae6
Merged revisions 85586-85587,85596-85598 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65245
diff
changeset
|
1151 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1152 PyObject *ret = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1153 ret = Py_BuildValue("i", _BT_HCI_MEMB(a, dev)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1154 return ret; |
|
65429
15859740aae6
Merged revisions 85586-85587,85596-85598 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65245
diff
changeset
|
1155 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1156 } |
|
40893
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40638
diff
changeset
|
1157 |
|
32213
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
1158 #if !defined(__FreeBSD__) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1159 case BTPROTO_SCO: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1160 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1161 struct sockaddr_sco *a = (struct sockaddr_sco *) addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1162 return makebdaddr(&_BT_SCO_MEMB(a, bdaddr)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1163 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1164 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1165 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1166 default: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1167 PyErr_SetString(PyExc_ValueError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1168 "Unknown Bluetooth protocol"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1169 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1170 } |
|
32213
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
1171 #endif |
|
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
1172 |
|
65668
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
1173 #if defined(HAVE_NETPACKET_PACKET_H) && defined(SIOCGIFNAME) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1174 case AF_PACKET: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1175 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1176 struct sockaddr_ll *a = (struct sockaddr_ll *)addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1177 char *ifname = ""; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1178 struct ifreq ifr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1179 /* need to look up interface name give index */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1180 if (a->sll_ifindex) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1181 ifr.ifr_ifindex = a->sll_ifindex; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1182 if (ioctl(sockfd, SIOCGIFNAME, &ifr) == 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1183 ifname = ifr.ifr_name; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1184 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1185 return Py_BuildValue("shbhy#", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1186 ifname, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1187 ntohs(a->sll_protocol), |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1188 a->sll_pkttype, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1189 a->sll_hatype, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1190 a->sll_addr, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1191 a->sll_halen); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1192 } |
|
16410
3d4a7cd0bf17
SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16400
diff
changeset
|
1193 #endif |
|
16947
b25131bc6ec7
RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents:
16472
diff
changeset
|
1194 |
|
44568
305d7d2ce047
Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents:
44535
diff
changeset
|
1195 #ifdef HAVE_LINUX_TIPC_H |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1196 case AF_TIPC: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1197 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1198 struct sockaddr_tipc *a = (struct sockaddr_tipc *) addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1199 if (a->addrtype == TIPC_ADDR_NAMESEQ) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1200 return Py_BuildValue("IIIII", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1201 a->addrtype, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1202 a->addr.nameseq.type, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1203 a->addr.nameseq.lower, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1204 a->addr.nameseq.upper, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1205 a->scope); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1206 } else if (a->addrtype == TIPC_ADDR_NAME) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1207 return Py_BuildValue("IIIII", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1208 a->addrtype, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1209 a->addr.name.name.type, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1210 a->addr.name.name.instance, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1211 a->addr.name.name.instance, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1212 a->scope); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1213 } else if (a->addrtype == TIPC_ADDR_ID) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1214 return Py_BuildValue("IIIII", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1215 a->addrtype, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1216 a->addr.id.node, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1217 a->addr.id.ref, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1218 0, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1219 a->scope); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1220 } else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1221 PyErr_SetString(PyExc_ValueError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1222 "Invalid address type"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1223 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1224 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1225 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1226 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1227 |
|
72807
d4ce850b06b7
Issue #10141: fix socketmodule compilation on Linux systems with <linux/can.h>
Charles-François Natali <neologix@free.fr>
parents:
72758
diff
changeset
|
1228 #ifdef AF_CAN |
|
72758
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1229 case AF_CAN: |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1230 { |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1231 struct sockaddr_can *a = (struct sockaddr_can *)addr; |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1232 char *ifname = ""; |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1233 struct ifreq ifr; |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1234 /* need to look up interface name given index */ |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1235 if (a->can_ifindex) { |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1236 ifr.ifr_ifindex = a->can_ifindex; |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1237 if (ioctl(sockfd, SIOCGIFNAME, &ifr) == 0) |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1238 ifname = ifr.ifr_name; |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1239 } |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1240 |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1241 return Py_BuildValue("O&h", PyUnicode_DecodeFSDefault, |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1242 ifname, |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1243 a->can_family); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1244 } |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1245 #endif |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1246 |
|
74741
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1247 #ifdef PF_SYSTEM |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1248 case PF_SYSTEM: |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1249 switch(proto) { |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1250 #ifdef SYSPROTO_CONTROL |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1251 case SYSPROTO_CONTROL: |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1252 { |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1253 struct sockaddr_ctl *a = (struct sockaddr_ctl *)addr; |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1254 return Py_BuildValue("(II)", a->sc_id, a->sc_unit); |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1255 } |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1256 #endif |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1257 default: |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1258 PyErr_SetString(PyExc_ValueError, |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1259 "Invalid address type"); |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1260 return 0; |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1261 } |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1262 #endif |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1263 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1264 /* More cases here... */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1265 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1266 default: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1267 /* If we don't know the address family, don't raise an |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1268 exception -- return it as an (int, bytes) tuple. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1269 return Py_BuildValue("iy#", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1270 addr->sa_family, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1271 addr->sa_data, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1272 sizeof(addr->sa_data)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1273 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1274 } |
| 294 | 1275 } |
| 1276 | |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
1277 |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
1278 /* Parse a socket address argument according to the socket object's |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
1279 address family. Return 1 if the address was in the proper format, |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
1280 0 of not. The address is returned through addr_ret, its length |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
1281 through len_ret. */ |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
1282 |
| 294 | 1283 static int |
|
16947
b25131bc6ec7
RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents:
16472
diff
changeset
|
1284 getsockaddrarg(PySocketSockObject *s, PyObject *args, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1285 struct sockaddr *addr_ret, int *len_ret) |
| 294 | 1286 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1287 switch (s->sock_family) { |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
1288 |
|
31867
51aaceeaabe1
OS/2's TCP/IP stack supports AF_UNIX sockets, with the limitation that
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
31790
diff
changeset
|
1289 #if defined(AF_UNIX) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1290 case AF_UNIX: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1291 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1292 struct sockaddr_un* addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1293 char *path; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1294 int len; |
|
73998
1f23bb74f4bc
Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents:
73683
diff
changeset
|
1295 int retval = 0; |
|
1f23bb74f4bc
Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents:
73683
diff
changeset
|
1296 |
|
1f23bb74f4bc
Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents:
73683
diff
changeset
|
1297 /* PEP 383. Not using PyUnicode_FSConverter since we need to |
|
1f23bb74f4bc
Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents:
73683
diff
changeset
|
1298 allow embedded nulls on Linux. */ |
|
1f23bb74f4bc
Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents:
73683
diff
changeset
|
1299 if (PyUnicode_Check(args)) { |
|
1f23bb74f4bc
Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents:
73683
diff
changeset
|
1300 if ((args = PyUnicode_EncodeFSDefault(args)) == NULL) |
|
1f23bb74f4bc
Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents:
73683
diff
changeset
|
1301 return 0; |
|
1f23bb74f4bc
Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents:
73683
diff
changeset
|
1302 } |
|
1f23bb74f4bc
Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents:
73683
diff
changeset
|
1303 else |
|
1f23bb74f4bc
Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents:
73683
diff
changeset
|
1304 Py_INCREF(args); |
|
1f23bb74f4bc
Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents:
73683
diff
changeset
|
1305 if (!PyArg_Parse(args, "y#", &path, &len)) |
|
1f23bb74f4bc
Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents:
73683
diff
changeset
|
1306 goto unix_out; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1307 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1308 addr = (struct sockaddr_un*)addr_ret; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36684
diff
changeset
|
1309 #ifdef linux |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1310 if (len > 0 && path[0] == 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1311 /* Linux abstract namespace extension */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1312 if (len > sizeof addr->sun_path) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
1313 PyErr_SetString(PyExc_OSError, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1314 "AF_UNIX path too long"); |
|
73998
1f23bb74f4bc
Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents:
73683
diff
changeset
|
1315 goto unix_out; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1316 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1317 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1318 else |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36684
diff
changeset
|
1319 #endif /* linux */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1320 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1321 /* regular NULL-terminated string */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1322 if (len >= sizeof addr->sun_path) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
1323 PyErr_SetString(PyExc_OSError, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1324 "AF_UNIX path too long"); |
|
73998
1f23bb74f4bc
Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents:
73683
diff
changeset
|
1325 goto unix_out; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1326 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1327 addr->sun_path[len] = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1328 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1329 addr->sun_family = s->sock_family; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1330 memcpy(addr->sun_path, path, len); |
|
31896
ca2fb5cf2fd5
Fixes for AF_UNIX support on OS/2:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
31867
diff
changeset
|
1331 #if defined(PYOS_OS2) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1332 *len_ret = sizeof(*addr); |
|
31896
ca2fb5cf2fd5
Fixes for AF_UNIX support on OS/2:
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
31867
diff
changeset
|
1333 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1334 *len_ret = len + offsetof(struct sockaddr_un, sun_path); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1335 #endif |
|
73998
1f23bb74f4bc
Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents:
73683
diff
changeset
|
1336 retval = 1; |
|
1f23bb74f4bc
Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents:
73683
diff
changeset
|
1337 unix_out: |
|
1f23bb74f4bc
Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents:
73683
diff
changeset
|
1338 Py_DECREF(args); |
|
1f23bb74f4bc
Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents:
73683
diff
changeset
|
1339 return retval; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1340 } |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1341 #endif /* AF_UNIX */ |
| 294 | 1342 |
|
36286
ae4480935016
Patch #1103116: AF_NETLINK sockets basic support.
Martin v. Löwis <martin@v.loewis.de>
parents:
36090
diff
changeset
|
1343 #if defined(AF_NETLINK) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1344 case AF_NETLINK: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1345 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1346 struct sockaddr_nl* addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1347 int pid, groups; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1348 addr = (struct sockaddr_nl *)addr_ret; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1349 if (!PyTuple_Check(args)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1350 PyErr_Format( |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1351 PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1352 "getsockaddrarg: " |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1353 "AF_NETLINK address must be tuple, not %.500s", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1354 Py_TYPE(args)->tp_name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1355 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1356 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1357 if (!PyArg_ParseTuple(args, "II:getsockaddrarg", &pid, &groups)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1358 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1359 addr->nl_family = AF_NETLINK; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1360 addr->nl_pid = pid; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1361 addr->nl_groups = groups; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1362 *len_ret = sizeof(*addr); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1363 return 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1364 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1365 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1366 |
|
73478
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
1367 #ifdef AF_RDS |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
1368 case AF_RDS: |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
1369 /* RDS sockets use sockaddr_in: fall-through */ |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
1370 #endif |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
1371 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1372 case AF_INET: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1373 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1374 struct sockaddr_in* addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1375 char *host; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1376 int port, result; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1377 if (!PyTuple_Check(args)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1378 PyErr_Format( |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1379 PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1380 "getsockaddrarg: " |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1381 "AF_INET address must be tuple, not %.500s", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1382 Py_TYPE(args)->tp_name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1383 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1384 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1385 if (!PyArg_ParseTuple(args, "eti:getsockaddrarg", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1386 "idna", &host, &port)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1387 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1388 addr=(struct sockaddr_in*)addr_ret; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1389 result = setipaddr(host, (struct sockaddr *)addr, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1390 sizeof(*addr), AF_INET); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1391 PyMem_Free(host); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1392 if (result < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1393 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1394 if (port < 0 || port > 0xffff) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1395 PyErr_SetString( |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1396 PyExc_OverflowError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1397 "getsockaddrarg: port must be 0-65535."); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1398 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1399 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1400 addr->sin_family = AF_INET; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1401 addr->sin_port = htons((short)port); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1402 *len_ret = sizeof *addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1403 return 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1404 } |
| 294 | 1405 |
|
21128
15ff504632ed
Remove INET6 define. Use ENABLE_IPV6 instead.
Martin v. Löwis <martin@v.loewis.de>
parents:
21094
diff
changeset
|
1406 #ifdef ENABLE_IPV6 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1407 case AF_INET6: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1408 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1409 struct sockaddr_in6* addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1410 char *host; |
|
74233
cc346a672091
Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents:
72115
diff
changeset
|
1411 int port, result; |
|
cc346a672091
Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents:
72115
diff
changeset
|
1412 unsigned int flowinfo, scope_id; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1413 flowinfo = scope_id = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1414 if (!PyTuple_Check(args)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1415 PyErr_Format( |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1416 PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1417 "getsockaddrarg: " |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1418 "AF_INET6 address must be tuple, not %.500s", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1419 Py_TYPE(args)->tp_name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1420 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1421 } |
|
74233
cc346a672091
Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents:
72115
diff
changeset
|
1422 if (!PyArg_ParseTuple(args, "eti|II", |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1423 "idna", &host, &port, &flowinfo, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1424 &scope_id)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1425 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1426 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1427 addr = (struct sockaddr_in6*)addr_ret; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1428 result = setipaddr(host, (struct sockaddr *)addr, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1429 sizeof(*addr), AF_INET6); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1430 PyMem_Free(host); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1431 if (result < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1432 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1433 if (port < 0 || port > 0xffff) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1434 PyErr_SetString( |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1435 PyExc_OverflowError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1436 "getsockaddrarg: port must be 0-65535."); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1437 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1438 } |
|
74233
cc346a672091
Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents:
72115
diff
changeset
|
1439 if (flowinfo < 0 || flowinfo > 0xfffff) { |
|
cc346a672091
Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents:
72115
diff
changeset
|
1440 PyErr_SetString( |
|
cc346a672091
Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents:
72115
diff
changeset
|
1441 PyExc_OverflowError, |
|
cc346a672091
Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents:
72115
diff
changeset
|
1442 "getsockaddrarg: flowinfo must be 0-1048575."); |
|
cc346a672091
Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents:
72115
diff
changeset
|
1443 return 0; |
|
cc346a672091
Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents:
72115
diff
changeset
|
1444 } |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1445 addr->sin6_family = s->sock_family; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1446 addr->sin6_port = htons((short)port); |
|
74233
cc346a672091
Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents:
72115
diff
changeset
|
1447 addr->sin6_flowinfo = htonl(flowinfo); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1448 addr->sin6_scope_id = scope_id; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1449 *len_ret = sizeof *addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1450 return 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1451 } |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
1452 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
1453 |
|
31443
afb4c9726d1a
Add FreeBSD support for bluetooth sockets.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
31441
diff
changeset
|
1454 #ifdef USE_BLUETOOTH |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1455 case AF_BLUETOOTH: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1456 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1457 switch (s->sock_proto) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1458 case BTPROTO_L2CAP: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1459 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1460 struct sockaddr_l2 *addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1461 char *straddr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1462 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1463 addr = (struct sockaddr_l2 *)addr_ret; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1464 memset(addr, 0, sizeof(struct sockaddr_l2)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1465 _BT_L2_MEMB(addr, family) = AF_BLUETOOTH; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1466 if (!PyArg_ParseTuple(args, "si", &straddr, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1467 &_BT_L2_MEMB(addr, psm))) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
1468 PyErr_SetString(PyExc_OSError, "getsockaddrarg: " |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1469 "wrong format"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1470 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1471 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1472 if (setbdaddr(straddr, &_BT_L2_MEMB(addr, bdaddr)) < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1473 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1474 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1475 *len_ret = sizeof *addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1476 return 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1477 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1478 case BTPROTO_RFCOMM: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1479 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1480 struct sockaddr_rc *addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1481 char *straddr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1482 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1483 addr = (struct sockaddr_rc *)addr_ret; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1484 _BT_RC_MEMB(addr, family) = AF_BLUETOOTH; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1485 if (!PyArg_ParseTuple(args, "si", &straddr, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1486 &_BT_RC_MEMB(addr, channel))) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
1487 PyErr_SetString(PyExc_OSError, "getsockaddrarg: " |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1488 "wrong format"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1489 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1490 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1491 if (setbdaddr(straddr, &_BT_RC_MEMB(addr, bdaddr)) < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1492 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1493 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1494 *len_ret = sizeof *addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1495 return 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1496 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1497 case BTPROTO_HCI: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1498 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1499 struct sockaddr_hci *addr = (struct sockaddr_hci *)addr_ret; |
|
65429
15859740aae6
Merged revisions 85586-85587,85596-85598 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65245
diff
changeset
|
1500 #if defined(__NetBSD__) || defined(__DragonFly__) |
|
66799
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66663
diff
changeset
|
1501 char *straddr = PyBytes_AS_STRING(args); |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66663
diff
changeset
|
1502 |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66663
diff
changeset
|
1503 _BT_HCI_MEMB(addr, family) = AF_BLUETOOTH; |
|
65429
15859740aae6
Merged revisions 85586-85587,85596-85598 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65245
diff
changeset
|
1504 if (straddr == NULL) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
1505 PyErr_SetString(PyExc_OSError, "getsockaddrarg: " |
|
65429
15859740aae6
Merged revisions 85586-85587,85596-85598 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65245
diff
changeset
|
1506 "wrong format"); |
|
15859740aae6
Merged revisions 85586-85587,85596-85598 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65245
diff
changeset
|
1507 return 0; |
|
15859740aae6
Merged revisions 85586-85587,85596-85598 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65245
diff
changeset
|
1508 } |
|
15859740aae6
Merged revisions 85586-85587,85596-85598 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65245
diff
changeset
|
1509 if (setbdaddr(straddr, &_BT_HCI_MEMB(addr, bdaddr)) < 0) |
|
15859740aae6
Merged revisions 85586-85587,85596-85598 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65245
diff
changeset
|
1510 return 0; |
|
15859740aae6
Merged revisions 85586-85587,85596-85598 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65245
diff
changeset
|
1511 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1512 _BT_HCI_MEMB(addr, family) = AF_BLUETOOTH; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1513 if (!PyArg_ParseTuple(args, "i", &_BT_HCI_MEMB(addr, dev))) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
1514 PyErr_SetString(PyExc_OSError, "getsockaddrarg: " |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1515 "wrong format"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1516 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1517 } |
|
65429
15859740aae6
Merged revisions 85586-85587,85596-85598 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65245
diff
changeset
|
1518 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1519 *len_ret = sizeof *addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1520 return 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1521 } |
|
32213
70dee2b193f7
Patch #929192: Improvements to bluetooth support.
Martin v. Löwis <martin@v.loewis.de>
parents:
32183
diff
changeset
|
1522 #if !defined(__FreeBSD__) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1523 case BTPROTO_SCO: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1524 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1525 struct sockaddr_sco *addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1526 char *straddr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1527 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1528 addr = (struct sockaddr_sco *)addr_ret; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1529 _BT_SCO_MEMB(addr, family) = AF_BLUETOOTH; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1530 if (!PyBytes_Check(args)) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
1531 PyErr_SetString(PyExc_OSError, "getsockaddrarg: " |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1532 "wrong format"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1533 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1534 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1535 straddr = PyBytes_AS_STRING(args); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1536 if (setbdaddr(straddr, &_BT_SCO_MEMB(addr, bdaddr)) < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1537 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1538 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1539 *len_ret = sizeof *addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1540 return 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1541 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1542 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1543 default: |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
1544 PyErr_SetString(PyExc_OSError, "getsockaddrarg: unknown Bluetooth protocol"); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1545 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1546 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1547 } |
|
31441
493707692671
Patch #874083: Bluetooth support for socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
31274
diff
changeset
|
1548 #endif |
|
493707692671
Patch #874083: Bluetooth support for socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
31274
diff
changeset
|
1549 |
|
65668
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
1550 #if defined(HAVE_NETPACKET_PACKET_H) && defined(SIOCGIFINDEX) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1551 case AF_PACKET: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1552 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1553 struct sockaddr_ll* addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1554 struct ifreq ifr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1555 char *interfaceName; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1556 int protoNumber; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1557 int hatype = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1558 int pkttype = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1559 char *haddr = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1560 unsigned int halen = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1561 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1562 if (!PyTuple_Check(args)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1563 PyErr_Format( |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1564 PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1565 "getsockaddrarg: " |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1566 "AF_PACKET address must be tuple, not %.500s", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1567 Py_TYPE(args)->tp_name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1568 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1569 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1570 if (!PyArg_ParseTuple(args, "si|iiy#", &interfaceName, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1571 &protoNumber, &pkttype, &hatype, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1572 &haddr, &halen)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1573 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1574 strncpy(ifr.ifr_name, interfaceName, sizeof(ifr.ifr_name)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1575 ifr.ifr_name[(sizeof(ifr.ifr_name))-1] = '\0'; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1576 if (ioctl(s->sock_fd, SIOCGIFINDEX, &ifr) < 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1577 s->errorhandler(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1578 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1579 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1580 if (halen > 8) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1581 PyErr_SetString(PyExc_ValueError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1582 "Hardware address must be 8 bytes or less"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1583 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1584 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1585 if (protoNumber < 0 || protoNumber > 0xffff) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1586 PyErr_SetString( |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1587 PyExc_OverflowError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1588 "getsockaddrarg: protoNumber must be 0-65535."); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1589 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1590 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1591 addr = (struct sockaddr_ll*)addr_ret; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1592 addr->sll_family = AF_PACKET; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1593 addr->sll_protocol = htons((short)protoNumber); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1594 addr->sll_ifindex = ifr.ifr_ifindex; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1595 addr->sll_pkttype = pkttype; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1596 addr->sll_hatype = hatype; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1597 if (halen != 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1598 memcpy(&addr->sll_addr, haddr, halen); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1599 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1600 addr->sll_halen = halen; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1601 *len_ret = sizeof *addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1602 return 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1603 } |
|
16947
b25131bc6ec7
RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents:
16472
diff
changeset
|
1604 #endif |
|
b25131bc6ec7
RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents:
16472
diff
changeset
|
1605 |
|
44568
305d7d2ce047
Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents:
44535
diff
changeset
|
1606 #ifdef HAVE_LINUX_TIPC_H |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1607 case AF_TIPC: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1608 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1609 unsigned int atype, v1, v2, v3; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1610 unsigned int scope = TIPC_CLUSTER_SCOPE; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1611 struct sockaddr_tipc *addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1612 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1613 if (!PyTuple_Check(args)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1614 PyErr_Format( |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1615 PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1616 "getsockaddrarg: " |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1617 "AF_TIPC address must be tuple, not %.500s", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1618 Py_TYPE(args)->tp_name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1619 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1620 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1621 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1622 if (!PyArg_ParseTuple(args, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1623 "IIII|I;Invalid TIPC address format", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1624 &atype, &v1, &v2, &v3, &scope)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1625 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1626 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1627 addr = (struct sockaddr_tipc *) addr_ret; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1628 memset(addr, 0, sizeof(struct sockaddr_tipc)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1629 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1630 addr->family = AF_TIPC; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1631 addr->scope = scope; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1632 addr->addrtype = atype; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1633 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1634 if (atype == TIPC_ADDR_NAMESEQ) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1635 addr->addr.nameseq.type = v1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1636 addr->addr.nameseq.lower = v2; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1637 addr->addr.nameseq.upper = v3; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1638 } else if (atype == TIPC_ADDR_NAME) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1639 addr->addr.name.name.type = v1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1640 addr->addr.name.name.instance = v2; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1641 } else if (atype == TIPC_ADDR_ID) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1642 addr->addr.id.node = v1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1643 addr->addr.id.ref = v2; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1644 } else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1645 /* Shouldn't happen */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1646 PyErr_SetString(PyExc_TypeError, "Invalid address type"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1647 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1648 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1649 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1650 *len_ret = sizeof(*addr); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1651 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1652 return 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1653 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1654 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1655 |
|
72807
d4ce850b06b7
Issue #10141: fix socketmodule compilation on Linux systems with <linux/can.h>
Charles-François Natali <neologix@free.fr>
parents:
72758
diff
changeset
|
1656 #ifdef AF_CAN |
|
72758
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1657 case AF_CAN: |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1658 switch (s->sock_proto) { |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1659 case CAN_RAW: |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1660 { |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1661 struct sockaddr_can *addr; |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1662 PyObject *interfaceName; |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1663 struct ifreq ifr; |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1664 addr = (struct sockaddr_can *)addr_ret; |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1665 Py_ssize_t len; |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1666 |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1667 if (!PyArg_ParseTuple(args, "O&", PyUnicode_FSConverter, |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1668 &interfaceName)) |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1669 return 0; |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1670 |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1671 len = PyBytes_GET_SIZE(interfaceName); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1672 |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1673 if (len == 0) { |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1674 ifr.ifr_ifindex = 0; |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1675 } else if (len < sizeof(ifr.ifr_name)) { |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1676 strcpy(ifr.ifr_name, PyBytes_AS_STRING(interfaceName)); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1677 if (ioctl(s->sock_fd, SIOCGIFINDEX, &ifr) < 0) { |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1678 s->errorhandler(); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1679 Py_DECREF(interfaceName); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1680 return 0; |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1681 } |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1682 } else { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
1683 PyErr_SetString(PyExc_OSError, |
|
72758
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1684 "AF_CAN interface name too long"); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1685 Py_DECREF(interfaceName); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1686 return 0; |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1687 } |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1688 |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1689 addr->can_family = AF_CAN; |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1690 addr->can_ifindex = ifr.ifr_ifindex; |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1691 |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1692 *len_ret = sizeof(*addr); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1693 Py_DECREF(interfaceName); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1694 return 1; |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1695 } |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1696 default: |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
1697 PyErr_SetString(PyExc_OSError, |
|
72758
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1698 "getsockaddrarg: unsupported CAN protocol"); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1699 return 0; |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1700 } |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1701 #endif |
|
74741
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1702 |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1703 #ifdef PF_SYSTEM |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1704 case PF_SYSTEM: |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1705 switch (s->sock_proto) { |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1706 #ifdef SYSPROTO_CONTROL |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1707 case SYSPROTO_CONTROL: |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1708 { |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1709 struct sockaddr_ctl *addr; |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1710 |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1711 addr = (struct sockaddr_ctl *)addr_ret; |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1712 addr->sc_family = AF_SYSTEM; |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1713 addr->ss_sysaddr = AF_SYS_CONTROL; |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1714 |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1715 if (PyUnicode_Check(args)) { |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1716 struct ctl_info info; |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1717 PyObject *ctl_name; |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1718 |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1719 if (!PyArg_Parse(args, "O&", |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1720 PyUnicode_FSConverter, &ctl_name)) { |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1721 return 0; |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1722 } |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1723 |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1724 if (PyBytes_GET_SIZE(ctl_name) > sizeof(info.ctl_name)) { |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1725 PyErr_SetString(PyExc_ValueError, |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1726 "provided string is too long"); |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1727 Py_DECREF(ctl_name); |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1728 return 0; |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1729 } |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1730 strncpy(info.ctl_name, PyBytes_AS_STRING(ctl_name), |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1731 sizeof(info.ctl_name)); |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1732 Py_DECREF(ctl_name); |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1733 |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1734 if (ioctl(s->sock_fd, CTLIOCGINFO, &info)) { |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1735 PyErr_SetString(PyExc_OSError, |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1736 "cannot find kernel control with provided name"); |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1737 return 0; |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1738 } |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1739 |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1740 addr->sc_id = info.ctl_id; |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1741 addr->sc_unit = 0; |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1742 } else if (!PyArg_ParseTuple(args, "II", |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1743 &(addr->sc_id), &(addr->sc_unit))) { |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1744 PyErr_SetString(PyExc_TypeError, "getsockaddrarg: " |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1745 "expected str or tuple of two ints"); |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1746 |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1747 return 0; |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1748 } |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1749 |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1750 *len_ret = sizeof(*addr); |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1751 return 1; |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1752 } |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1753 #endif |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1754 default: |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1755 PyErr_SetString(PyExc_OSError, |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1756 "getsockaddrarg: unsupported PF_SYSTEM protocol"); |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1757 return 0; |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1758 } |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1759 #endif |
|
72758
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1760 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1761 /* More cases here... */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1762 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1763 default: |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
1764 PyErr_SetString(PyExc_OSError, "getsockaddrarg: bad family"); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1765 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1766 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1767 } |
| 294 | 1768 } |
| 1769 | |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
1770 |
|
16947
b25131bc6ec7
RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents:
16472
diff
changeset
|
1771 /* Get the address length according to the socket object's address family. |
|
900
58a7438c2e7e
Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents:
896
diff
changeset
|
1772 Return 1 if the family is known, 0 otherwise. The length is returned |
|
58a7438c2e7e
Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents:
896
diff
changeset
|
1773 through len_ret. */ |
|
58a7438c2e7e
Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents:
896
diff
changeset
|
1774 |
|
58a7438c2e7e
Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents:
896
diff
changeset
|
1775 static int |
|
13554
906efc1da247
Errare humanum est.
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13538
diff
changeset
|
1776 getsockaddrlen(PySocketSockObject *s, socklen_t *len_ret) |
|
900
58a7438c2e7e
Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents:
896
diff
changeset
|
1777 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1778 switch (s->sock_family) { |
|
900
58a7438c2e7e
Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents:
896
diff
changeset
|
1779 |
|
31867
51aaceeaabe1
OS/2's TCP/IP stack supports AF_UNIX sockets, with the limitation that
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
31790
diff
changeset
|
1780 #if defined(AF_UNIX) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1781 case AF_UNIX: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1782 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1783 *len_ret = sizeof (struct sockaddr_un); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1784 return 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1785 } |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1786 #endif /* AF_UNIX */ |
|
36286
ae4480935016
Patch #1103116: AF_NETLINK sockets basic support.
Martin v. Löwis <martin@v.loewis.de>
parents:
36090
diff
changeset
|
1787 #if defined(AF_NETLINK) |
|
ae4480935016
Patch #1103116: AF_NETLINK sockets basic support.
Martin v. Löwis <martin@v.loewis.de>
parents:
36090
diff
changeset
|
1788 case AF_NETLINK: |
|
ae4480935016
Patch #1103116: AF_NETLINK sockets basic support.
Martin v. Löwis <martin@v.loewis.de>
parents:
36090
diff
changeset
|
1789 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1790 *len_ret = sizeof (struct sockaddr_nl); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1791 return 1; |
|
36286
ae4480935016
Patch #1103116: AF_NETLINK sockets basic support.
Martin v. Löwis <martin@v.loewis.de>
parents:
36090
diff
changeset
|
1792 } |
|
ae4480935016
Patch #1103116: AF_NETLINK sockets basic support.
Martin v. Löwis <martin@v.loewis.de>
parents:
36090
diff
changeset
|
1793 #endif |
|
900
58a7438c2e7e
Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents:
896
diff
changeset
|
1794 |
|
73478
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
1795 #ifdef AF_RDS |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
1796 case AF_RDS: |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
1797 /* RDS sockets use sockaddr_in: fall-through */ |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
1798 #endif |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
1799 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1800 case AF_INET: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1801 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1802 *len_ret = sizeof (struct sockaddr_in); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1803 return 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1804 } |
|
900
58a7438c2e7e
Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents:
896
diff
changeset
|
1805 |
|
21128
15ff504632ed
Remove INET6 define. Use ENABLE_IPV6 instead.
Martin v. Löwis <martin@v.loewis.de>
parents:
21094
diff
changeset
|
1806 #ifdef ENABLE_IPV6 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1807 case AF_INET6: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1808 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1809 *len_ret = sizeof (struct sockaddr_in6); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1810 return 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1811 } |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
1812 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
1813 |
|
31443
afb4c9726d1a
Add FreeBSD support for bluetooth sockets.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
31441
diff
changeset
|
1814 #ifdef USE_BLUETOOTH |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1815 case AF_BLUETOOTH: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1816 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1817 switch(s->sock_proto) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1818 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1819 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1820 case BTPROTO_L2CAP: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1821 *len_ret = sizeof (struct sockaddr_l2); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1822 return 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1823 case BTPROTO_RFCOMM: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1824 *len_ret = sizeof (struct sockaddr_rc); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1825 return 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1826 case BTPROTO_HCI: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1827 *len_ret = sizeof (struct sockaddr_hci); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1828 return 1; |
|
31443
afb4c9726d1a
Add FreeBSD support for bluetooth sockets.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
31441
diff
changeset
|
1829 #if !defined(__FreeBSD__) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1830 case BTPROTO_SCO: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1831 *len_ret = sizeof (struct sockaddr_sco); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1832 return 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1833 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1834 default: |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
1835 PyErr_SetString(PyExc_OSError, "getsockaddrlen: " |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1836 "unknown BT protocol"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1837 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1838 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1839 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1840 } |
|
31441
493707692671
Patch #874083: Bluetooth support for socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
31274
diff
changeset
|
1841 #endif |
|
493707692671
Patch #874083: Bluetooth support for socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
31274
diff
changeset
|
1842 |
|
19151
cd44254360b6
Autotest for netpacket/packet.h, as it is not available on all Linux versions.
Martin v. Löwis <martin@v.loewis.de>
parents:
18997
diff
changeset
|
1843 #ifdef HAVE_NETPACKET_PACKET_H |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1844 case AF_PACKET: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1845 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1846 *len_ret = sizeof (struct sockaddr_ll); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1847 return 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1848 } |
|
16410
3d4a7cd0bf17
SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16400
diff
changeset
|
1849 #endif |
|
16947
b25131bc6ec7
RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents:
16472
diff
changeset
|
1850 |
|
44568
305d7d2ce047
Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents:
44535
diff
changeset
|
1851 #ifdef HAVE_LINUX_TIPC_H |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1852 case AF_TIPC: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1853 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1854 *len_ret = sizeof (struct sockaddr_tipc); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1855 return 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1856 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1857 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1858 |
|
72807
d4ce850b06b7
Issue #10141: fix socketmodule compilation on Linux systems with <linux/can.h>
Charles-François Natali <neologix@free.fr>
parents:
72758
diff
changeset
|
1859 #ifdef AF_CAN |
|
72758
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1860 case AF_CAN: |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1861 { |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1862 *len_ret = sizeof (struct sockaddr_can); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1863 return 1; |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1864 } |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1865 #endif |
|
74741
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1866 |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1867 #ifdef PF_SYSTEM |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1868 case PF_SYSTEM: |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1869 switch(s->sock_proto) { |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1870 #ifdef SYSPROTO_CONTROL |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1871 case SYSPROTO_CONTROL: |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1872 *len_ret = sizeof (struct sockaddr_ctl); |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1873 return 1; |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1874 #endif |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1875 default: |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1876 PyErr_SetString(PyExc_OSError, "getsockaddrlen: " |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1877 "unknown PF_SYSTEM protocol"); |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1878 return 0; |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1879 } |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
1880 #endif |
|
72758
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
1881 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1882 /* More cases here... */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1883 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1884 default: |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
1885 PyErr_SetString(PyExc_OSError, "getsockaddrlen: bad family"); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1886 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1887 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
1888 } |
|
900
58a7438c2e7e
Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents:
896
diff
changeset
|
1889 } |
|
58a7438c2e7e
Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents:
896
diff
changeset
|
1890 |
|
58a7438c2e7e
Some UNIX types want the exact size of the address structure
Guido van Rossum <guido@python.org>
parents:
896
diff
changeset
|
1891 |
|
72029
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1892 /* Support functions for the sendmsg() and recvmsg[_into]() methods. |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1893 Currently, these methods are only compiled if the RFC 2292/3542 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1894 CMSG_LEN() macro is available. Older systems seem to have used |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1895 sizeof(struct cmsghdr) + (length) where CMSG_LEN() is used now, so |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1896 it may be possible to define CMSG_LEN() that way if it's not |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1897 provided. Some architectures might need extra padding after the |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1898 cmsghdr, however, and CMSG_LEN() would have to take account of |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1899 this. */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1900 #ifdef CMSG_LEN |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1901 /* If length is in range, set *result to CMSG_LEN(length) and return |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1902 true; otherwise, return false. */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1903 static int |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1904 get_CMSG_LEN(size_t length, size_t *result) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1905 { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1906 size_t tmp; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1907 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1908 if (length > (SOCKLEN_T_LIMIT - CMSG_LEN(0))) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1909 return 0; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1910 tmp = CMSG_LEN(length); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1911 if (tmp > SOCKLEN_T_LIMIT || tmp < length) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1912 return 0; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1913 *result = tmp; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1914 return 1; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1915 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1916 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1917 #ifdef CMSG_SPACE |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1918 /* If length is in range, set *result to CMSG_SPACE(length) and return |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1919 true; otherwise, return false. */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1920 static int |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1921 get_CMSG_SPACE(size_t length, size_t *result) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1922 { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1923 size_t tmp; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1924 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1925 /* Use CMSG_SPACE(1) here in order to take account of the padding |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1926 necessary before *and* after the data. */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1927 if (length > (SOCKLEN_T_LIMIT - CMSG_SPACE(1))) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1928 return 0; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1929 tmp = CMSG_SPACE(length); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1930 if (tmp > SOCKLEN_T_LIMIT || tmp < length) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1931 return 0; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1932 *result = tmp; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1933 return 1; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1934 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1935 #endif |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1936 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1937 /* Return true iff msg->msg_controllen is valid, cmsgh is a valid |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1938 pointer in msg->msg_control with at least "space" bytes after it, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1939 and its cmsg_len member inside the buffer. */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1940 static int |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1941 cmsg_min_space(struct msghdr *msg, struct cmsghdr *cmsgh, size_t space) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1942 { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1943 size_t cmsg_offset; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1944 static const size_t cmsg_len_end = (offsetof(struct cmsghdr, cmsg_len) + |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1945 sizeof(cmsgh->cmsg_len)); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1946 |
|
72117
3ed2d087e70d
Issue #12837: POSIX.1-2008 allows socklen_t to be a signed integer: re-enable
Charles-François Natali <neologix@free.fr>
parents:
72116
diff
changeset
|
1947 /* Note that POSIX allows msg_controllen to be of signed type. */ |
|
3ed2d087e70d
Issue #12837: POSIX.1-2008 allows socklen_t to be a signed integer: re-enable
Charles-François Natali <neologix@free.fr>
parents:
72116
diff
changeset
|
1948 if (cmsgh == NULL || msg->msg_control == NULL || msg->msg_controllen < 0) |
|
72029
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1949 return 0; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1950 if (space < cmsg_len_end) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1951 space = cmsg_len_end; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1952 cmsg_offset = (char *)cmsgh - (char *)msg->msg_control; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1953 return (cmsg_offset <= (size_t)-1 - space && |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1954 cmsg_offset + space <= msg->msg_controllen); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1955 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1956 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1957 /* If pointer CMSG_DATA(cmsgh) is in buffer msg->msg_control, set |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1958 *space to number of bytes following it in the buffer and return |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1959 true; otherwise, return false. Assumes cmsgh, msg->msg_control and |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1960 msg->msg_controllen are valid. */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1961 static int |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1962 get_cmsg_data_space(struct msghdr *msg, struct cmsghdr *cmsgh, size_t *space) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1963 { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1964 size_t data_offset; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1965 char *data_ptr; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1966 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1967 if ((data_ptr = (char *)CMSG_DATA(cmsgh)) == NULL) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1968 return 0; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1969 data_offset = data_ptr - (char *)msg->msg_control; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1970 if (data_offset > msg->msg_controllen) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1971 return 0; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1972 *space = msg->msg_controllen - data_offset; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1973 return 1; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1974 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1975 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1976 /* If cmsgh is invalid or not contained in the buffer pointed to by |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1977 msg->msg_control, return -1. If cmsgh is valid and its associated |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1978 data is entirely contained in the buffer, set *data_len to the |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1979 length of the associated data and return 0. If only part of the |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1980 associated data is contained in the buffer but cmsgh is otherwise |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1981 valid, set *data_len to the length contained in the buffer and |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1982 return 1. */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1983 static int |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1984 get_cmsg_data_len(struct msghdr *msg, struct cmsghdr *cmsgh, size_t *data_len) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1985 { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1986 size_t space, cmsg_data_len; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1987 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1988 if (!cmsg_min_space(msg, cmsgh, CMSG_LEN(0)) || |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1989 cmsgh->cmsg_len < CMSG_LEN(0)) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1990 return -1; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1991 cmsg_data_len = cmsgh->cmsg_len - CMSG_LEN(0); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1992 if (!get_cmsg_data_space(msg, cmsgh, &space)) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1993 return -1; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1994 if (space >= cmsg_data_len) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1995 *data_len = cmsg_data_len; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1996 return 0; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1997 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1998 *data_len = space; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
1999 return 1; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2000 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2001 #endif /* CMSG_LEN */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2002 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2003 |
|
43881
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
2004 /* s._accept() -> (fd, address) */ |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
2005 |
| 1970 | 2006 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
2007 sock_accept(PySocketSockObject *s) |
| 294 | 2008 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2009 sock_addr_t addrbuf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2010 SOCKET_T newfd = INVALID_SOCKET; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2011 socklen_t addrlen; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2012 PyObject *sock = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2013 PyObject *addr = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2014 PyObject *res = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2015 int timeout; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2016 if (!getsockaddrlen(s, &addrlen)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2017 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2018 memset(&addrbuf, 0, addrlen); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2019 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2020 if (!IS_SELECTABLE(s)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2021 return select_error(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2022 |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
2023 BEGIN_SELECT_LOOP(s) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2024 Py_BEGIN_ALLOW_THREADS |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
2025 timeout = internal_select_ex(s, 0, interval); |
|
65314
12442ac3f7dd
Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
65243
diff
changeset
|
2026 if (!timeout) { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2027 newfd = accept(s->sock_fd, SAS2SA(&addrbuf), &addrlen); |
|
65314
12442ac3f7dd
Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
65243
diff
changeset
|
2028 } |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2029 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2030 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2031 if (timeout == 1) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2032 PyErr_SetString(socket_timeout, "timed out"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2033 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2034 } |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
2035 END_SELECT_LOOP(s) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2036 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2037 if (newfd == INVALID_SOCKET) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2038 return s->errorhandler(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2039 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2040 sock = PyLong_FromSocket_t(newfd); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2041 if (sock == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2042 SOCKETCLOSE(newfd); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2043 goto finally; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2044 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2045 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2046 addr = makesockaddr(s->sock_fd, SAS2SA(&addrbuf), |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2047 addrlen, s->sock_proto); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2048 if (addr == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2049 goto finally; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2050 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2051 res = PyTuple_Pack(2, sock, addr); |
|
4871
a7159ba0e45d
Check of return values and proper error handling.
Barry Warsaw <barry@python.org>
parents:
4783
diff
changeset
|
2052 |
|
23715
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
2053 finally: |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2054 Py_XDECREF(sock); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2055 Py_XDECREF(addr); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2056 return res; |
| 294 | 2057 } |
| 2058 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2059 PyDoc_STRVAR(accept_doc, |
|
43881
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
2060 "_accept() -> (integer, address info)\n\ |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2061 \n\ |
|
43881
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
2062 Wait for an incoming connection. Return a new socket file descriptor\n\ |
|
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
2063 representing the connection, and the address of the client.\n\ |
|
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
2064 For IP sockets, the address info is a pair (hostaddr, port)."); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2065 |
|
23815
203d1412a7e8
Major overhaul of timeout sockets:
Guido van Rossum <guido@python.org>
parents:
23807
diff
changeset
|
2066 /* s.setblocking(flag) method. Argument: |
|
203d1412a7e8
Major overhaul of timeout sockets:
Guido van Rossum <guido@python.org>
parents:
23807
diff
changeset
|
2067 False -- non-blocking mode; same as settimeout(0) |
|
203d1412a7e8
Major overhaul of timeout sockets:
Guido van Rossum <guido@python.org>
parents:
23807
diff
changeset
|
2068 True -- blocking mode; same as settimeout(None) |
|
203d1412a7e8
Major overhaul of timeout sockets:
Guido van Rossum <guido@python.org>
parents:
23807
diff
changeset
|
2069 */ |
|
1867
758c1374f303
Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents:
1792
diff
changeset
|
2070 |
| 1970 | 2071 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
2072 sock_setblocking(PySocketSockObject *s, PyObject *arg) |
|
1867
758c1374f303
Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents:
1792
diff
changeset
|
2073 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2074 int block; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2075 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2076 block = PyLong_AsLong(arg); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2077 if (block == -1 && PyErr_Occurred()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2078 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2079 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2080 s->sock_timeout = block ? -1.0 : 0.0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2081 internal_setblocking(s, block); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2082 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2083 Py_INCREF(Py_None); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2084 return Py_None; |
|
1867
758c1374f303
Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents:
1792
diff
changeset
|
2085 } |
|
758c1374f303
Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents:
1792
diff
changeset
|
2086 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2087 PyDoc_STRVAR(setblocking_doc, |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2088 "setblocking(flag)\n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2089 \n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2090 Set the socket to blocking (flag is true) or non-blocking (false).\n\ |
|
23815
203d1412a7e8
Major overhaul of timeout sockets:
Guido van Rossum <guido@python.org>
parents:
23807
diff
changeset
|
2091 setblocking(True) is equivalent to settimeout(None);\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2092 setblocking(False) is equivalent to settimeout(0.0)."); |
|
23815
203d1412a7e8
Major overhaul of timeout sockets:
Guido van Rossum <guido@python.org>
parents:
23807
diff
changeset
|
2093 |
|
203d1412a7e8
Major overhaul of timeout sockets:
Guido van Rossum <guido@python.org>
parents:
23807
diff
changeset
|
2094 /* s.settimeout(timeout) method. Argument: |
|
203d1412a7e8
Major overhaul of timeout sockets:
Guido van Rossum <guido@python.org>
parents:
23807
diff
changeset
|
2095 None -- no timeout, blocking mode; same as setblocking(True) |
|
203d1412a7e8
Major overhaul of timeout sockets:
Guido van Rossum <guido@python.org>
parents:
23807
diff
changeset
|
2096 0.0 -- non-blocking mode; same as setblocking(False) |
|
203d1412a7e8
Major overhaul of timeout sockets:
Guido van Rossum <guido@python.org>
parents:
23807
diff
changeset
|
2097 > 0 -- timeout mode; operations time out after timeout seconds |
|
203d1412a7e8
Major overhaul of timeout sockets:
Guido van Rossum <guido@python.org>
parents:
23807
diff
changeset
|
2098 < 0 -- illegal; raises an exception |
|
203d1412a7e8
Major overhaul of timeout sockets:
Guido van Rossum <guido@python.org>
parents:
23807
diff
changeset
|
2099 */ |
|
23715
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
2100 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
2101 sock_settimeout(PySocketSockObject *s, PyObject *arg) |
|
23715
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
2102 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2103 double timeout; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2104 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2105 if (arg == Py_None) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2106 timeout = -1.0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2107 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2108 timeout = PyFloat_AsDouble(arg); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2109 if (timeout < 0.0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2110 if (!PyErr_Occurred()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2111 PyErr_SetString(PyExc_ValueError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2112 "Timeout value out of range"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2113 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2114 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2115 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2116 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2117 s->sock_timeout = timeout; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2118 internal_setblocking(s, timeout < 0.0); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2119 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2120 Py_INCREF(Py_None); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2121 return Py_None; |
|
23715
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
2122 } |
|
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
2123 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2124 PyDoc_STRVAR(settimeout_doc, |
|
23723
2f6f8708e3e9
Whitespace normalization, folding long lines, uniform comment
Guido van Rossum <guido@python.org>
parents:
23722
diff
changeset
|
2125 "settimeout(timeout)\n\ |
|
23715
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
2126 \n\ |
|
23815
203d1412a7e8
Major overhaul of timeout sockets:
Guido van Rossum <guido@python.org>
parents:
23807
diff
changeset
|
2127 Set a timeout on socket operations. 'timeout' can be a float,\n\ |
|
203d1412a7e8
Major overhaul of timeout sockets:
Guido van Rossum <guido@python.org>
parents:
23807
diff
changeset
|
2128 giving in seconds, or None. Setting a timeout of None disables\n\ |
|
203d1412a7e8
Major overhaul of timeout sockets:
Guido van Rossum <guido@python.org>
parents:
23807
diff
changeset
|
2129 the timeout feature and is equivalent to setblocking(1).\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2130 Setting a timeout of zero is the same as setblocking(0)."); |
|
23723
2f6f8708e3e9
Whitespace normalization, folding long lines, uniform comment
Guido van Rossum <guido@python.org>
parents:
23722
diff
changeset
|
2131 |
|
2f6f8708e3e9
Whitespace normalization, folding long lines, uniform comment
Guido van Rossum <guido@python.org>
parents:
23722
diff
changeset
|
2132 /* s.gettimeout() method. |
|
2f6f8708e3e9
Whitespace normalization, folding long lines, uniform comment
Guido van Rossum <guido@python.org>
parents:
23722
diff
changeset
|
2133 Returns the timeout associated with a socket. */ |
|
23715
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
2134 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
2135 sock_gettimeout(PySocketSockObject *s) |
|
23715
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
2136 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2137 if (s->sock_timeout < 0.0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2138 Py_INCREF(Py_None); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2139 return Py_None; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2140 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2141 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2142 return PyFloat_FromDouble(s->sock_timeout); |
|
23715
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
2143 } |
|
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
2144 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2145 PyDoc_STRVAR(gettimeout_doc, |
|
24676
980767c6cd97
Clean up some docstrings. Some docstrings didn't show their return
Guido van Rossum <guido@python.org>
parents:
24619
diff
changeset
|
2146 "gettimeout() -> timeout\n\ |
|
23715
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
2147 \n\ |
|
71864
ab3432a81c26
#12725: fix working. Patch by Ben Hayden.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
70012
diff
changeset
|
2148 Returns the timeout in seconds (float) associated with socket \n\ |
|
23715
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
2149 operations. A timeout of None indicates that timeouts on socket \n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2150 operations are disabled."); |
|
1867
758c1374f303
Setup.in: added tkinter; rearranged the definition of PYTHONPATH so
Guido van Rossum <guido@python.org>
parents:
1792
diff
changeset
|
2151 |
|
1039
6aa0ee14ac2e
Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents:
926
diff
changeset
|
2152 /* s.setsockopt() method. |
|
6aa0ee14ac2e
Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents:
926
diff
changeset
|
2153 With an integer third argument, sets an integer option. |
|
6aa0ee14ac2e
Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents:
926
diff
changeset
|
2154 With a string third argument, sets an option from a buffer; |
|
6aa0ee14ac2e
Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents:
926
diff
changeset
|
2155 use optional built-in module 'struct' to encode the string. */ |
|
896
6459e2f21bf6
Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
2156 |
| 1970 | 2157 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
2158 sock_setsockopt(PySocketSockObject *s, PyObject *args) |
|
896
6459e2f21bf6
Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
2159 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2160 int level; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2161 int optname; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2162 int res; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2163 char *buf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2164 int buflen; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2165 int flag; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2166 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2167 if (PyArg_ParseTuple(args, "iii:setsockopt", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2168 &level, &optname, &flag)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2169 buf = (char *) &flag; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2170 buflen = sizeof flag; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2171 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2172 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2173 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2174 if (!PyArg_ParseTuple(args, "iiy#:setsockopt", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2175 &level, &optname, &buf, &buflen)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2176 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2177 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2178 res = setsockopt(s->sock_fd, level, optname, (void *)buf, buflen); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2179 if (res < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2180 return s->errorhandler(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2181 Py_INCREF(Py_None); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2182 return Py_None; |
|
896
6459e2f21bf6
Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
2183 } |
|
6459e2f21bf6
Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
2184 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2185 PyDoc_STRVAR(setsockopt_doc, |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2186 "setsockopt(level, option, value)\n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2187 \n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2188 Set a socket option. See the Unix manual for level and option.\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2189 The value argument can either be an integer or a string."); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2190 |
|
896
6459e2f21bf6
Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
2191 |
|
1039
6aa0ee14ac2e
Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents:
926
diff
changeset
|
2192 /* s.getsockopt() method. |
|
6aa0ee14ac2e
Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents:
926
diff
changeset
|
2193 With two arguments, retrieves an integer option. |
|
6aa0ee14ac2e
Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents:
926
diff
changeset
|
2194 With a third integer argument, retrieves a string buffer of that size; |
|
6aa0ee14ac2e
Made struct a standard built-in module; added string args to {set,get}sockopt;
Guido van Rossum <guido@python.org>
parents:
926
diff
changeset
|
2195 use optional built-in module 'struct' to decode the string. */ |
|
896
6459e2f21bf6
Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
2196 |
| 1970 | 2197 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
2198 sock_getsockopt(PySocketSockObject *s, PyObject *args) |
|
896
6459e2f21bf6
Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
2199 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2200 int level; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2201 int optname; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2202 int res; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2203 PyObject *buf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2204 socklen_t buflen = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2205 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2206 if (!PyArg_ParseTuple(args, "ii|i:getsockopt", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2207 &level, &optname, &buflen)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2208 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2209 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2210 if (buflen == 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2211 int flag = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2212 socklen_t flagsize = sizeof flag; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2213 res = getsockopt(s->sock_fd, level, optname, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2214 (void *)&flag, &flagsize); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2215 if (res < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2216 return s->errorhandler(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2217 return PyLong_FromLong(flag); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2218 } |
|
26550
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
25994
diff
changeset
|
2219 #ifdef __VMS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2220 /* socklen_t is unsigned so no negative test is needed, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2221 test buflen == 0 is previously done */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2222 if (buflen > 1024) { |
|
26550
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
25994
diff
changeset
|
2223 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2224 if (buflen <= 0 || buflen > 1024) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2225 #endif |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
2226 PyErr_SetString(PyExc_OSError, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2227 "getsockopt buflen out of range"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2228 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2229 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2230 buf = PyBytes_FromStringAndSize((char *)NULL, buflen); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2231 if (buf == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2232 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2233 res = getsockopt(s->sock_fd, level, optname, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2234 (void *)PyBytes_AS_STRING(buf), &buflen); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2235 if (res < 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2236 Py_DECREF(buf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2237 return s->errorhandler(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2238 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2239 _PyBytes_Resize(&buf, buflen); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2240 return buf; |
|
896
6459e2f21bf6
Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
2241 } |
|
6459e2f21bf6
Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
2242 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2243 PyDoc_STRVAR(getsockopt_doc, |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2244 "getsockopt(level, option[, buffersize]) -> value\n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2245 \n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2246 Get a socket option. See the Unix manual for level and option.\n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2247 If a nonzero buffersize argument is given, the return value is a\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2248 string of that length; otherwise it is an integer."); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2249 |
|
896
6459e2f21bf6
Added {get,set}sockopt(). allowbroadcast is now obsolete.
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
2250 |
|
13278
3370edad08ce
Restore strict checking of socket address values; addresses passed to
Fred Drake <fdrake@acm.org>
parents:
13256
diff
changeset
|
2251 /* s.bind(sockaddr) method */ |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
2252 |
| 1970 | 2253 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
2254 sock_bind(PySocketSockObject *s, PyObject *addro) |
| 294 | 2255 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2256 sock_addr_t addrbuf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2257 int addrlen; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2258 int res; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2259 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2260 if (!getsockaddrarg(s, addro, SAS2SA(&addrbuf), &addrlen)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2261 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2262 Py_BEGIN_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2263 res = bind(s->sock_fd, SAS2SA(&addrbuf), addrlen); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2264 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2265 if (res < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2266 return s->errorhandler(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2267 Py_INCREF(Py_None); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2268 return Py_None; |
| 294 | 2269 } |
| 2270 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2271 PyDoc_STRVAR(bind_doc, |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2272 "bind(address)\n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2273 \n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2274 Bind the socket to a local address. For IP sockets, the address is a\n\ |
|
16410
3d4a7cd0bf17
SF patch 101137 from Grant Edwards
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16400
diff
changeset
|
2275 pair (host, port); the host must refer to the local host. For raw packet\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2276 sockets the address is a tuple (ifname, proto [,pkttype [,hatype]])"); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2277 |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
2278 |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
2279 /* s.close() method. |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
2280 Set the file descriptor to -1 so operations tried subsequently |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
2281 will surely fail. */ |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
2282 |
| 1970 | 2283 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
2284 sock_close(PySocketSockObject *s) |
| 294 | 2285 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2286 SOCKET_T fd; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2287 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2288 if ((fd = s->sock_fd) != -1) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2289 s->sock_fd = -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2290 Py_BEGIN_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2291 (void) SOCKETCLOSE(fd); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2292 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2293 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2294 Py_INCREF(Py_None); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2295 return Py_None; |
| 294 | 2296 } |
| 2297 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2298 PyDoc_STRVAR(close_doc, |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2299 "close()\n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2300 \n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2301 Close the socket. It cannot be used after this call."); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2302 |
|
63856
3f8cef837f07
Issue #8524: Add a forget() method to socket objects, so as to put the
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
2303 static PyObject * |
|
63890
60076f28c023
Followup to r83869 and issue #8524: rename socket.forget() to socket.detach()
Antoine Pitrou <solipsis@pitrou.net>
parents:
63856
diff
changeset
|
2304 sock_detach(PySocketSockObject *s) |
|
63856
3f8cef837f07
Issue #8524: Add a forget() method to socket objects, so as to put the
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
2305 { |
|
63890
60076f28c023
Followup to r83869 and issue #8524: rename socket.forget() to socket.detach()
Antoine Pitrou <solipsis@pitrou.net>
parents:
63856
diff
changeset
|
2306 SOCKET_T fd = s->sock_fd; |
|
63856
3f8cef837f07
Issue #8524: Add a forget() method to socket objects, so as to put the
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
2307 s->sock_fd = -1; |
|
63890
60076f28c023
Followup to r83869 and issue #8524: rename socket.forget() to socket.detach()
Antoine Pitrou <solipsis@pitrou.net>
parents:
63856
diff
changeset
|
2308 return PyLong_FromSocket_t(fd); |
|
63856
3f8cef837f07
Issue #8524: Add a forget() method to socket objects, so as to put the
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
2309 } |
|
3f8cef837f07
Issue #8524: Add a forget() method to socket objects, so as to put the
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
2310 |
|
63890
60076f28c023
Followup to r83869 and issue #8524: rename socket.forget() to socket.detach()
Antoine Pitrou <solipsis@pitrou.net>
parents:
63856
diff
changeset
|
2311 PyDoc_STRVAR(detach_doc, |
|
60076f28c023
Followup to r83869 and issue #8524: rename socket.forget() to socket.detach()
Antoine Pitrou <solipsis@pitrou.net>
parents:
63856
diff
changeset
|
2312 "detach()\n\ |
|
63856
3f8cef837f07
Issue #8524: Add a forget() method to socket objects, so as to put the
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
2313 \n\ |
|
3f8cef837f07
Issue #8524: Add a forget() method to socket objects, so as to put the
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
2314 Close the socket object without closing the underlying file descriptor.\ |
|
3f8cef837f07
Issue #8524: Add a forget() method to socket objects, so as to put the
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
2315 The object cannot be used after this call, but the file descriptor\ |
|
63890
60076f28c023
Followup to r83869 and issue #8524: rename socket.forget() to socket.detach()
Antoine Pitrou <solipsis@pitrou.net>
parents:
63856
diff
changeset
|
2316 can be reused for other purposes. The file descriptor is returned."); |
|
63856
3f8cef837f07
Issue #8524: Add a forget() method to socket objects, so as to put the
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
2317 |
|
23818
8a0a14e3725e
Fix non-blocking connect() for Windows. Refactored the code
Guido van Rossum <guido@python.org>
parents:
23815
diff
changeset
|
2318 static int |
|
29651
0a3751df4195
SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents:
29066
diff
changeset
|
2319 internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2320 int *timeoutp) |
|
23818
8a0a14e3725e
Fix non-blocking connect() for Windows. Refactored the code
Guido van Rossum <guido@python.org>
parents:
23815
diff
changeset
|
2321 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2322 int res, timeout; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2323 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2324 timeout = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2325 res = connect(s->sock_fd, addr, addrlen); |
|
23818
8a0a14e3725e
Fix non-blocking connect() for Windows. Refactored the code
Guido van Rossum <guido@python.org>
parents:
23815
diff
changeset
|
2326 |
|
8a0a14e3725e
Fix non-blocking connect() for Windows. Refactored the code
Guido van Rossum <guido@python.org>
parents:
23815
diff
changeset
|
2327 #ifdef MS_WINDOWS |
|
8a0a14e3725e
Fix non-blocking connect() for Windows. Refactored the code
Guido van Rossum <guido@python.org>
parents:
23815
diff
changeset
|
2328 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2329 if (s->sock_timeout > 0.0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2330 if (res < 0 && WSAGetLastError() == WSAEWOULDBLOCK && |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2331 IS_SELECTABLE(s)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2332 /* This is a mess. Best solution: trust select */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2333 fd_set fds; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2334 fd_set fds_exc; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2335 struct timeval tv; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2336 tv.tv_sec = (int)s->sock_timeout; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2337 tv.tv_usec = (int)((s->sock_timeout - tv.tv_sec) * 1e6); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2338 FD_ZERO(&fds); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2339 FD_SET(s->sock_fd, &fds); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2340 FD_ZERO(&fds_exc); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2341 FD_SET(s->sock_fd, &fds_exc); |
|
64121
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
2342 res = select(Py_SAFE_DOWNCAST(s->sock_fd+1, SOCKET_T, int), |
|
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
2343 NULL, &fds, &fds_exc, &tv); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2344 if (res == 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2345 res = WSAEWOULDBLOCK; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2346 timeout = 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2347 } else if (res > 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2348 if (FD_ISSET(s->sock_fd, &fds)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2349 /* The socket is in the writable set - this |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2350 means connected */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2351 res = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2352 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2353 /* As per MS docs, we need to call getsockopt() |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2354 to get the underlying error */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2355 int res_size = sizeof res; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2356 /* It must be in the exception set */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2357 assert(FD_ISSET(s->sock_fd, &fds_exc)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2358 if (0 == getsockopt(s->sock_fd, SOL_SOCKET, SO_ERROR, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2359 (char *)&res, &res_size)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2360 /* getsockopt also clears WSAGetLastError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2361 so reset it back. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2362 WSASetLastError(res); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2363 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2364 res = WSAGetLastError(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2365 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2366 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2367 /* else if (res < 0) an error occurred */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2368 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2369 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2370 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2371 if (res < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2372 res = WSAGetLastError(); |
|
23818
8a0a14e3725e
Fix non-blocking connect() for Windows. Refactored the code
Guido van Rossum <guido@python.org>
parents:
23815
diff
changeset
|
2373 |
|
8a0a14e3725e
Fix non-blocking connect() for Windows. Refactored the code
Guido van Rossum <guido@python.org>
parents:
23815
diff
changeset
|
2374 #else |
|
8a0a14e3725e
Fix non-blocking connect() for Windows. Refactored the code
Guido van Rossum <guido@python.org>
parents:
23815
diff
changeset
|
2375 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2376 if (s->sock_timeout > 0.0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2377 if (res < 0 && errno == EINPROGRESS && IS_SELECTABLE(s)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2378 timeout = internal_select(s, 1); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2379 if (timeout == 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2380 /* Bug #1019808: in case of an EINPROGRESS, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2381 use getsockopt(SO_ERROR) to get the real |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2382 error. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2383 socklen_t res_size = sizeof res; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2384 (void)getsockopt(s->sock_fd, SOL_SOCKET, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2385 SO_ERROR, &res, &res_size); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2386 if (res == EISCONN) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2387 res = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2388 errno = res; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2389 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2390 else if (timeout == -1) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2391 res = errno; /* had error */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2392 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2393 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2394 res = EWOULDBLOCK; /* timed out */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2395 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2396 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2397 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2398 if (res < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2399 res = errno; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2400 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2401 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2402 *timeoutp = timeout; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2403 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2404 return res; |
|
23818
8a0a14e3725e
Fix non-blocking connect() for Windows. Refactored the code
Guido van Rossum <guido@python.org>
parents:
23815
diff
changeset
|
2405 } |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
2406 |
|
13278
3370edad08ce
Restore strict checking of socket address values; addresses passed to
Fred Drake <fdrake@acm.org>
parents:
13256
diff
changeset
|
2407 /* s.connect(sockaddr) method */ |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
2408 |
| 1970 | 2409 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
2410 sock_connect(PySocketSockObject *s, PyObject *addro) |
| 294 | 2411 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2412 sock_addr_t addrbuf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2413 int addrlen; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2414 int res; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2415 int timeout; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2416 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2417 if (!getsockaddrarg(s, addro, SAS2SA(&addrbuf), &addrlen)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2418 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2419 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2420 Py_BEGIN_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2421 res = internal_connect(s, SAS2SA(&addrbuf), addrlen, &timeout); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2422 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2423 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2424 if (timeout == 1) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2425 PyErr_SetString(socket_timeout, "timed out"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2426 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2427 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2428 if (res != 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2429 return s->errorhandler(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2430 Py_INCREF(Py_None); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2431 return Py_None; |
| 294 | 2432 } |
| 2433 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2434 PyDoc_STRVAR(connect_doc, |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2435 "connect(address)\n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2436 \n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2437 Connect the socket to a remote address. For IP sockets, the address\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2438 is a pair (host, port)."); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2439 |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
2440 |
|
13278
3370edad08ce
Restore strict checking of socket address values; addresses passed to
Fred Drake <fdrake@acm.org>
parents:
13256
diff
changeset
|
2441 /* s.connect_ex(sockaddr) method */ |
|
6604
f67a6339ede7
Add s.connect_ex() which returns errno instead of raising an exception.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
2442 |
|
f67a6339ede7
Add s.connect_ex() which returns errno instead of raising an exception.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
2443 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
2444 sock_connect_ex(PySocketSockObject *s, PyObject *addro) |
|
6604
f67a6339ede7
Add s.connect_ex() which returns errno instead of raising an exception.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
2445 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2446 sock_addr_t addrbuf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2447 int addrlen; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2448 int res; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2449 int timeout; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2450 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2451 if (!getsockaddrarg(s, addro, SAS2SA(&addrbuf), &addrlen)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2452 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2453 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2454 Py_BEGIN_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2455 res = internal_connect(s, SAS2SA(&addrbuf), addrlen, &timeout); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2456 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2457 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2458 /* Signals are not errors (though they may raise exceptions). Adapted |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2459 from PyErr_SetFromErrnoWithFilenameObject(). */ |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
2460 #ifdef EINTR |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2461 if (res == EINTR && PyErr_CheckSignals()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2462 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2463 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2464 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2465 return PyLong_FromLong((long) res); |
|
6604
f67a6339ede7
Add s.connect_ex() which returns errno instead of raising an exception.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
2466 } |
|
f67a6339ede7
Add s.connect_ex() which returns errno instead of raising an exception.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
2467 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2468 PyDoc_STRVAR(connect_ex_doc, |
|
24676
980767c6cd97
Clean up some docstrings. Some docstrings didn't show their return
Guido van Rossum <guido@python.org>
parents:
24619
diff
changeset
|
2469 "connect_ex(address) -> errno\n\ |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2470 \n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2471 This is like connect(address), but returns an error code (the errno value)\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2472 instead of raising an exception when an error occurs."); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2473 |
|
6604
f67a6339ede7
Add s.connect_ex() which returns errno instead of raising an exception.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
2474 |
|
902
a4793ae26682
Changes for new UNIX-specific built-in module 'select' and new header for
Guido van Rossum <guido@python.org>
parents:
900
diff
changeset
|
2475 /* s.fileno() method */ |
|
a4793ae26682
Changes for new UNIX-specific built-in module 'select' and new header for
Guido van Rossum <guido@python.org>
parents:
900
diff
changeset
|
2476 |
| 1970 | 2477 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
2478 sock_fileno(PySocketSockObject *s) |
|
902
a4793ae26682
Changes for new UNIX-specific built-in module 'select' and new header for
Guido van Rossum <guido@python.org>
parents:
900
diff
changeset
|
2479 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2480 return PyLong_FromSocket_t(s->sock_fd); |
|
902
a4793ae26682
Changes for new UNIX-specific built-in module 'select' and new header for
Guido van Rossum <guido@python.org>
parents:
900
diff
changeset
|
2481 } |
|
a4793ae26682
Changes for new UNIX-specific built-in module 'select' and new header for
Guido van Rossum <guido@python.org>
parents:
900
diff
changeset
|
2482 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2483 PyDoc_STRVAR(fileno_doc, |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2484 "fileno() -> integer\n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2485 \n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2486 Return the integer file descriptor of the socket."); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2487 |
|
902
a4793ae26682
Changes for new UNIX-specific built-in module 'select' and new header for
Guido van Rossum <guido@python.org>
parents:
900
diff
changeset
|
2488 |
|
1094
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1039
diff
changeset
|
2489 /* s.getsockname() method */ |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1039
diff
changeset
|
2490 |
| 1970 | 2491 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
2492 sock_getsockname(PySocketSockObject *s) |
|
1094
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1039
diff
changeset
|
2493 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2494 sock_addr_t addrbuf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2495 int res; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2496 socklen_t addrlen; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2497 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2498 if (!getsockaddrlen(s, &addrlen)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2499 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2500 memset(&addrbuf, 0, addrlen); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2501 Py_BEGIN_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2502 res = getsockname(s->sock_fd, SAS2SA(&addrbuf), &addrlen); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2503 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2504 if (res < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2505 return s->errorhandler(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2506 return makesockaddr(s->sock_fd, SAS2SA(&addrbuf), addrlen, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2507 s->sock_proto); |
|
1094
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1039
diff
changeset
|
2508 } |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1039
diff
changeset
|
2509 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2510 PyDoc_STRVAR(getsockname_doc, |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2511 "getsockname() -> address info\n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2512 \n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2513 Return the address of the local endpoint. For IP sockets, the address\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2514 info is a pair (hostaddr, port)."); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2515 |
|
1094
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1039
diff
changeset
|
2516 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2517 #ifdef HAVE_GETPEERNAME /* Cray APP doesn't have this :-( */ |
|
1094
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1039
diff
changeset
|
2518 /* s.getpeername() method */ |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1039
diff
changeset
|
2519 |
| 1970 | 2520 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
2521 sock_getpeername(PySocketSockObject *s) |
|
1094
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1039
diff
changeset
|
2522 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2523 sock_addr_t addrbuf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2524 int res; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2525 socklen_t addrlen; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2526 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2527 if (!getsockaddrlen(s, &addrlen)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2528 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2529 memset(&addrbuf, 0, addrlen); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2530 Py_BEGIN_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2531 res = getpeername(s->sock_fd, SAS2SA(&addrbuf), &addrlen); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2532 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2533 if (res < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2534 return s->errorhandler(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2535 return makesockaddr(s->sock_fd, SAS2SA(&addrbuf), addrlen, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2536 s->sock_proto); |
|
1094
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1039
diff
changeset
|
2537 } |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2538 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2539 PyDoc_STRVAR(getpeername_doc, |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2540 "getpeername() -> address info\n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2541 \n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2542 Return the address of the remote endpoint. For IP sockets, the address\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2543 info is a pair (hostaddr, port)."); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2544 |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
2545 #endif /* HAVE_GETPEERNAME */ |
|
1094
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1039
diff
changeset
|
2546 |
|
d2af6bdcb6d0
* config.c: Added audioop to lists.
Guido van Rossum <guido@python.org>
parents:
1039
diff
changeset
|
2547 |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
2548 /* s.listen(n) method */ |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
2549 |
| 1970 | 2550 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
2551 sock_listen(PySocketSockObject *s, PyObject *arg) |
| 294 | 2552 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2553 int backlog; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2554 int res; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2555 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2556 backlog = PyLong_AsLong(arg); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2557 if (backlog == -1 && PyErr_Occurred()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2558 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2559 Py_BEGIN_ALLOW_THREADS |
|
70012
713006ecee0c
Issue #8498: In socket.accept(), allow to specify 0 as a backlog value in
Antoine Pitrou <solipsis@pitrou.net>
parents:
68660
diff
changeset
|
2560 /* To avoid problems on systems that don't allow a negative backlog |
|
713006ecee0c
Issue #8498: In socket.accept(), allow to specify 0 as a backlog value in
Antoine Pitrou <solipsis@pitrou.net>
parents:
68660
diff
changeset
|
2561 * (which doesn't make sense anyway) we force a minimum value of 0. */ |
|
713006ecee0c
Issue #8498: In socket.accept(), allow to specify 0 as a backlog value in
Antoine Pitrou <solipsis@pitrou.net>
parents:
68660
diff
changeset
|
2562 if (backlog < 0) |
|
713006ecee0c
Issue #8498: In socket.accept(), allow to specify 0 as a backlog value in
Antoine Pitrou <solipsis@pitrou.net>
parents:
68660
diff
changeset
|
2563 backlog = 0; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2564 res = listen(s->sock_fd, backlog); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2565 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2566 if (res < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2567 return s->errorhandler(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2568 Py_INCREF(Py_None); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2569 return Py_None; |
| 294 | 2570 } |
| 2571 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2572 PyDoc_STRVAR(listen_doc, |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2573 "listen(backlog)\n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2574 \n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2575 Enable a server to accept connections. The backlog argument must be at\n\ |
|
70012
713006ecee0c
Issue #8498: In socket.accept(), allow to specify 0 as a backlog value in
Antoine Pitrou <solipsis@pitrou.net>
parents:
68660
diff
changeset
|
2576 least 0 (if it is lower, it is set to 0); it specifies the number of\n\ |
|
713006ecee0c
Issue #8498: In socket.accept(), allow to specify 0 as a backlog value in
Antoine Pitrou <solipsis@pitrou.net>
parents:
68660
diff
changeset
|
2577 unaccepted connections that the system will allow before refusing new\n\ |
|
713006ecee0c
Issue #8498: In socket.accept(), allow to specify 0 as a backlog value in
Antoine Pitrou <solipsis@pitrou.net>
parents:
68660
diff
changeset
|
2578 connections."); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2579 |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2580 |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2581 /* |
|
38673
a19c20c5e5c7
Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
2582 * This is the guts of the recv() and recv_into() methods, which reads into a |
|
40582
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
2583 * char buffer. If you have any inc/dec ref to do to the objects that contain |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2584 * the buffer, do it in the caller. This function returns the number of bytes |
|
68585
bf94b6a73fc8
#11565: Fix several typos. Patch by Piotr Kasprzyk.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65668
diff
changeset
|
2585 * successfully read. If there was an error, it returns -1. Note that it is |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2586 * also possible that we return a number of bytes smaller than the request |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2587 * bytes. |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2588 */ |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
2589 |
|
64121
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
2590 static Py_ssize_t |
|
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
2591 sock_recv_guts(PySocketSockObject *s, char* cbuf, Py_ssize_t len, int flags) |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2592 { |
|
64121
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
2593 Py_ssize_t outlen = -1; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2594 int timeout; |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2595 #ifdef __VMS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2596 int remaining; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2597 char *read_buf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2598 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2599 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2600 if (!IS_SELECTABLE(s)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2601 select_error(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2602 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2603 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2604 if (len == 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2605 /* If 0 bytes were requested, do nothing. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2606 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2607 } |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2608 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2609 #ifndef __VMS |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
2610 BEGIN_SELECT_LOOP(s) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2611 Py_BEGIN_ALLOW_THREADS |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
2612 timeout = internal_select_ex(s, 0, interval); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2613 if (!timeout) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2614 outlen = recv(s->sock_fd, cbuf, len, flags); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2615 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2616 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2617 if (timeout == 1) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2618 PyErr_SetString(socket_timeout, "timed out"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2619 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2620 } |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
2621 END_SELECT_LOOP(s) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2622 if (outlen < 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2623 /* Note: the call to errorhandler() ALWAYS indirectly returned |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2624 NULL, so ignore its return value */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2625 s->errorhandler(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2626 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2627 } |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2628 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2629 read_buf = cbuf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2630 remaining = len; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2631 while (remaining != 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2632 unsigned int segment; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2633 int nread = -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2634 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2635 segment = remaining /SEGMENT_SIZE; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2636 if (segment != 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2637 segment = SEGMENT_SIZE; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2638 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2639 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2640 segment = remaining; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2641 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2642 |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
2643 BEGIN_SELECT_LOOP(s) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2644 Py_BEGIN_ALLOW_THREADS |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
2645 timeout = internal_select_ex(s, 0, interval); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2646 if (!timeout) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2647 nread = recv(s->sock_fd, read_buf, segment, flags); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2648 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2649 if (timeout == 1) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2650 PyErr_SetString(socket_timeout, "timed out"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2651 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2652 } |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
2653 END_SELECT_LOOP(s) |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
2654 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2655 if (nread < 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2656 s->errorhandler(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2657 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2658 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2659 if (nread != remaining) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2660 read_buf += nread; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2661 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2662 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2663 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2664 remaining -= segment; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2665 read_buf += segment; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2666 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2667 outlen = read_buf - cbuf; |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2668 #endif /* !__VMS */ |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2669 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2670 return outlen; |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2671 } |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2672 |
|
16947
b25131bc6ec7
RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents:
16472
diff
changeset
|
2673 |
|
1293
ac3c80abbf43
* classobject.c: in instance_getattr, don't make a method out of a
Guido van Rossum <guido@python.org>
parents:
1271
diff
changeset
|
2674 /* s.recv(nbytes [,flags]) method */ |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
2675 |
| 1970 | 2676 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
2677 sock_recv(PySocketSockObject *s, PyObject *args) |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
2678 { |
|
64121
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
2679 Py_ssize_t recvlen, outlen; |
|
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
2680 int flags = 0; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2681 PyObject *buf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2682 |
|
64121
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
2683 if (!PyArg_ParseTuple(args, "n|i:recv", &recvlen, &flags)) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2684 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2685 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2686 if (recvlen < 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2687 PyErr_SetString(PyExc_ValueError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2688 "negative buffersize in recv"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2689 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2690 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2691 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2692 /* Allocate a new string. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2693 buf = PyBytes_FromStringAndSize((char *) 0, recvlen); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2694 if (buf == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2695 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2696 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2697 /* Call the guts */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2698 outlen = sock_recv_guts(s, PyBytes_AS_STRING(buf), recvlen, flags); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2699 if (outlen < 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2700 /* An error occurred, release the string and return an |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2701 error. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2702 Py_DECREF(buf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2703 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2704 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2705 if (outlen != recvlen) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2706 /* We did not read as many bytes as we anticipated, resize the |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2707 string if possible and be successful. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2708 _PyBytes_Resize(&buf, outlen); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2709 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2710 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2711 return buf; |
| 294 | 2712 } |
| 2713 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2714 PyDoc_STRVAR(recv_doc, |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2715 "recv(buffersize[, flags]) -> data\n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2716 \n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2717 Receive up to buffersize bytes from the socket. For the optional flags\n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2718 argument, see the Unix manual. When no data is available, block until\n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2719 at least one byte is available or until the remote end is closed. When\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2720 the remote end is closed and all data is read, return the empty string."); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2721 |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
2722 |
|
38673
a19c20c5e5c7
Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
2723 /* s.recv_into(buffer, [nbytes [,flags]]) method */ |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2724 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2725 static PyObject* |
|
38673
a19c20c5e5c7
Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
2726 sock_recv_into(PySocketSockObject *s, PyObject *args, PyObject *kwds) |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2727 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2728 static char *kwlist[] = {"buffer", "nbytes", "flags", 0}; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2729 |
|
64121
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
2730 int flags = 0; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2731 Py_buffer pbuf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2732 char *buf; |
|
64121
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
2733 Py_ssize_t buflen, readlen, recvlen = 0; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2734 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2735 /* Get the buffer's memory */ |
|
64121
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
2736 if (!PyArg_ParseTupleAndKeywords(args, kwds, "w*|ni:recv_into", kwlist, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2737 &pbuf, &recvlen, &flags)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2738 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2739 buf = pbuf.buf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2740 buflen = pbuf.len; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2741 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2742 if (recvlen < 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2743 PyBuffer_Release(&pbuf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2744 PyErr_SetString(PyExc_ValueError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2745 "negative buffersize in recv_into"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2746 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2747 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2748 if (recvlen == 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2749 /* If nbytes was not specified, use the buffer's length */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2750 recvlen = buflen; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2751 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2752 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2753 /* Check if the buffer is large enough */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2754 if (buflen < recvlen) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2755 PyBuffer_Release(&pbuf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2756 PyErr_SetString(PyExc_ValueError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2757 "buffer too small for requested bytes"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2758 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2759 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2760 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2761 /* Call the guts */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2762 readlen = sock_recv_guts(s, buf, recvlen, flags); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2763 if (readlen < 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2764 /* Return an error. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2765 PyBuffer_Release(&pbuf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2766 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2767 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2768 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2769 PyBuffer_Release(&pbuf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2770 /* Return the number of bytes read. Note that we do not do anything |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2771 special here in the case that readlen < recvlen. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2772 return PyLong_FromSsize_t(readlen); |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2773 } |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2774 |
|
38673
a19c20c5e5c7
Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
2775 PyDoc_STRVAR(recv_into_doc, |
|
a19c20c5e5c7
Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
2776 "recv_into(buffer, [nbytes[, flags]]) -> nbytes_read\n\ |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2777 \n\ |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2778 A version of recv() that stores its data into a buffer rather than creating \n\ |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2779 a new string. Receive up to buffersize bytes from the socket. If buffersize \n\ |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2780 is not specified (or 0), receive up to the size available in the given buffer.\n\ |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2781 \n\ |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2782 See recv() for documentation about the flags."); |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2783 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2784 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2785 /* |
|
44349
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44158
diff
changeset
|
2786 * This is the guts of the recvfrom() and recvfrom_into() methods, which reads |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44158
diff
changeset
|
2787 * into a char buffer. If you have any inc/def ref to do to the objects that |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44158
diff
changeset
|
2788 * contain the buffer, do it in the caller. This function returns the number |
|
68585
bf94b6a73fc8
#11565: Fix several typos. Patch by Piotr Kasprzyk.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65668
diff
changeset
|
2789 * of bytes successfully read. If there was an error, it returns -1. Note |
|
44349
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44158
diff
changeset
|
2790 * that it is also possible that we return a number of bytes smaller than the |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44158
diff
changeset
|
2791 * request bytes. |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2792 * |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2793 * 'addr' is a return value for the address object. Note that you must decref |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2794 * it yourself. |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2795 */ |
|
64121
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
2796 static Py_ssize_t |
|
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
2797 sock_recvfrom_guts(PySocketSockObject *s, char* cbuf, Py_ssize_t len, int flags, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2798 PyObject** addr) |
| 294 | 2799 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2800 sock_addr_t addrbuf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2801 int timeout; |
|
64121
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
2802 Py_ssize_t n = -1; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2803 socklen_t addrlen; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2804 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2805 *addr = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2806 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2807 if (!getsockaddrlen(s, &addrlen)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2808 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2809 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2810 if (!IS_SELECTABLE(s)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2811 select_error(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2812 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2813 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2814 |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
2815 BEGIN_SELECT_LOOP(s) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2816 Py_BEGIN_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2817 memset(&addrbuf, 0, addrlen); |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
2818 timeout = internal_select_ex(s, 0, interval); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2819 if (!timeout) { |
|
3702
3408756ec601
changed windows test symbols; removed debug printf from sockets
Guido van Rossum <guido@python.org>
parents:
3700
diff
changeset
|
2820 #ifndef MS_WINDOWS |
|
22115
d104bb50a194
OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
22096
diff
changeset
|
2821 #if defined(PYOS_OS2) && !defined(PYCC_GCC) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2822 n = recvfrom(s->sock_fd, cbuf, len, flags, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2823 SAS2SA(&addrbuf), &addrlen); |
|
6718
32f2eda2946c
Left-aligned preprocessor directives and changed C++ comments to C
Guido van Rossum <guido@python.org>
parents:
6626
diff
changeset
|
2824 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2825 n = recvfrom(s->sock_fd, cbuf, len, flags, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2826 (void *) &addrbuf, &addrlen); |
|
6718
32f2eda2946c
Left-aligned preprocessor directives and changed C++ comments to C
Guido van Rossum <guido@python.org>
parents:
6626
diff
changeset
|
2827 #endif |
|
1792
a584b4bbbc59
Changes to make it work and compile on NT, by Mark Hammond.
Guido van Rossum <guido@python.org>
parents:
1760
diff
changeset
|
2828 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2829 n = recvfrom(s->sock_fd, cbuf, len, flags, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2830 SAS2SA(&addrbuf), &addrlen); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2831 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2832 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2833 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2834 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2835 if (timeout == 1) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2836 PyErr_SetString(socket_timeout, "timed out"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2837 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2838 } |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
2839 END_SELECT_LOOP(s) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2840 if (n < 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2841 s->errorhandler(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2842 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2843 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2844 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2845 if (!(*addr = makesockaddr(s->sock_fd, SAS2SA(&addrbuf), |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2846 addrlen, s->sock_proto))) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2847 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2848 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2849 return n; |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2850 } |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2851 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2852 /* s.recvfrom(nbytes [,flags]) method */ |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2853 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2854 static PyObject * |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2855 sock_recvfrom(PySocketSockObject *s, PyObject *args) |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2856 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2857 PyObject *buf = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2858 PyObject *addr = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2859 PyObject *ret = NULL; |
|
64121
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
2860 int flags = 0; |
|
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
2861 Py_ssize_t recvlen, outlen; |
|
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
2862 |
|
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
2863 if (!PyArg_ParseTuple(args, "n|i:recvfrom", &recvlen, &flags)) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2864 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2865 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2866 if (recvlen < 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2867 PyErr_SetString(PyExc_ValueError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2868 "negative buffersize in recvfrom"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2869 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2870 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2871 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2872 buf = PyBytes_FromStringAndSize((char *) 0, recvlen); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2873 if (buf == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2874 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2875 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2876 outlen = sock_recvfrom_guts(s, PyBytes_AS_STRING(buf), |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2877 recvlen, flags, &addr); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2878 if (outlen < 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2879 goto finally; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2880 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2881 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2882 if (outlen != recvlen) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2883 /* We did not read as many bytes as we anticipated, resize the |
|
68585
bf94b6a73fc8
#11565: Fix several typos. Patch by Piotr Kasprzyk.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65668
diff
changeset
|
2884 string if possible and be successful. */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2885 if (_PyBytes_Resize(&buf, outlen) < 0) |
|
68585
bf94b6a73fc8
#11565: Fix several typos. Patch by Piotr Kasprzyk.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65668
diff
changeset
|
2886 /* Oopsy, not so successful after all. */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2887 goto finally; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2888 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2889 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2890 ret = PyTuple_Pack(2, buf, addr); |
|
23715
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
2891 |
|
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
2892 finally: |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2893 Py_XDECREF(buf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2894 Py_XDECREF(addr); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2895 return ret; |
| 294 | 2896 } |
| 2897 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2898 PyDoc_STRVAR(recvfrom_doc, |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2899 "recvfrom(buffersize[, flags]) -> (data, address info)\n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2900 \n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
2901 Like recv(buffersize, flags) but also return the sender's address info."); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
2902 |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2903 |
|
38673
a19c20c5e5c7
Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
2904 /* s.recvfrom_into(buffer[, nbytes [,flags]]) method */ |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2905 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2906 static PyObject * |
|
38673
a19c20c5e5c7
Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
2907 sock_recvfrom_into(PySocketSockObject *s, PyObject *args, PyObject* kwds) |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2908 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2909 static char *kwlist[] = {"buffer", "nbytes", "flags", 0}; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2910 |
|
64121
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
2911 int flags = 0; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2912 Py_buffer pbuf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2913 char *buf; |
|
64121
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
2914 Py_ssize_t readlen, buflen, recvlen = 0; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2915 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2916 PyObject *addr = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2917 |
|
64121
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
2918 if (!PyArg_ParseTupleAndKeywords(args, kwds, "w*|ni:recvfrom_into", |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2919 kwlist, &pbuf, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2920 &recvlen, &flags)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2921 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2922 buf = pbuf.buf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2923 buflen = pbuf.len; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2924 assert(buf != 0 && buflen > 0); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2925 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2926 if (recvlen < 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2927 PyBuffer_Release(&pbuf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2928 PyErr_SetString(PyExc_ValueError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2929 "negative buffersize in recvfrom_into"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2930 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2931 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2932 if (recvlen == 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2933 /* If nbytes was not specified, use the buffer's length */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2934 recvlen = buflen; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2935 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2936 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2937 readlen = sock_recvfrom_guts(s, buf, recvlen, flags, &addr); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2938 if (readlen < 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2939 PyBuffer_Release(&pbuf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2940 /* Return an error */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2941 Py_XDECREF(addr); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2942 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2943 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2944 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2945 PyBuffer_Release(&pbuf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2946 /* Return the number of bytes read and the address. Note that we do |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
2947 not do anything special here in the case that readlen < recvlen. */ |
|
64121
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
2948 return Py_BuildValue("nN", readlen, addr); |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2949 } |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2950 |
|
38673
a19c20c5e5c7
Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
2951 PyDoc_STRVAR(recvfrom_into_doc, |
|
a19c20c5e5c7
Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
2952 "recvfrom_into(buffer[, nbytes[, flags]]) -> (nbytes, address info)\n\ |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2953 \n\ |
|
38673
a19c20c5e5c7
Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
2954 Like recv_into(buffer[, nbytes[, flags]]) but also return the sender's address info."); |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2955 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
2956 |
|
72029
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2957 /* The sendmsg() and recvmsg[_into]() methods require a working |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2958 CMSG_LEN(). See the comment near get_CMSG_LEN(). */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2959 #ifdef CMSG_LEN |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2960 /* |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2961 * Call recvmsg() with the supplied iovec structures, flags, and |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2962 * ancillary data buffer size (controllen). Returns the tuple return |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2963 * value for recvmsg() or recvmsg_into(), with the first item provided |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2964 * by the supplied makeval() function. makeval() will be called with |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2965 * the length read and makeval_data as arguments, and must return a |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2966 * new reference (which will be decrefed if there is a subsequent |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2967 * error). On error, closes any file descriptors received via |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2968 * SCM_RIGHTS. |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2969 */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2970 static PyObject * |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2971 sock_recvmsg_guts(PySocketSockObject *s, struct iovec *iov, int iovlen, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2972 int flags, Py_ssize_t controllen, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2973 PyObject *(*makeval)(ssize_t, void *), void *makeval_data) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2974 { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2975 ssize_t bytes_received = -1; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2976 int timeout; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2977 sock_addr_t addrbuf; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2978 socklen_t addrbuflen; |
|
72062
c53db7dc4b8f
sock_sendmsg/sock_recvmsg: Use {0} to 0-initialize aggregate types with
Charles-François Natali <neologix@free.fr>
parents:
72061
diff
changeset
|
2979 struct msghdr msg = {0}; |
|
72029
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2980 PyObject *cmsg_list = NULL, *retval = NULL; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2981 void *controlbuf = NULL; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2982 struct cmsghdr *cmsgh; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2983 size_t cmsgdatalen = 0; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2984 int cmsg_status; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2985 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2986 /* XXX: POSIX says that msg_name and msg_namelen "shall be |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2987 ignored" when the socket is connected (Linux fills them in |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2988 anyway for AF_UNIX sockets at least). Normally msg_namelen |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2989 seems to be set to 0 if there's no address, but try to |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2990 initialize msg_name to something that won't be mistaken for a |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2991 real address if that doesn't happen. */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2992 if (!getsockaddrlen(s, &addrbuflen)) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2993 return NULL; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2994 memset(&addrbuf, 0, addrbuflen); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2995 SAS2SA(&addrbuf)->sa_family = AF_UNSPEC; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2996 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2997 if (controllen < 0 || controllen > SOCKLEN_T_LIMIT) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2998 PyErr_SetString(PyExc_ValueError, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
2999 "invalid ancillary data buffer length"); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3000 return NULL; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3001 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3002 if (controllen > 0 && (controlbuf = PyMem_Malloc(controllen)) == NULL) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3003 return PyErr_NoMemory(); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3004 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3005 /* Make the system call. */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3006 if (!IS_SELECTABLE(s)) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3007 select_error(); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3008 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3009 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3010 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3011 BEGIN_SELECT_LOOP(s) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3012 Py_BEGIN_ALLOW_THREADS; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3013 msg.msg_name = SAS2SA(&addrbuf); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3014 msg.msg_namelen = addrbuflen; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3015 msg.msg_iov = iov; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3016 msg.msg_iovlen = iovlen; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3017 msg.msg_control = controlbuf; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3018 msg.msg_controllen = controllen; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3019 timeout = internal_select_ex(s, 0, interval); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3020 if (!timeout) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3021 bytes_received = recvmsg(s->sock_fd, &msg, flags); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3022 Py_END_ALLOW_THREADS; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3023 if (timeout == 1) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3024 PyErr_SetString(socket_timeout, "timed out"); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3025 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3026 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3027 END_SELECT_LOOP(s) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3028 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3029 if (bytes_received < 0) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3030 s->errorhandler(); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3031 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3032 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3033 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3034 /* Make list of (level, type, data) tuples from control messages. */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3035 if ((cmsg_list = PyList_New(0)) == NULL) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3036 goto err_closefds; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3037 /* Check for empty ancillary data as old CMSG_FIRSTHDR() |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3038 implementations didn't do so. */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3039 for (cmsgh = ((msg.msg_controllen > 0) ? CMSG_FIRSTHDR(&msg) : NULL); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3040 cmsgh != NULL; cmsgh = CMSG_NXTHDR(&msg, cmsgh)) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3041 PyObject *bytes, *tuple; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3042 int tmp; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3043 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3044 cmsg_status = get_cmsg_data_len(&msg, cmsgh, &cmsgdatalen); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3045 if (cmsg_status != 0) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3046 if (PyErr_WarnEx(PyExc_RuntimeWarning, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3047 "received malformed or improperly-truncated " |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3048 "ancillary data", 1) == -1) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3049 goto err_closefds; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3050 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3051 if (cmsg_status < 0) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3052 break; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3053 if (cmsgdatalen > PY_SSIZE_T_MAX) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
3054 PyErr_SetString(PyExc_OSError, "control message too long"); |
|
72029
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3055 goto err_closefds; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3056 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3057 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3058 bytes = PyBytes_FromStringAndSize((char *)CMSG_DATA(cmsgh), |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3059 cmsgdatalen); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3060 tuple = Py_BuildValue("iiN", (int)cmsgh->cmsg_level, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3061 (int)cmsgh->cmsg_type, bytes); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3062 if (tuple == NULL) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3063 goto err_closefds; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3064 tmp = PyList_Append(cmsg_list, tuple); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3065 Py_DECREF(tuple); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3066 if (tmp != 0) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3067 goto err_closefds; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3068 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3069 if (cmsg_status != 0) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3070 break; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3071 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3072 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3073 retval = Py_BuildValue("NOiN", |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3074 (*makeval)(bytes_received, makeval_data), |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3075 cmsg_list, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3076 (int)msg.msg_flags, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3077 makesockaddr(s->sock_fd, SAS2SA(&addrbuf), |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3078 ((msg.msg_namelen > addrbuflen) ? |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3079 addrbuflen : msg.msg_namelen), |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3080 s->sock_proto)); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3081 if (retval == NULL) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3082 goto err_closefds; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3083 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3084 finally: |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3085 Py_XDECREF(cmsg_list); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3086 PyMem_Free(controlbuf); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3087 return retval; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3088 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3089 err_closefds: |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3090 #ifdef SCM_RIGHTS |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3091 /* Close all descriptors coming from SCM_RIGHTS, so they don't leak. */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3092 for (cmsgh = ((msg.msg_controllen > 0) ? CMSG_FIRSTHDR(&msg) : NULL); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3093 cmsgh != NULL; cmsgh = CMSG_NXTHDR(&msg, cmsgh)) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3094 cmsg_status = get_cmsg_data_len(&msg, cmsgh, &cmsgdatalen); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3095 if (cmsg_status < 0) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3096 break; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3097 if (cmsgh->cmsg_level == SOL_SOCKET && |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3098 cmsgh->cmsg_type == SCM_RIGHTS) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3099 size_t numfds; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3100 int *fdp; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3101 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3102 numfds = cmsgdatalen / sizeof(int); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3103 fdp = (int *)CMSG_DATA(cmsgh); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3104 while (numfds-- > 0) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3105 close(*fdp++); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3106 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3107 if (cmsg_status != 0) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3108 break; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3109 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3110 #endif /* SCM_RIGHTS */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3111 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3112 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3113 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3114 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3115 static PyObject * |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3116 makeval_recvmsg(ssize_t received, void *data) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3117 { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3118 PyObject **buf = data; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3119 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3120 if (received < PyBytes_GET_SIZE(*buf)) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3121 _PyBytes_Resize(buf, received); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3122 Py_XINCREF(*buf); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3123 return *buf; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3124 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3125 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3126 /* s.recvmsg(bufsize[, ancbufsize[, flags]]) method */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3127 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3128 static PyObject * |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3129 sock_recvmsg(PySocketSockObject *s, PyObject *args) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3130 { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3131 Py_ssize_t bufsize, ancbufsize = 0; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3132 int flags = 0; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3133 struct iovec iov; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3134 PyObject *buf = NULL, *retval = NULL; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3135 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3136 if (!PyArg_ParseTuple(args, "n|ni:recvmsg", &bufsize, &ancbufsize, &flags)) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3137 return NULL; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3138 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3139 if (bufsize < 0) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3140 PyErr_SetString(PyExc_ValueError, "negative buffer size in recvmsg()"); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3141 return NULL; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3142 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3143 if ((buf = PyBytes_FromStringAndSize(NULL, bufsize)) == NULL) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3144 return NULL; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3145 iov.iov_base = PyBytes_AS_STRING(buf); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3146 iov.iov_len = bufsize; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3147 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3148 /* Note that we're passing a pointer to *our pointer* to the bytes |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3149 object here (&buf); makeval_recvmsg() may incref the object, or |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3150 deallocate it and set our pointer to NULL. */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3151 retval = sock_recvmsg_guts(s, &iov, 1, flags, ancbufsize, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3152 &makeval_recvmsg, &buf); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3153 Py_XDECREF(buf); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3154 return retval; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3155 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3156 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3157 PyDoc_STRVAR(recvmsg_doc, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3158 "recvmsg(bufsize[, ancbufsize[, flags]]) -> (data, ancdata, msg_flags, address)\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3159 \n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3160 Receive normal data (up to bufsize bytes) and ancillary data from the\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3161 socket. The ancbufsize argument sets the size in bytes of the\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3162 internal buffer used to receive the ancillary data; it defaults to 0,\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3163 meaning that no ancillary data will be received. Appropriate buffer\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3164 sizes for ancillary data can be calculated using CMSG_SPACE() or\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3165 CMSG_LEN(), and items which do not fit into the buffer might be\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3166 truncated or discarded. The flags argument defaults to 0 and has the\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3167 same meaning as for recv().\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3168 \n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3169 The return value is a 4-tuple: (data, ancdata, msg_flags, address).\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3170 The data item is a bytes object holding the non-ancillary data\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3171 received. The ancdata item is a list of zero or more tuples\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3172 (cmsg_level, cmsg_type, cmsg_data) representing the ancillary data\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3173 (control messages) received: cmsg_level and cmsg_type are integers\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3174 specifying the protocol level and protocol-specific type respectively,\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3175 and cmsg_data is a bytes object holding the associated data. The\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3176 msg_flags item is the bitwise OR of various flags indicating\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3177 conditions on the received message; see your system documentation for\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3178 details. If the receiving socket is unconnected, address is the\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3179 address of the sending socket, if available; otherwise, its value is\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3180 unspecified.\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3181 \n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3182 If recvmsg() raises an exception after the system call returns, it\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3183 will first attempt to close any file descriptors received via the\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3184 SCM_RIGHTS mechanism."); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3185 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3186 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3187 static PyObject * |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3188 makeval_recvmsg_into(ssize_t received, void *data) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3189 { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3190 return PyLong_FromSsize_t(received); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3191 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3192 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3193 /* s.recvmsg_into(buffers[, ancbufsize[, flags]]) method */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3194 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3195 static PyObject * |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3196 sock_recvmsg_into(PySocketSockObject *s, PyObject *args) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3197 { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3198 Py_ssize_t ancbufsize = 0; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3199 int flags = 0; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3200 struct iovec *iovs = NULL; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3201 Py_ssize_t i, nitems, nbufs = 0; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3202 Py_buffer *bufs = NULL; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3203 PyObject *buffers_arg, *fast, *retval = NULL; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3204 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3205 if (!PyArg_ParseTuple(args, "O|ni:recvmsg_into", |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3206 &buffers_arg, &ancbufsize, &flags)) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3207 return NULL; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3208 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3209 if ((fast = PySequence_Fast(buffers_arg, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3210 "recvmsg_into() argument 1 must be an " |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3211 "iterable")) == NULL) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3212 return NULL; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3213 nitems = PySequence_Fast_GET_SIZE(fast); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3214 if (nitems > INT_MAX) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
3215 PyErr_SetString(PyExc_OSError, "recvmsg_into() argument 1 is too long"); |
|
72029
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3216 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3217 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3218 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3219 /* Fill in an iovec for each item, and save the Py_buffer |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3220 structs to release afterwards. */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3221 if (nitems > 0 && ((iovs = PyMem_New(struct iovec, nitems)) == NULL || |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3222 (bufs = PyMem_New(Py_buffer, nitems)) == NULL)) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3223 PyErr_NoMemory(); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3224 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3225 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3226 for (; nbufs < nitems; nbufs++) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3227 if (!PyArg_Parse(PySequence_Fast_GET_ITEM(fast, nbufs), |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3228 "w*;recvmsg_into() argument 1 must be an iterable " |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3229 "of single-segment read-write buffers", |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3230 &bufs[nbufs])) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3231 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3232 iovs[nbufs].iov_base = bufs[nbufs].buf; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3233 iovs[nbufs].iov_len = bufs[nbufs].len; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3234 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3235 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3236 retval = sock_recvmsg_guts(s, iovs, nitems, flags, ancbufsize, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3237 &makeval_recvmsg_into, NULL); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3238 finally: |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3239 for (i = 0; i < nbufs; i++) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3240 PyBuffer_Release(&bufs[i]); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3241 PyMem_Free(bufs); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3242 PyMem_Free(iovs); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3243 Py_DECREF(fast); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3244 return retval; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3245 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3246 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3247 PyDoc_STRVAR(recvmsg_into_doc, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3248 "recvmsg_into(buffers[, ancbufsize[, flags]]) -> (nbytes, ancdata, msg_flags, address)\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3249 \n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3250 Receive normal data and ancillary data from the socket, scattering the\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3251 non-ancillary data into a series of buffers. The buffers argument\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3252 must be an iterable of objects that export writable buffers\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3253 (e.g. bytearray objects); these will be filled with successive chunks\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3254 of the non-ancillary data until it has all been written or there are\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3255 no more buffers. The ancbufsize argument sets the size in bytes of\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3256 the internal buffer used to receive the ancillary data; it defaults to\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3257 0, meaning that no ancillary data will be received. Appropriate\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3258 buffer sizes for ancillary data can be calculated using CMSG_SPACE()\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3259 or CMSG_LEN(), and items which do not fit into the buffer might be\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3260 truncated or discarded. The flags argument defaults to 0 and has the\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3261 same meaning as for recv().\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3262 \n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3263 The return value is a 4-tuple: (nbytes, ancdata, msg_flags, address).\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3264 The nbytes item is the total number of bytes of non-ancillary data\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3265 written into the buffers. The ancdata item is a list of zero or more\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3266 tuples (cmsg_level, cmsg_type, cmsg_data) representing the ancillary\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3267 data (control messages) received: cmsg_level and cmsg_type are\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3268 integers specifying the protocol level and protocol-specific type\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3269 respectively, and cmsg_data is a bytes object holding the associated\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3270 data. The msg_flags item is the bitwise OR of various flags\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3271 indicating conditions on the received message; see your system\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3272 documentation for details. If the receiving socket is unconnected,\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3273 address is the address of the sending socket, if available; otherwise,\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3274 its value is unspecified.\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3275 \n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3276 If recvmsg_into() raises an exception after the system call returns,\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3277 it will first attempt to close any file descriptors received via the\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3278 SCM_RIGHTS mechanism."); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3279 #endif /* CMSG_LEN */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3280 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3281 |
|
1293
ac3c80abbf43
* classobject.c: in instance_getattr, don't make a method out of a
Guido van Rossum <guido@python.org>
parents:
1271
diff
changeset
|
3282 /* s.send(data [,flags]) method */ |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
3283 |
| 1970 | 3284 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
3285 sock_send(PySocketSockObject *s, PyObject *args) |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
3286 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3287 char *buf; |
|
64121
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
3288 Py_ssize_t len, n = -1; |
|
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
3289 int flags = 0, timeout; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3290 Py_buffer pbuf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3291 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3292 if (!PyArg_ParseTuple(args, "y*|i:send", &pbuf, &flags)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3293 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3294 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3295 if (!IS_SELECTABLE(s)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3296 PyBuffer_Release(&pbuf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3297 return select_error(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3298 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3299 buf = pbuf.buf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3300 len = pbuf.len; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3301 |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
3302 BEGIN_SELECT_LOOP(s) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3303 Py_BEGIN_ALLOW_THREADS |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
3304 timeout = internal_select_ex(s, 1, interval); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3305 if (!timeout) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
3306 #ifdef __VMS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3307 n = sendsegmented(s->sock_fd, buf, len, flags); |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
3308 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3309 n = send(s->sock_fd, buf, len, flags); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3310 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3311 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3312 if (timeout == 1) { |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
3313 PyBuffer_Release(&pbuf); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3314 PyErr_SetString(socket_timeout, "timed out"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3315 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3316 } |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
3317 END_SELECT_LOOP(s) |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
3318 |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
3319 PyBuffer_Release(&pbuf); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3320 if (n < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3321 return s->errorhandler(); |
|
64121
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
3322 return PyLong_FromSsize_t(n); |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
3323 } |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
3324 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
3325 PyDoc_STRVAR(send_doc, |
|
20679
e89c25ca6b29
Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents:
20661
diff
changeset
|
3326 "send(data[, flags]) -> count\n\ |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
3327 \n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
3328 Send a data string to the socket. For the optional flags\n\ |
|
20679
e89c25ca6b29
Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents:
20661
diff
changeset
|
3329 argument, see the Unix manual. Return the number of bytes\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
3330 sent; this may be less than len(data) if the network is busy."); |
|
20679
e89c25ca6b29
Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents:
20661
diff
changeset
|
3331 |
|
e89c25ca6b29
Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents:
20661
diff
changeset
|
3332 |
|
e89c25ca6b29
Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents:
20661
diff
changeset
|
3333 /* s.sendall(data [,flags]) method */ |
|
e89c25ca6b29
Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents:
20661
diff
changeset
|
3334 |
|
e89c25ca6b29
Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents:
20661
diff
changeset
|
3335 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
3336 sock_sendall(PySocketSockObject *s, PyObject *args) |
|
20679
e89c25ca6b29
Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents:
20661
diff
changeset
|
3337 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3338 char *buf; |
|
64121
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
3339 Py_ssize_t len, n = -1; |
|
64961
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3340 int flags = 0, timeout, saved_errno; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3341 Py_buffer pbuf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3342 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3343 if (!PyArg_ParseTuple(args, "y*|i:sendall", &pbuf, &flags)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3344 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3345 buf = pbuf.buf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3346 len = pbuf.len; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3347 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3348 if (!IS_SELECTABLE(s)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3349 PyBuffer_Release(&pbuf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3350 return select_error(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3351 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3352 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3353 do { |
|
64961
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3354 Py_BEGIN_ALLOW_THREADS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3355 timeout = internal_select(s, 1); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3356 n = -1; |
|
64961
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3357 if (!timeout) { |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
3358 #ifdef __VMS |
|
64961
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3359 n = sendsegmented(s->sock_fd, buf, len, flags); |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
3360 #else |
|
64961
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3361 n = send(s->sock_fd, buf, len, flags); |
|
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3362 #endif |
|
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3363 } |
|
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3364 Py_END_ALLOW_THREADS |
|
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3365 if (timeout == 1) { |
|
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3366 PyBuffer_Release(&pbuf); |
|
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3367 PyErr_SetString(socket_timeout, "timed out"); |
|
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3368 return NULL; |
|
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3369 } |
|
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3370 /* PyErr_CheckSignals() might change errno */ |
|
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3371 saved_errno = errno; |
|
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3372 /* We must run our signal handlers before looping again. |
|
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3373 send() can return a successful partial write when it is |
|
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3374 interrupted, so we can't restrict ourselves to EINTR. */ |
|
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3375 if (PyErr_CheckSignals()) { |
|
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3376 PyBuffer_Release(&pbuf); |
|
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3377 return NULL; |
|
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3378 } |
|
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3379 if (n < 0) { |
|
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3380 /* If interrupted, try again */ |
|
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3381 if (saved_errno == EINTR) |
|
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3382 continue; |
|
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3383 else |
|
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3384 break; |
|
5a7bb85a5d99
Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64393
diff
changeset
|
3385 } |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3386 buf += n; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3387 len -= n; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3388 } while (len > 0); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3389 PyBuffer_Release(&pbuf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3390 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3391 if (n < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3392 return s->errorhandler(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3393 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3394 Py_INCREF(Py_None); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3395 return Py_None; |
|
20679
e89c25ca6b29
Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents:
20661
diff
changeset
|
3396 } |
|
e89c25ca6b29
Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents:
20661
diff
changeset
|
3397 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
3398 PyDoc_STRVAR(sendall_doc, |
|
20679
e89c25ca6b29
Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents:
20661
diff
changeset
|
3399 "sendall(data[, flags])\n\ |
|
e89c25ca6b29
Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents:
20661
diff
changeset
|
3400 \n\ |
|
e89c25ca6b29
Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents:
20661
diff
changeset
|
3401 Send a data string to the socket. For the optional flags\n\ |
|
e89c25ca6b29
Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents:
20661
diff
changeset
|
3402 argument, see the Unix manual. This calls send() repeatedly\n\ |
|
e89c25ca6b29
Add sendall() method, which loops until all data is written or an
Guido van Rossum <guido@python.org>
parents:
20661
diff
changeset
|
3403 until all data is sent. If an error occurs, it's impossible\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
3404 to tell how much data has been sent."); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
3405 |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
3406 |
|
1293
ac3c80abbf43
* classobject.c: in instance_getattr, don't make a method out of a
Guido van Rossum <guido@python.org>
parents:
1271
diff
changeset
|
3407 /* s.sendto(data, [flags,] sockaddr) method */ |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
3408 |
| 1970 | 3409 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
3410 sock_sendto(PySocketSockObject *s, PyObject *args) |
| 294 | 3411 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3412 Py_buffer pbuf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3413 PyObject *addro; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3414 char *buf; |
|
68659
c61b72b0650d
Issue #5421: Fix misleading error message when one of socket.sendto()'s
Antoine Pitrou <solipsis@pitrou.net>
parents:
68585
diff
changeset
|
3415 Py_ssize_t len, arglen; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3416 sock_addr_t addrbuf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3417 int addrlen, n = -1, flags, timeout; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3418 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3419 flags = 0; |
|
68659
c61b72b0650d
Issue #5421: Fix misleading error message when one of socket.sendto()'s
Antoine Pitrou <solipsis@pitrou.net>
parents:
68585
diff
changeset
|
3420 arglen = PyTuple_Size(args); |
|
c61b72b0650d
Issue #5421: Fix misleading error message when one of socket.sendto()'s
Antoine Pitrou <solipsis@pitrou.net>
parents:
68585
diff
changeset
|
3421 switch (arglen) { |
|
c61b72b0650d
Issue #5421: Fix misleading error message when one of socket.sendto()'s
Antoine Pitrou <solipsis@pitrou.net>
parents:
68585
diff
changeset
|
3422 case 2: |
|
c61b72b0650d
Issue #5421: Fix misleading error message when one of socket.sendto()'s
Antoine Pitrou <solipsis@pitrou.net>
parents:
68585
diff
changeset
|
3423 PyArg_ParseTuple(args, "y*O:sendto", &pbuf, &addro); |
|
c61b72b0650d
Issue #5421: Fix misleading error message when one of socket.sendto()'s
Antoine Pitrou <solipsis@pitrou.net>
parents:
68585
diff
changeset
|
3424 break; |
|
c61b72b0650d
Issue #5421: Fix misleading error message when one of socket.sendto()'s
Antoine Pitrou <solipsis@pitrou.net>
parents:
68585
diff
changeset
|
3425 case 3: |
|
c61b72b0650d
Issue #5421: Fix misleading error message when one of socket.sendto()'s
Antoine Pitrou <solipsis@pitrou.net>
parents:
68585
diff
changeset
|
3426 PyArg_ParseTuple(args, "y*iO:sendto", |
|
c61b72b0650d
Issue #5421: Fix misleading error message when one of socket.sendto()'s
Antoine Pitrou <solipsis@pitrou.net>
parents:
68585
diff
changeset
|
3427 &pbuf, &flags, &addro); |
|
c61b72b0650d
Issue #5421: Fix misleading error message when one of socket.sendto()'s
Antoine Pitrou <solipsis@pitrou.net>
parents:
68585
diff
changeset
|
3428 break; |
|
c61b72b0650d
Issue #5421: Fix misleading error message when one of socket.sendto()'s
Antoine Pitrou <solipsis@pitrou.net>
parents:
68585
diff
changeset
|
3429 default: |
|
c61b72b0650d
Issue #5421: Fix misleading error message when one of socket.sendto()'s
Antoine Pitrou <solipsis@pitrou.net>
parents:
68585
diff
changeset
|
3430 PyErr_Format(PyExc_TypeError, |
|
c61b72b0650d
Issue #5421: Fix misleading error message when one of socket.sendto()'s
Antoine Pitrou <solipsis@pitrou.net>
parents:
68585
diff
changeset
|
3431 "sendto() takes 2 or 3 arguments (%d given)", |
|
c61b72b0650d
Issue #5421: Fix misleading error message when one of socket.sendto()'s
Antoine Pitrou <solipsis@pitrou.net>
parents:
68585
diff
changeset
|
3432 arglen); |
|
70399
9d33770071b2
socket.sendto(): exit directly after setting the error
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70226
diff
changeset
|
3433 return NULL; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3434 } |
|
68659
c61b72b0650d
Issue #5421: Fix misleading error message when one of socket.sendto()'s
Antoine Pitrou <solipsis@pitrou.net>
parents:
68585
diff
changeset
|
3435 if (PyErr_Occurred()) |
|
c61b72b0650d
Issue #5421: Fix misleading error message when one of socket.sendto()'s
Antoine Pitrou <solipsis@pitrou.net>
parents:
68585
diff
changeset
|
3436 return NULL; |
|
c61b72b0650d
Issue #5421: Fix misleading error message when one of socket.sendto()'s
Antoine Pitrou <solipsis@pitrou.net>
parents:
68585
diff
changeset
|
3437 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3438 buf = pbuf.buf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3439 len = pbuf.len; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3440 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3441 if (!IS_SELECTABLE(s)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3442 PyBuffer_Release(&pbuf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3443 return select_error(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3444 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3445 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3446 if (!getsockaddrarg(s, addro, SAS2SA(&addrbuf), &addrlen)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3447 PyBuffer_Release(&pbuf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3448 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3449 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3450 |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
3451 BEGIN_SELECT_LOOP(s) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3452 Py_BEGIN_ALLOW_THREADS |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
3453 timeout = internal_select_ex(s, 1, interval); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3454 if (!timeout) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3455 n = sendto(s->sock_fd, buf, len, flags, SAS2SA(&addrbuf), addrlen); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3456 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3457 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3458 if (timeout == 1) { |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
3459 PyBuffer_Release(&pbuf); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3460 PyErr_SetString(socket_timeout, "timed out"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3461 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3462 } |
|
64988
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
3463 END_SELECT_LOOP(s) |
|
0f8c2eb89f46
Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
Antoine Pitrou <solipsis@pitrou.net>
parents:
64959
diff
changeset
|
3464 PyBuffer_Release(&pbuf); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3465 if (n < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3466 return s->errorhandler(); |
|
64121
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
3467 return PyLong_FromSsize_t(n); |
| 294 | 3468 } |
| 3469 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
3470 PyDoc_STRVAR(sendto_doc, |
|
24676
980767c6cd97
Clean up some docstrings. Some docstrings didn't show their return
Guido van Rossum <guido@python.org>
parents:
24619
diff
changeset
|
3471 "sendto(data[, flags], address) -> count\n\ |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
3472 \n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
3473 Like send(data, flags) but allows specifying the destination address.\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
3474 For IP sockets, the address is a pair (hostaddr, port)."); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
3475 |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
3476 |
|
72029
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3477 /* The sendmsg() and recvmsg[_into]() methods require a working |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3478 CMSG_LEN(). See the comment near get_CMSG_LEN(). */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3479 #ifdef CMSG_LEN |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3480 /* s.sendmsg(buffers[, ancdata[, flags[, address]]]) method */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3481 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3482 static PyObject * |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3483 sock_sendmsg(PySocketSockObject *s, PyObject *args) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3484 { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3485 Py_ssize_t i, ndataparts, ndatabufs = 0, ncmsgs, ncmsgbufs = 0; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3486 Py_buffer *databufs = NULL; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3487 struct iovec *iovs = NULL; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3488 sock_addr_t addrbuf; |
|
72062
c53db7dc4b8f
sock_sendmsg/sock_recvmsg: Use {0} to 0-initialize aggregate types with
Charles-François Natali <neologix@free.fr>
parents:
72061
diff
changeset
|
3489 struct msghdr msg = {0}; |
|
72029
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3490 struct cmsginfo { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3491 int level; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3492 int type; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3493 Py_buffer data; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3494 } *cmsgs = NULL; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3495 void *controlbuf = NULL; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3496 size_t controllen, controllen_last; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3497 ssize_t bytes_sent = -1; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3498 int addrlen, timeout, flags = 0; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3499 PyObject *data_arg, *cmsg_arg = NULL, *addr_arg = NULL, *data_fast = NULL, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3500 *cmsg_fast = NULL, *retval = NULL; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3501 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3502 if (!PyArg_ParseTuple(args, "O|OiO:sendmsg", |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3503 &data_arg, &cmsg_arg, &flags, &addr_arg)) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3504 return NULL; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3505 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3506 /* Parse destination address. */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3507 if (addr_arg != NULL && addr_arg != Py_None) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3508 if (!getsockaddrarg(s, addr_arg, SAS2SA(&addrbuf), &addrlen)) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3509 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3510 msg.msg_name = &addrbuf; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3511 msg.msg_namelen = addrlen; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3512 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3513 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3514 /* Fill in an iovec for each message part, and save the Py_buffer |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3515 structs to release afterwards. */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3516 if ((data_fast = PySequence_Fast(data_arg, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3517 "sendmsg() argument 1 must be an " |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3518 "iterable")) == NULL) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3519 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3520 ndataparts = PySequence_Fast_GET_SIZE(data_fast); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3521 if (ndataparts > INT_MAX) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
3522 PyErr_SetString(PyExc_OSError, "sendmsg() argument 1 is too long"); |
|
72029
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3523 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3524 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3525 msg.msg_iovlen = ndataparts; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3526 if (ndataparts > 0 && |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3527 ((msg.msg_iov = iovs = PyMem_New(struct iovec, ndataparts)) == NULL || |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3528 (databufs = PyMem_New(Py_buffer, ndataparts)) == NULL)) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3529 PyErr_NoMemory(); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3530 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3531 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3532 for (; ndatabufs < ndataparts; ndatabufs++) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3533 if (!PyArg_Parse(PySequence_Fast_GET_ITEM(data_fast, ndatabufs), |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3534 "y*;sendmsg() argument 1 must be an iterable of " |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3535 "buffer-compatible objects", |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3536 &databufs[ndatabufs])) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3537 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3538 iovs[ndatabufs].iov_base = databufs[ndatabufs].buf; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3539 iovs[ndatabufs].iov_len = databufs[ndatabufs].len; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3540 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3541 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3542 if (cmsg_arg == NULL) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3543 ncmsgs = 0; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3544 else { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3545 if ((cmsg_fast = PySequence_Fast(cmsg_arg, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3546 "sendmsg() argument 2 must be an " |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3547 "iterable")) == NULL) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3548 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3549 ncmsgs = PySequence_Fast_GET_SIZE(cmsg_fast); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3550 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3551 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3552 #ifndef CMSG_SPACE |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3553 if (ncmsgs > 1) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
3554 PyErr_SetString(PyExc_OSError, |
|
72029
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3555 "sending multiple control messages is not supported " |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3556 "on this system"); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3557 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3558 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3559 #endif |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3560 /* Save level, type and Py_buffer for each control message, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3561 and calculate total size. */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3562 if (ncmsgs > 0 && (cmsgs = PyMem_New(struct cmsginfo, ncmsgs)) == NULL) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3563 PyErr_NoMemory(); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3564 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3565 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3566 controllen = controllen_last = 0; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3567 while (ncmsgbufs < ncmsgs) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3568 size_t bufsize, space; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3569 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3570 if (!PyArg_Parse(PySequence_Fast_GET_ITEM(cmsg_fast, ncmsgbufs), |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3571 "(iiy*):[sendmsg() ancillary data items]", |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3572 &cmsgs[ncmsgbufs].level, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3573 &cmsgs[ncmsgbufs].type, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3574 &cmsgs[ncmsgbufs].data)) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3575 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3576 bufsize = cmsgs[ncmsgbufs++].data.len; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3577 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3578 #ifdef CMSG_SPACE |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3579 if (!get_CMSG_SPACE(bufsize, &space)) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3580 #else |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3581 if (!get_CMSG_LEN(bufsize, &space)) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3582 #endif |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
3583 PyErr_SetString(PyExc_OSError, "ancillary data item too large"); |
|
72029
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3584 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3585 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3586 controllen += space; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3587 if (controllen > SOCKLEN_T_LIMIT || controllen < controllen_last) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
3588 PyErr_SetString(PyExc_OSError, "too much ancillary data"); |
|
72029
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3589 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3590 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3591 controllen_last = controllen; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3592 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3593 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3594 /* Construct ancillary data block from control message info. */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3595 if (ncmsgbufs > 0) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3596 struct cmsghdr *cmsgh = NULL; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3597 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3598 if ((msg.msg_control = controlbuf = |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3599 PyMem_Malloc(controllen)) == NULL) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3600 PyErr_NoMemory(); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3601 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3602 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3603 msg.msg_controllen = controllen; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3604 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3605 /* Need to zero out the buffer as a workaround for glibc's |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3606 CMSG_NXTHDR() implementation. After getting the pointer to |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3607 the next header, it checks its (uninitialized) cmsg_len |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3608 member to see if the "message" fits in the buffer, and |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3609 returns NULL if it doesn't. Zero-filling the buffer |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3610 ensures that that doesn't happen. */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3611 memset(controlbuf, 0, controllen); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3612 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3613 for (i = 0; i < ncmsgbufs; i++) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3614 size_t msg_len, data_len = cmsgs[i].data.len; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3615 int enough_space = 0; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3616 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3617 cmsgh = (i == 0) ? CMSG_FIRSTHDR(&msg) : CMSG_NXTHDR(&msg, cmsgh); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3618 if (cmsgh == NULL) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3619 PyErr_Format(PyExc_RuntimeError, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3620 "unexpected NULL result from %s()", |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3621 (i == 0) ? "CMSG_FIRSTHDR" : "CMSG_NXTHDR"); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3622 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3623 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3624 if (!get_CMSG_LEN(data_len, &msg_len)) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3625 PyErr_SetString(PyExc_RuntimeError, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3626 "item size out of range for CMSG_LEN()"); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3627 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3628 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3629 if (cmsg_min_space(&msg, cmsgh, msg_len)) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3630 size_t space; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3631 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3632 cmsgh->cmsg_len = msg_len; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3633 if (get_cmsg_data_space(&msg, cmsgh, &space)) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3634 enough_space = (space >= data_len); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3635 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3636 if (!enough_space) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3637 PyErr_SetString(PyExc_RuntimeError, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3638 "ancillary data does not fit in calculated " |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3639 "space"); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3640 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3641 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3642 cmsgh->cmsg_level = cmsgs[i].level; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3643 cmsgh->cmsg_type = cmsgs[i].type; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3644 memcpy(CMSG_DATA(cmsgh), cmsgs[i].data.buf, data_len); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3645 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3646 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3647 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3648 /* Make the system call. */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3649 if (!IS_SELECTABLE(s)) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3650 select_error(); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3651 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3652 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3653 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3654 BEGIN_SELECT_LOOP(s) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3655 Py_BEGIN_ALLOW_THREADS; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3656 timeout = internal_select_ex(s, 1, interval); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3657 if (!timeout) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3658 bytes_sent = sendmsg(s->sock_fd, &msg, flags); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3659 Py_END_ALLOW_THREADS; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3660 if (timeout == 1) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3661 PyErr_SetString(socket_timeout, "timed out"); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3662 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3663 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3664 END_SELECT_LOOP(s) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3665 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3666 if (bytes_sent < 0) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3667 s->errorhandler(); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3668 goto finally; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3669 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3670 retval = PyLong_FromSsize_t(bytes_sent); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3671 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3672 finally: |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3673 PyMem_Free(controlbuf); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3674 for (i = 0; i < ncmsgbufs; i++) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3675 PyBuffer_Release(&cmsgs[i].data); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3676 PyMem_Free(cmsgs); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3677 Py_XDECREF(cmsg_fast); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3678 for (i = 0; i < ndatabufs; i++) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3679 PyBuffer_Release(&databufs[i]); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3680 PyMem_Free(databufs); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3681 PyMem_Free(iovs); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3682 Py_XDECREF(data_fast); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3683 return retval; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3684 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3685 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3686 PyDoc_STRVAR(sendmsg_doc, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3687 "sendmsg(buffers[, ancdata[, flags[, address]]]) -> count\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3688 \n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3689 Send normal and ancillary data to the socket, gathering the\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3690 non-ancillary data from a series of buffers and concatenating it into\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3691 a single message. The buffers argument specifies the non-ancillary\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3692 data as an iterable of buffer-compatible objects (e.g. bytes objects).\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3693 The ancdata argument specifies the ancillary data (control messages)\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3694 as an iterable of zero or more tuples (cmsg_level, cmsg_type,\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3695 cmsg_data), where cmsg_level and cmsg_type are integers specifying the\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3696 protocol level and protocol-specific type respectively, and cmsg_data\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3697 is a buffer-compatible object holding the associated data. The flags\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3698 argument defaults to 0 and has the same meaning as for send(). If\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3699 address is supplied and not None, it sets a destination address for\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3700 the message. The return value is the number of bytes of non-ancillary\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3701 data sent."); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3702 #endif /* CMSG_LEN */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3703 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3704 |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
3705 /* s.shutdown(how) method */ |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
3706 |
| 1970 | 3707 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
3708 sock_shutdown(PySocketSockObject *s, PyObject *arg) |
| 294 | 3709 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3710 int how; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3711 int res; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3712 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3713 how = PyLong_AsLong(arg); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3714 if (how == -1 && PyErr_Occurred()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3715 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3716 Py_BEGIN_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3717 res = shutdown(s->sock_fd, how); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3718 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3719 if (res < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3720 return s->errorhandler(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3721 Py_INCREF(Py_None); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3722 return Py_None; |
| 294 | 3723 } |
| 3724 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
3725 PyDoc_STRVAR(shutdown_doc, |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
3726 "shutdown(flag)\n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
3727 \n\ |
|
31027
bf038986cb8f
Patch #849595: Add socket.shutdown() constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
30978
diff
changeset
|
3728 Shut down the reading side of the socket (flag == SHUT_RD), the writing side\n\ |
|
bf038986cb8f
Patch #849595: Add socket.shutdown() constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
30978
diff
changeset
|
3729 of the socket (flag == SHUT_WR), or both ends (flag == SHUT_RDWR)."); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
3730 |
|
47667
b1f4ea4eb555
Merged revisions 64214 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47663
diff
changeset
|
3731 #if defined(MS_WINDOWS) && defined(SIO_RCVALL) |
|
44535
420fe6d7d5f4
Merged revisions 59703-59773 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
3732 static PyObject* |
|
420fe6d7d5f4
Merged revisions 59703-59773 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
3733 sock_ioctl(PySocketSockObject *s, PyObject *arg) |
|
420fe6d7d5f4
Merged revisions 59703-59773 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
3734 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3735 unsigned long cmd = SIO_RCVALL; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3736 PyObject *argO; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3737 DWORD recv; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3738 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3739 if (!PyArg_ParseTuple(arg, "kO:ioctl", &cmd, &argO)) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3740 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3741 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3742 switch (cmd) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3743 case SIO_RCVALL: { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3744 unsigned int option = RCVALL_ON; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3745 if (!PyArg_ParseTuple(arg, "kI:ioctl", &cmd, &option)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3746 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3747 if (WSAIoctl(s->sock_fd, cmd, &option, sizeof(option), |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3748 NULL, 0, &recv, NULL, NULL) == SOCKET_ERROR) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3749 return set_error(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3750 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3751 return PyLong_FromUnsignedLong(recv); } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3752 case SIO_KEEPALIVE_VALS: { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3753 struct tcp_keepalive ka; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3754 if (!PyArg_ParseTuple(arg, "k(kkk):ioctl", &cmd, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3755 &ka.onoff, &ka.keepalivetime, &ka.keepaliveinterval)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3756 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3757 if (WSAIoctl(s->sock_fd, cmd, &ka, sizeof(ka), |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3758 NULL, 0, &recv, NULL, NULL) == SOCKET_ERROR) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3759 return set_error(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3760 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3761 return PyLong_FromUnsignedLong(recv); } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3762 default: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3763 PyErr_Format(PyExc_ValueError, "invalid ioctl command %d", cmd); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
3764 return NULL; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3765 } |
|
44535
420fe6d7d5f4
Merged revisions 59703-59773 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
3766 } |
|
420fe6d7d5f4
Merged revisions 59703-59773 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
3767 PyDoc_STRVAR(sock_ioctl_doc, |
|
420fe6d7d5f4
Merged revisions 59703-59773 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
3768 "ioctl(cmd, option) -> long\n\ |
|
420fe6d7d5f4
Merged revisions 59703-59773 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
3769 \n\ |
|
56252
debb245ebb40
http://bugs.python.org/issue6971
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
53824
diff
changeset
|
3770 Control the socket with WSAIoctl syscall. Currently supported 'cmd' values are\n\ |
|
debb245ebb40
http://bugs.python.org/issue6971
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
53824
diff
changeset
|
3771 SIO_RCVALL: 'option' must be one of the socket.RCVALL_* constants.\n\ |
|
debb245ebb40
http://bugs.python.org/issue6971
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
53824
diff
changeset
|
3772 SIO_KEEPALIVE_VALS: 'option' is a tuple of (onoff, timeout, interval)."); |
|
44535
420fe6d7d5f4
Merged revisions 59703-59773 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
3773 |
|
420fe6d7d5f4
Merged revisions 59703-59773 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
3774 #endif |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
3775 |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
3776 /* List of methods for socket objects */ |
| 294 | 3777 |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
3778 static PyMethodDef sock_methods[] = { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3779 {"_accept", (PyCFunction)sock_accept, METH_NOARGS, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3780 accept_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3781 {"bind", (PyCFunction)sock_bind, METH_O, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3782 bind_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3783 {"close", (PyCFunction)sock_close, METH_NOARGS, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3784 close_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3785 {"connect", (PyCFunction)sock_connect, METH_O, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3786 connect_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3787 {"connect_ex", (PyCFunction)sock_connect_ex, METH_O, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3788 connect_ex_doc}, |
|
63890
60076f28c023
Followup to r83869 and issue #8524: rename socket.forget() to socket.detach()
Antoine Pitrou <solipsis@pitrou.net>
parents:
63856
diff
changeset
|
3789 {"detach", (PyCFunction)sock_detach, METH_NOARGS, |
|
60076f28c023
Followup to r83869 and issue #8524: rename socket.forget() to socket.detach()
Antoine Pitrou <solipsis@pitrou.net>
parents:
63856
diff
changeset
|
3790 detach_doc}, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3791 {"fileno", (PyCFunction)sock_fileno, METH_NOARGS, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3792 fileno_doc}, |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
3793 #ifdef HAVE_GETPEERNAME |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3794 {"getpeername", (PyCFunction)sock_getpeername, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3795 METH_NOARGS, getpeername_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3796 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3797 {"getsockname", (PyCFunction)sock_getsockname, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3798 METH_NOARGS, getsockname_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3799 {"getsockopt", (PyCFunction)sock_getsockopt, METH_VARARGS, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3800 getsockopt_doc}, |
|
47667
b1f4ea4eb555
Merged revisions 64214 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47663
diff
changeset
|
3801 #if defined(MS_WINDOWS) && defined(SIO_RCVALL) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3802 {"ioctl", (PyCFunction)sock_ioctl, METH_VARARGS, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3803 sock_ioctl_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3804 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3805 {"listen", (PyCFunction)sock_listen, METH_O, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3806 listen_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3807 {"recv", (PyCFunction)sock_recv, METH_VARARGS, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3808 recv_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3809 {"recv_into", (PyCFunction)sock_recv_into, METH_VARARGS | METH_KEYWORDS, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3810 recv_into_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3811 {"recvfrom", (PyCFunction)sock_recvfrom, METH_VARARGS, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3812 recvfrom_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3813 {"recvfrom_into", (PyCFunction)sock_recvfrom_into, METH_VARARGS | METH_KEYWORDS, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3814 recvfrom_into_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3815 {"send", (PyCFunction)sock_send, METH_VARARGS, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3816 send_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3817 {"sendall", (PyCFunction)sock_sendall, METH_VARARGS, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3818 sendall_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3819 {"sendto", (PyCFunction)sock_sendto, METH_VARARGS, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3820 sendto_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3821 {"setblocking", (PyCFunction)sock_setblocking, METH_O, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3822 setblocking_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3823 {"settimeout", (PyCFunction)sock_settimeout, METH_O, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3824 settimeout_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3825 {"gettimeout", (PyCFunction)sock_gettimeout, METH_NOARGS, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3826 gettimeout_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3827 {"setsockopt", (PyCFunction)sock_setsockopt, METH_VARARGS, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3828 setsockopt_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3829 {"shutdown", (PyCFunction)sock_shutdown, METH_O, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3830 shutdown_doc}, |
|
72029
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3831 #ifdef CMSG_LEN |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3832 {"recvmsg", (PyCFunction)sock_recvmsg, METH_VARARGS, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3833 recvmsg_doc}, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3834 {"recvmsg_into", (PyCFunction)sock_recvmsg_into, METH_VARARGS, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3835 recvmsg_into_doc,}, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3836 {"sendmsg", (PyCFunction)sock_sendmsg, METH_VARARGS, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3837 sendmsg_doc}, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
3838 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3839 {NULL, NULL} /* sentinel */ |
| 294 | 3840 }; |
| 3841 | |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36684
diff
changeset
|
3842 /* SockObject members */ |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36684
diff
changeset
|
3843 static PyMemberDef sock_memberlist[] = { |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36684
diff
changeset
|
3844 {"family", T_INT, offsetof(PySocketSockObject, sock_family), READONLY, "the socket family"}, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36684
diff
changeset
|
3845 {"type", T_INT, offsetof(PySocketSockObject, sock_type), READONLY, "the socket type"}, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36684
diff
changeset
|
3846 {"proto", T_INT, offsetof(PySocketSockObject, sock_proto), READONLY, "the socket protocol"}, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36684
diff
changeset
|
3847 {"timeout", T_DOUBLE, offsetof(PySocketSockObject, sock_timeout), READONLY, "the socket timeout"}, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36684
diff
changeset
|
3848 {0}, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36684
diff
changeset
|
3849 }; |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
3850 |
| 1970 | 3851 /* Deallocate a socket object in response to the last Py_DECREF(). |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
3852 First close the file description. */ |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
3853 |
| 294 | 3854 static void |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
3855 sock_dealloc(PySocketSockObject *s) |
| 294 | 3856 { |
|
65707
cff78ffb932a
Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents:
65667
diff
changeset
|
3857 if (s->sock_fd != -1) { |
|
cff78ffb932a
Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents:
65667
diff
changeset
|
3858 PyObject *exc, *val, *tb; |
|
cff78ffb932a
Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents:
65667
diff
changeset
|
3859 Py_ssize_t old_refcount = Py_REFCNT(s); |
|
cff78ffb932a
Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents:
65667
diff
changeset
|
3860 ++Py_REFCNT(s); |
|
cff78ffb932a
Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents:
65667
diff
changeset
|
3861 PyErr_Fetch(&exc, &val, &tb); |
|
cff78ffb932a
Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents:
65667
diff
changeset
|
3862 if (PyErr_WarnFormat(PyExc_ResourceWarning, 1, |
|
cff78ffb932a
Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents:
65667
diff
changeset
|
3863 "unclosed %R", s)) |
|
cff78ffb932a
Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents:
65667
diff
changeset
|
3864 /* Spurious errors can appear at shutdown */ |
|
cff78ffb932a
Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents:
65667
diff
changeset
|
3865 if (PyErr_ExceptionMatches(PyExc_Warning)) |
|
cff78ffb932a
Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents:
65667
diff
changeset
|
3866 PyErr_WriteUnraisable((PyObject *) s); |
|
cff78ffb932a
Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents:
65667
diff
changeset
|
3867 PyErr_Restore(exc, val, tb); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3868 (void) SOCKETCLOSE(s->sock_fd); |
|
65707
cff78ffb932a
Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents:
65667
diff
changeset
|
3869 Py_REFCNT(s) = old_refcount; |
|
cff78ffb932a
Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents:
65667
diff
changeset
|
3870 } |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3871 Py_TYPE(s)->tp_free((PyObject *)s); |
| 294 | 3872 } |
| 3873 | |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
3874 |
|
2055
cf31eab6ab5a
Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents:
1970
diff
changeset
|
3875 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
3876 sock_repr(PySocketSockObject *s) |
|
2055
cf31eab6ab5a
Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents:
1970
diff
changeset
|
3877 { |
|
13171
c17fd2ca6659
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
12712
diff
changeset
|
3878 #if SIZEOF_SOCKET_T > SIZEOF_LONG |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3879 if (s->sock_fd > LONG_MAX) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3880 /* this can occur on Win64, and actually there is a special |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3881 ugly printf formatter for decimal pointer length integer |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3882 printing, only bother if necessary*/ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3883 PyErr_SetString(PyExc_OverflowError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3884 "no printf formatter to display " |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3885 "the socket descriptor in decimal"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3886 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3887 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3888 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3889 return PyUnicode_FromFormat( |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3890 "<socket object, fd=%ld, family=%d, type=%d, proto=%d>", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3891 (long)s->sock_fd, s->sock_family, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3892 s->sock_type, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3893 s->sock_proto); |
|
2055
cf31eab6ab5a
Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents:
1970
diff
changeset
|
3894 } |
|
cf31eab6ab5a
Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents:
1970
diff
changeset
|
3895 |
|
cf31eab6ab5a
Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents:
1970
diff
changeset
|
3896 |
|
20727
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
3897 /* Create a new, uninitialized socket object. */ |
|
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
3898 |
|
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
3899 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
3900 sock_new(PyTypeObject *type, PyObject *args, PyObject *kwds) |
|
20727
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
3901 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3902 PyObject *new; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3903 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3904 new = type->tp_alloc(type, 0); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3905 if (new != NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3906 ((PySocketSockObject *)new)->sock_fd = -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3907 ((PySocketSockObject *)new)->sock_timeout = -1.0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3908 ((PySocketSockObject *)new)->errorhandler = &set_error; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3909 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3910 return new; |
|
20727
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
3911 } |
|
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
3912 |
|
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
3913 |
|
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
3914 /* Initialize a new socket object. */ |
|
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
3915 |
|
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
3916 /*ARGSUSED*/ |
|
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
3917 static int |
|
23807
cc65b5bcfc38
work around name clash with OS/2 TCPIP routine sock_init()
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
23736
diff
changeset
|
3918 sock_initobj(PyObject *self, PyObject *args, PyObject *kwds) |
|
20727
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
3919 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3920 PySocketSockObject *s = (PySocketSockObject *)self; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3921 PyObject *fdobj = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3922 SOCKET_T fd = INVALID_SOCKET; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3923 int family = AF_INET, type = SOCK_STREAM, proto = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3924 static char *keywords[] = {"family", "type", "proto", "fileno", 0}; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3925 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3926 if (!PyArg_ParseTupleAndKeywords(args, kwds, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3927 "|iiiO:socket", keywords, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3928 &family, &type, &proto, &fdobj)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3929 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3930 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3931 if (fdobj != NULL && fdobj != Py_None) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3932 fd = PyLong_AsSocket_t(fdobj); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3933 if (fd == (SOCKET_T)(-1) && PyErr_Occurred()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3934 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3935 if (fd == INVALID_SOCKET) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3936 PyErr_SetString(PyExc_ValueError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3937 "can't use invalid socket value"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3938 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3939 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3940 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3941 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3942 Py_BEGIN_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3943 fd = socket(family, type, proto); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3944 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3945 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3946 if (fd == INVALID_SOCKET) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3947 set_error(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3948 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3949 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3950 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3951 init_sockobject(s, fd, family, type, proto); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3952 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3953 return 0; |
|
23715
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
3954 |
|
20727
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
3955 } |
|
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
3956 |
|
abd71e89840f
Made SocketType and socket the same thing: a subclassable type whose
Guido van Rossum <guido@python.org>
parents:
20679
diff
changeset
|
3957 |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
3958 /* Type object for socket objects. */ |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
3959 |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
3960 static PyTypeObject sock_type = { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3961 PyVarObject_HEAD_INIT(0, 0) /* Must fill in type value later */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3962 "_socket.socket", /* tp_name */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3963 sizeof(PySocketSockObject), /* tp_basicsize */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3964 0, /* tp_itemsize */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3965 (destructor)sock_dealloc, /* tp_dealloc */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3966 0, /* tp_print */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3967 0, /* tp_getattr */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3968 0, /* tp_setattr */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3969 0, /* tp_reserved */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3970 (reprfunc)sock_repr, /* tp_repr */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3971 0, /* tp_as_number */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3972 0, /* tp_as_sequence */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3973 0, /* tp_as_mapping */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3974 0, /* tp_hash */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3975 0, /* tp_call */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3976 0, /* tp_str */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3977 PyObject_GenericGetAttr, /* tp_getattro */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3978 0, /* tp_setattro */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3979 0, /* tp_as_buffer */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3980 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3981 sock_doc, /* tp_doc */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3982 0, /* tp_traverse */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3983 0, /* tp_clear */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3984 0, /* tp_richcompare */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3985 0, /* tp_weaklistoffset */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3986 0, /* tp_iter */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3987 0, /* tp_iternext */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3988 sock_methods, /* tp_methods */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3989 sock_memberlist, /* tp_members */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3990 0, /* tp_getset */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3991 0, /* tp_base */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3992 0, /* tp_dict */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3993 0, /* tp_descr_get */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3994 0, /* tp_descr_set */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3995 0, /* tp_dictoffset */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3996 sock_initobj, /* tp_init */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3997 PyType_GenericAlloc, /* tp_alloc */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3998 sock_new, /* tp_new */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
3999 PyObject_Del, /* tp_free */ |
| 294 | 4000 }; |
| 4001 | |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
4002 |
|
324
a81020d505bf
Add gethostname() and s.avail().
Guido van Rossum <guido@python.org>
parents:
309
diff
changeset
|
4003 /* Python interface to gethostname(). */ |
|
a81020d505bf
Add gethostname() and s.avail().
Guido van Rossum <guido@python.org>
parents:
309
diff
changeset
|
4004 |
|
a81020d505bf
Add gethostname() and s.avail().
Guido van Rossum <guido@python.org>
parents:
309
diff
changeset
|
4005 /*ARGSUSED*/ |
| 1970 | 4006 static PyObject * |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
4007 socket_gethostname(PyObject *self, PyObject *unused) |
|
324
a81020d505bf
Add gethostname() and s.avail().
Guido van Rossum <guido@python.org>
parents:
309
diff
changeset
|
4008 { |
|
65721
a4fd3dc74299
Issue #9377: Use Unicode API for gethostname on Windows.
Martin v. Löwis <martin@v.loewis.de>
parents:
65707
diff
changeset
|
4009 #ifdef MS_WINDOWS |
|
a4fd3dc74299
Issue #9377: Use Unicode API for gethostname on Windows.
Martin v. Löwis <martin@v.loewis.de>
parents:
65707
diff
changeset
|
4010 /* Don't use winsock's gethostname, as this returns the ANSI |
|
a4fd3dc74299
Issue #9377: Use Unicode API for gethostname on Windows.
Martin v. Löwis <martin@v.loewis.de>
parents:
65707
diff
changeset
|
4011 version of the hostname, whereas we need a Unicode string. |
|
a4fd3dc74299
Issue #9377: Use Unicode API for gethostname on Windows.
Martin v. Löwis <martin@v.loewis.de>
parents:
65707
diff
changeset
|
4012 Otherwise, gethostname apparently also returns the DNS name. */ |
|
65981
49b0d423023e
Fixed socket_gethostname() on windows.
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
65727
diff
changeset
|
4013 wchar_t buf[MAX_COMPUTERNAME_LENGTH + 1]; |
|
72510
b534b56379cb
Use the new Py_ARRAY_LENGTH macro
Victor Stinner <victor.stinner@haypocalc.com>
parents:
72117
diff
changeset
|
4014 DWORD size = Py_ARRAY_LENGTH(buf); |
|
73594
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4015 wchar_t *name; |
|
65981
49b0d423023e
Fixed socket_gethostname() on windows.
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
65727
diff
changeset
|
4016 PyObject *result; |
|
73594
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4017 |
|
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4018 if (GetComputerNameExW(ComputerNamePhysicalDnsHostname, buf, &size)) |
|
73683
d48b4a1c511a
Use the new Unicode API
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73594
diff
changeset
|
4019 return PyUnicode_FromWideChar(buf, size); |
|
73594
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4020 |
|
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4021 if (GetLastError() != ERROR_MORE_DATA) |
|
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4022 return PyErr_SetFromWindowsErr(0); |
|
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4023 |
|
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4024 if (size == 0) |
|
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4025 return PyUnicode_New(0, 0); |
|
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4026 |
|
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4027 /* MSDN says ERROR_MORE_DATA may occur because DNS allows longer |
|
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4028 names */ |
|
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4029 name = PyMem_Malloc(size * sizeof(wchar_t)); |
|
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4030 if (!name) |
|
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4031 return NULL; |
|
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4032 if (!GetComputerNameExW(ComputerNamePhysicalDnsHostname, |
|
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4033 name, |
|
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4034 &size)) |
|
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4035 { |
|
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4036 PyMem_Free(name); |
|
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4037 return PyErr_SetFromWindowsErr(0); |
|
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4038 } |
|
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4039 |
|
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4040 result = PyUnicode_FromWideChar(name, size); |
|
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4041 PyMem_Free(name); |
|
488a2e41e89d
socket_gethostname() uses a wchar_t* with PyMem_Malloc() to avoid the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73478
diff
changeset
|
4042 return result; |
|
65721
a4fd3dc74299
Issue #9377: Use Unicode API for gethostname on Windows.
Martin v. Löwis <martin@v.loewis.de>
parents:
65707
diff
changeset
|
4043 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4044 char buf[1024]; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4045 int res; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4046 Py_BEGIN_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4047 res = gethostname(buf, (int) sizeof buf - 1); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4048 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4049 if (res < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4050 return set_error(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4051 buf[sizeof buf - 1] = '\0'; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4052 return PyUnicode_FromString(buf); |
|
65721
a4fd3dc74299
Issue #9377: Use Unicode API for gethostname on Windows.
Martin v. Löwis <martin@v.loewis.de>
parents:
65707
diff
changeset
|
4053 #endif |
|
324
a81020d505bf
Add gethostname() and s.avail().
Guido van Rossum <guido@python.org>
parents:
309
diff
changeset
|
4054 } |
| 926 | 4055 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
4056 PyDoc_STRVAR(gethostname_doc, |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4057 "gethostname() -> string\n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4058 \n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
4059 Return the current host name."); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4060 |
|
68194
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4061 #ifdef HAVE_SETHOSTNAME |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4062 PyDoc_STRVAR(sethostname_doc, |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4063 "sethostname(name)\n\n\ |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4064 Sets the hostname to name."); |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4065 |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4066 static PyObject * |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4067 socket_sethostname(PyObject *self, PyObject *args) |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4068 { |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4069 PyObject *hnobj; |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4070 Py_buffer buf; |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4071 int res, flag = 0; |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4072 |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4073 if (!PyArg_ParseTuple(args, "S:sethostname", &hnobj)) { |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4074 PyErr_Clear(); |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4075 if (!PyArg_ParseTuple(args, "O&:sethostname", |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4076 PyUnicode_FSConverter, &hnobj)) |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4077 return NULL; |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4078 flag = 1; |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4079 } |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4080 res = PyObject_GetBuffer(hnobj, &buf, PyBUF_SIMPLE); |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4081 if (!res) { |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4082 res = sethostname(buf.buf, buf.len); |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4083 PyBuffer_Release(&buf); |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4084 } |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4085 if (flag) |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4086 Py_DECREF(hnobj); |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4087 if (res) |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4088 return set_error(); |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4089 Py_RETURN_NONE; |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4090 } |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
4091 #endif |
| 926 | 4092 |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
4093 /* Python interface to gethostbyname(name). */ |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
4094 |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
4095 /*ARGSUSED*/ |
| 1970 | 4096 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
4097 socket_gethostbyname(PyObject *self, PyObject *args) |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
4098 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4099 char *name; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4100 sock_addr_t addrbuf; |
|
64230
35304c2fe9e0
Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex and
Martin v. Löwis <martin@v.loewis.de>
parents:
64120
diff
changeset
|
4101 PyObject *ret = NULL; |
|
35304c2fe9e0
Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex and
Martin v. Löwis <martin@v.loewis.de>
parents:
64120
diff
changeset
|
4102 |
|
35304c2fe9e0
Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex and
Martin v. Löwis <martin@v.loewis.de>
parents:
64120
diff
changeset
|
4103 if (!PyArg_ParseTuple(args, "et:gethostbyname", "idna", &name)) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4104 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4105 if (setipaddr(name, SAS2SA(&addrbuf), sizeof(addrbuf), AF_INET) < 0) |
|
64230
35304c2fe9e0
Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex and
Martin v. Löwis <martin@v.loewis.de>
parents:
64120
diff
changeset
|
4106 goto finally; |
|
35304c2fe9e0
Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex and
Martin v. Löwis <martin@v.loewis.de>
parents:
64120
diff
changeset
|
4107 ret = makeipaddr(SAS2SA(&addrbuf), sizeof(struct sockaddr_in)); |
|
35304c2fe9e0
Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex and
Martin v. Löwis <martin@v.loewis.de>
parents:
64120
diff
changeset
|
4108 finally: |
|
35304c2fe9e0
Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex and
Martin v. Löwis <martin@v.loewis.de>
parents:
64120
diff
changeset
|
4109 PyMem_Free(name); |
|
35304c2fe9e0
Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex and
Martin v. Löwis <martin@v.loewis.de>
parents:
64120
diff
changeset
|
4110 return ret; |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
4111 } |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
4112 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
4113 PyDoc_STRVAR(gethostbyname_doc, |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4114 "gethostbyname(host) -> address\n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4115 \n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
4116 Return the IP address (a string of the form '255.255.255.255') for a host."); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4117 |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4118 |
|
8821
a1c16a3fa7db
Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents:
8631
diff
changeset
|
4119 /* Convenience function common to gethostbyname_ex and gethostbyaddr */ |
|
a1c16a3fa7db
Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents:
8631
diff
changeset
|
4120 |
|
a1c16a3fa7db
Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents:
8631
diff
changeset
|
4121 static PyObject * |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
4122 gethost_common(struct hostent *h, struct sockaddr *addr, int alen, int af) |
|
8821
a1c16a3fa7db
Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents:
8631
diff
changeset
|
4123 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4124 char **pch; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4125 PyObject *rtn_tuple = (PyObject *)NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4126 PyObject *name_list = (PyObject *)NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4127 PyObject *addr_list = (PyObject *)NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4128 PyObject *tmp; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4129 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4130 if (h == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4131 /* Let's get real error message to return */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4132 set_herror(h_errno); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4133 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4134 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4135 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4136 if (h->h_addrtype != af) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4137 /* Let's get real error message to return */ |
|
74007
51412b4b81ae
Issue #13560: os.strerror() now uses the current locale encoding instead of UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73998
diff
changeset
|
4138 errno = EAFNOSUPPORT; |
|
51412b4b81ae
Issue #13560: os.strerror() now uses the current locale encoding instead of UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73998
diff
changeset
|
4139 PyErr_SetFromErrno(PyExc_OSError); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4140 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4141 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4142 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4143 switch (af) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4144 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4145 case AF_INET: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4146 if (alen < sizeof(struct sockaddr_in)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4147 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4148 break; |
|
23715
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
4149 |
|
21128
15ff504632ed
Remove INET6 define. Use ENABLE_IPV6 instead.
Martin v. Löwis <martin@v.loewis.de>
parents:
21094
diff
changeset
|
4150 #ifdef ENABLE_IPV6 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4151 case AF_INET6: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4152 if (alen < sizeof(struct sockaddr_in6)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4153 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4154 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4155 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4156 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4157 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4158 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4159 if ((name_list = PyList_New(0)) == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4160 goto err; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4161 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4162 if ((addr_list = PyList_New(0)) == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4163 goto err; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4164 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4165 /* SF #1511317: h_aliases can be NULL */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4166 if (h->h_aliases) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4167 for (pch = h->h_aliases; *pch != NULL; pch++) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4168 int status; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4169 tmp = PyUnicode_FromString(*pch); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4170 if (tmp == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4171 goto err; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4172 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4173 status = PyList_Append(name_list, tmp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4174 Py_DECREF(tmp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4175 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4176 if (status) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4177 goto err; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4178 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4179 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4180 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4181 for (pch = h->h_addr_list; *pch != NULL; pch++) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4182 int status; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4183 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4184 switch (af) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4185 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4186 case AF_INET: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4187 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4188 struct sockaddr_in sin; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4189 memset(&sin, 0, sizeof(sin)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4190 sin.sin_family = af; |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
4191 #ifdef HAVE_SOCKADDR_SA_LEN |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4192 sin.sin_len = sizeof(sin); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4193 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4194 memcpy(&sin.sin_addr, *pch, sizeof(sin.sin_addr)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4195 tmp = makeipaddr((struct sockaddr *)&sin, sizeof(sin)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4196 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4197 if (pch == h->h_addr_list && alen >= sizeof(sin)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4198 memcpy((char *) addr, &sin, sizeof(sin)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4199 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4200 } |
|
23715
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
4201 |
|
21128
15ff504632ed
Remove INET6 define. Use ENABLE_IPV6 instead.
Martin v. Löwis <martin@v.loewis.de>
parents:
21094
diff
changeset
|
4202 #ifdef ENABLE_IPV6 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4203 case AF_INET6: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4204 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4205 struct sockaddr_in6 sin6; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4206 memset(&sin6, 0, sizeof(sin6)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4207 sin6.sin6_family = af; |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
4208 #ifdef HAVE_SOCKADDR_SA_LEN |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4209 sin6.sin6_len = sizeof(sin6); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4210 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4211 memcpy(&sin6.sin6_addr, *pch, sizeof(sin6.sin6_addr)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4212 tmp = makeipaddr((struct sockaddr *)&sin6, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4213 sizeof(sin6)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4214 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4215 if (pch == h->h_addr_list && alen >= sizeof(sin6)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4216 memcpy((char *) addr, &sin6, sizeof(sin6)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4217 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4218 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4219 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4220 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4221 default: /* can't happen */ |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
4222 PyErr_SetString(PyExc_OSError, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4223 "unsupported address family"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4224 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4225 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4226 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4227 if (tmp == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4228 goto err; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4229 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4230 status = PyList_Append(addr_list, tmp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4231 Py_DECREF(tmp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4232 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4233 if (status) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4234 goto err; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4235 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4236 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4237 rtn_tuple = Py_BuildValue("sOO", h->h_name, name_list, addr_list); |
|
23715
c2733e8f6612
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
23714
diff
changeset
|
4238 |
|
8821
a1c16a3fa7db
Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents:
8631
diff
changeset
|
4239 err: |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4240 Py_XDECREF(name_list); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4241 Py_XDECREF(addr_list); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4242 return rtn_tuple; |
|
8821
a1c16a3fa7db
Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents:
8631
diff
changeset
|
4243 } |
|
a1c16a3fa7db
Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents:
8631
diff
changeset
|
4244 |
|
a1c16a3fa7db
Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents:
8631
diff
changeset
|
4245 |
|
a1c16a3fa7db
Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents:
8631
diff
changeset
|
4246 /* Python interface to gethostbyname_ex(name). */ |
|
a1c16a3fa7db
Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents:
8631
diff
changeset
|
4247 |
|
a1c16a3fa7db
Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents:
8631
diff
changeset
|
4248 /*ARGSUSED*/ |
|
a1c16a3fa7db
Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents:
8631
diff
changeset
|
4249 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
4250 socket_gethostbyname_ex(PyObject *self, PyObject *args) |
|
8821
a1c16a3fa7db
Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents:
8631
diff
changeset
|
4251 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4252 char *name; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4253 struct hostent *h; |
|
74142
683a1b1ff15d
Issue #8623: Fix some strict-aliasing warnings. Patch by David Watson.
Charles-François Natali <neologix@free.fr>
parents:
74012
diff
changeset
|
4254 sock_addr_t addr; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4255 struct sockaddr *sa; |
|
64230
35304c2fe9e0
Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex and
Martin v. Löwis <martin@v.loewis.de>
parents:
64120
diff
changeset
|
4256 PyObject *ret = NULL; |
|
8821
a1c16a3fa7db
Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents:
8631
diff
changeset
|
4257 #ifdef HAVE_GETHOSTBYNAME_R |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4258 struct hostent hp_allocated; |
|
10453
5b54fa775e55
Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents:
10442
diff
changeset
|
4259 #ifdef HAVE_GETHOSTBYNAME_R_3_ARG |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4260 struct hostent_data data; |
|
10453
5b54fa775e55
Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents:
10442
diff
changeset
|
4261 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4262 char buf[16384]; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4263 int buf_len = (sizeof buf) - 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4264 int errnop; |
|
10453
5b54fa775e55
Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents:
10442
diff
changeset
|
4265 #endif |
|
5b54fa775e55
Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents:
10442
diff
changeset
|
4266 #if defined(HAVE_GETHOSTBYNAME_R_3_ARG) || defined(HAVE_GETHOSTBYNAME_R_6_ARG) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4267 int result; |
|
10401
f81db738abd9
Patch by Rob Riggs for Linux -- glibc2 has a different argument
Guido van Rossum <guido@python.org>
parents:
9679
diff
changeset
|
4268 #endif |
|
8821
a1c16a3fa7db
Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents:
8631
diff
changeset
|
4269 #endif /* HAVE_GETHOSTBYNAME_R */ |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
4270 |
|
64230
35304c2fe9e0
Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex and
Martin v. Löwis <martin@v.loewis.de>
parents:
64120
diff
changeset
|
4271 if (!PyArg_ParseTuple(args, "et:gethostbyname_ex", "idna", &name)) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4272 return NULL; |
|
74142
683a1b1ff15d
Issue #8623: Fix some strict-aliasing warnings. Patch by David Watson.
Charles-François Natali <neologix@free.fr>
parents:
74012
diff
changeset
|
4273 if (setipaddr(name, SAS2SA(&addr), sizeof(addr), AF_INET) < 0) |
|
64230
35304c2fe9e0
Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex and
Martin v. Löwis <martin@v.loewis.de>
parents:
64120
diff
changeset
|
4274 goto finally; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4275 Py_BEGIN_ALLOW_THREADS |
|
8821
a1c16a3fa7db
Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents:
8631
diff
changeset
|
4276 #ifdef HAVE_GETHOSTBYNAME_R |
|
10453
5b54fa775e55
Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents:
10442
diff
changeset
|
4277 #if defined(HAVE_GETHOSTBYNAME_R_6_ARG) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4278 result = gethostbyname_r(name, &hp_allocated, buf, buf_len, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4279 &h, &errnop); |
|
10453
5b54fa775e55
Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents:
10442
diff
changeset
|
4280 #elif defined(HAVE_GETHOSTBYNAME_R_5_ARG) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4281 h = gethostbyname_r(name, &hp_allocated, buf, buf_len, &errnop); |
|
10453
5b54fa775e55
Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents:
10442
diff
changeset
|
4282 #else /* HAVE_GETHOSTBYNAME_R_3_ARG */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4283 memset((void *) &data, '\0', sizeof(data)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4284 result = gethostbyname_r(name, &hp_allocated, &data); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4285 h = (result != 0) ? NULL : &hp_allocated; |
|
10401
f81db738abd9
Patch by Rob Riggs for Linux -- glibc2 has a different argument
Guido van Rossum <guido@python.org>
parents:
9679
diff
changeset
|
4286 #endif |
|
8821
a1c16a3fa7db
Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents:
8631
diff
changeset
|
4287 #else /* not HAVE_GETHOSTBYNAME_R */ |
|
10442
9184c9e108f9
Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents:
10441
diff
changeset
|
4288 #ifdef USE_GETHOSTBYNAME_LOCK |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4289 PyThread_acquire_lock(netdb_lock, 1); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4290 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4291 h = gethostbyname(name); |
|
10441
9ba5dffccb1b
Jonathan Giddy writes:
Guido van Rossum <guido@python.org>
parents:
10401
diff
changeset
|
4292 #endif /* HAVE_GETHOSTBYNAME_R */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4293 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4294 /* Some C libraries would require addr.__ss_family instead of |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4295 addr.ss_family. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4296 Therefore, we cast the sockaddr_storage into sockaddr to |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4297 access sa_family. */ |
|
74142
683a1b1ff15d
Issue #8623: Fix some strict-aliasing warnings. Patch by David Watson.
Charles-François Natali <neologix@free.fr>
parents:
74012
diff
changeset
|
4298 sa = SAS2SA(&addr); |
|
683a1b1ff15d
Issue #8623: Fix some strict-aliasing warnings. Patch by David Watson.
Charles-François Natali <neologix@free.fr>
parents:
74012
diff
changeset
|
4299 ret = gethost_common(h, SAS2SA(&addr), sizeof(addr), |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4300 sa->sa_family); |
|
10442
9184c9e108f9
Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents:
10441
diff
changeset
|
4301 #ifdef USE_GETHOSTBYNAME_LOCK |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4302 PyThread_release_lock(netdb_lock); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4303 #endif |
|
64230
35304c2fe9e0
Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex and
Martin v. Löwis <martin@v.loewis.de>
parents:
64120
diff
changeset
|
4304 finally: |
|
35304c2fe9e0
Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex and
Martin v. Löwis <martin@v.loewis.de>
parents:
64120
diff
changeset
|
4305 PyMem_Free(name); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4306 return ret; |
|
8821
a1c16a3fa7db
Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents:
8631
diff
changeset
|
4307 } |
|
a1c16a3fa7db
Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents:
8631
diff
changeset
|
4308 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
4309 PyDoc_STRVAR(ghbn_ex_doc, |
|
8821
a1c16a3fa7db
Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents:
8631
diff
changeset
|
4310 "gethostbyname_ex(host) -> (name, aliaslist, addresslist)\n\ |
|
a1c16a3fa7db
Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents:
8631
diff
changeset
|
4311 \n\ |
|
a1c16a3fa7db
Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents:
8631
diff
changeset
|
4312 Return the true host name, a list of aliases, and a list of IP addresses,\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
4313 for a host. The host argument is a string giving a host name or IP number."); |
|
8821
a1c16a3fa7db
Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents:
8631
diff
changeset
|
4314 |
|
a1c16a3fa7db
Added gethostbyname_ex(), which returns the same kind of data as
Guido van Rossum <guido@python.org>
parents:
8631
diff
changeset
|
4315 |
|
2055
cf31eab6ab5a
Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents:
1970
diff
changeset
|
4316 /* Python interface to gethostbyaddr(IP). */ |
|
cf31eab6ab5a
Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents:
1970
diff
changeset
|
4317 |
|
cf31eab6ab5a
Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents:
1970
diff
changeset
|
4318 /*ARGSUSED*/ |
|
cf31eab6ab5a
Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents:
1970
diff
changeset
|
4319 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
4320 socket_gethostbyaddr(PyObject *self, PyObject *args) |
|
2055
cf31eab6ab5a
Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents:
1970
diff
changeset
|
4321 { |
|
74142
683a1b1ff15d
Issue #8623: Fix some strict-aliasing warnings. Patch by David Watson.
Charles-François Natali <neologix@free.fr>
parents:
74012
diff
changeset
|
4322 sock_addr_t addr; |
|
683a1b1ff15d
Issue #8623: Fix some strict-aliasing warnings. Patch by David Watson.
Charles-François Natali <neologix@free.fr>
parents:
74012
diff
changeset
|
4323 struct sockaddr *sa = SAS2SA(&addr); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4324 char *ip_num; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4325 struct hostent *h; |
|
64230
35304c2fe9e0
Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex and
Martin v. Löwis <martin@v.loewis.de>
parents:
64120
diff
changeset
|
4326 PyObject *ret = NULL; |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6718
diff
changeset
|
4327 #ifdef HAVE_GETHOSTBYNAME_R |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4328 struct hostent hp_allocated; |
|
10453
5b54fa775e55
Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents:
10442
diff
changeset
|
4329 #ifdef HAVE_GETHOSTBYNAME_R_3_ARG |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4330 struct hostent_data data; |
|
10453
5b54fa775e55
Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents:
10442
diff
changeset
|
4331 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4332 /* glibcs up to 2.10 assume that the buf argument to |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4333 gethostbyaddr_r is 8-byte aligned, which at least llvm-gcc |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4334 does not ensure. The attribute below instructs the compiler |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4335 to maintain this alignment. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4336 char buf[16384] Py_ALIGNED(8); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4337 int buf_len = (sizeof buf) - 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4338 int errnop; |
|
10453
5b54fa775e55
Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents:
10442
diff
changeset
|
4339 #endif |
|
5b54fa775e55
Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents:
10442
diff
changeset
|
4340 #if defined(HAVE_GETHOSTBYNAME_R_3_ARG) || defined(HAVE_GETHOSTBYNAME_R_6_ARG) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4341 int result; |
|
10401
f81db738abd9
Patch by Rob Riggs for Linux -- glibc2 has a different argument
Guido van Rossum <guido@python.org>
parents:
9679
diff
changeset
|
4342 #endif |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6718
diff
changeset
|
4343 #endif /* HAVE_GETHOSTBYNAME_R */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4344 char *ap; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4345 int al; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4346 int af; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4347 |
|
64230
35304c2fe9e0
Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex and
Martin v. Löwis <martin@v.loewis.de>
parents:
64120
diff
changeset
|
4348 if (!PyArg_ParseTuple(args, "et:gethostbyaddr", "idna", &ip_num)) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4349 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4350 af = AF_UNSPEC; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4351 if (setipaddr(ip_num, sa, sizeof(addr), af) < 0) |
|
64230
35304c2fe9e0
Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex and
Martin v. Löwis <martin@v.loewis.de>
parents:
64120
diff
changeset
|
4352 goto finally; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4353 af = sa->sa_family; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4354 ap = NULL; |
|
68102
e2f96bd29252
Issue #8914: fix various warnings from the Clang static analyzer v254.
Brett Cannon <bcannon@gmail.com>
parents:
66799
diff
changeset
|
4355 /* al = 0; */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4356 switch (af) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4357 case AF_INET: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4358 ap = (char *)&((struct sockaddr_in *)sa)->sin_addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4359 al = sizeof(((struct sockaddr_in *)sa)->sin_addr); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4360 break; |
|
21128
15ff504632ed
Remove INET6 define. Use ENABLE_IPV6 instead.
Martin v. Löwis <martin@v.loewis.de>
parents:
21094
diff
changeset
|
4361 #ifdef ENABLE_IPV6 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4362 case AF_INET6: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4363 ap = (char *)&((struct sockaddr_in6 *)sa)->sin6_addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4364 al = sizeof(((struct sockaddr_in6 *)sa)->sin6_addr); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4365 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4366 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4367 default: |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
4368 PyErr_SetString(PyExc_OSError, "unsupported address family"); |
|
64230
35304c2fe9e0
Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex and
Martin v. Löwis <martin@v.loewis.de>
parents:
64120
diff
changeset
|
4369 goto finally; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4370 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4371 Py_BEGIN_ALLOW_THREADS |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6718
diff
changeset
|
4372 #ifdef HAVE_GETHOSTBYNAME_R |
|
10453
5b54fa775e55
Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents:
10442
diff
changeset
|
4373 #if defined(HAVE_GETHOSTBYNAME_R_6_ARG) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4374 result = gethostbyaddr_r(ap, al, af, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4375 &hp_allocated, buf, buf_len, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4376 &h, &errnop); |
|
10453
5b54fa775e55
Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents:
10442
diff
changeset
|
4377 #elif defined(HAVE_GETHOSTBYNAME_R_5_ARG) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4378 h = gethostbyaddr_r(ap, al, af, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4379 &hp_allocated, buf, buf_len, &errnop); |
|
10453
5b54fa775e55
Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
Guido van Rossum <guido@python.org>
parents:
10442
diff
changeset
|
4380 #else /* HAVE_GETHOSTBYNAME_R_3_ARG */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4381 memset((void *) &data, '\0', sizeof(data)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4382 result = gethostbyaddr_r(ap, al, af, &hp_allocated, &data); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4383 h = (result != 0) ? NULL : &hp_allocated; |
|
10401
f81db738abd9
Patch by Rob Riggs for Linux -- glibc2 has a different argument
Guido van Rossum <guido@python.org>
parents:
9679
diff
changeset
|
4384 #endif |
|
7942
ee2aaa2f722a
Threading speedup patches by Christopher Lindblad <cjl@infoseek.com>.
Guido van Rossum <guido@python.org>
parents:
6718
diff
changeset
|
4385 #else /* not HAVE_GETHOSTBYNAME_R */ |
|
10442
9184c9e108f9
Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents:
10441
diff
changeset
|
4386 #ifdef USE_GETHOSTBYNAME_LOCK |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4387 PyThread_acquire_lock(netdb_lock, 1); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4388 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4389 h = gethostbyaddr(ap, al, af); |
|
10442
9184c9e108f9
Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents:
10441
diff
changeset
|
4390 #endif /* HAVE_GETHOSTBYNAME_R */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4391 Py_END_ALLOW_THREADS |
|
74142
683a1b1ff15d
Issue #8623: Fix some strict-aliasing warnings. Patch by David Watson.
Charles-François Natali <neologix@free.fr>
parents:
74012
diff
changeset
|
4392 ret = gethost_common(h, SAS2SA(&addr), sizeof(addr), af); |
|
10442
9184c9e108f9
Clean up pass for the previous patches.
Guido van Rossum <guido@python.org>
parents:
10441
diff
changeset
|
4393 #ifdef USE_GETHOSTBYNAME_LOCK |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4394 PyThread_release_lock(netdb_lock); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4395 #endif |
|
64230
35304c2fe9e0
Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex and
Martin v. Löwis <martin@v.loewis.de>
parents:
64120
diff
changeset
|
4396 finally: |
|
35304c2fe9e0
Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex and
Martin v. Löwis <martin@v.loewis.de>
parents:
64120
diff
changeset
|
4397 PyMem_Free(ip_num); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4398 return ret; |
|
2055
cf31eab6ab5a
Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents:
1970
diff
changeset
|
4399 } |
|
cf31eab6ab5a
Another bulky set of minor changes.
Guido van Rossum <guido@python.org>
parents:
1970
diff
changeset
|
4400 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
4401 PyDoc_STRVAR(gethostbyaddr_doc, |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4402 "gethostbyaddr(host) -> (name, aliaslist, addresslist)\n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4403 \n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4404 Return the true host name, a list of aliases, and a list of IP addresses,\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
4405 for a host. The host argument is a string giving a host name or IP number."); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4406 |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
4407 |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
4408 /* Python interface to getservbyname(name). |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
4409 This only returns the port number, since the other info is already |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
4410 known or not useful (like the list of aliases). */ |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
4411 |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
4412 /*ARGSUSED*/ |
| 1970 | 4413 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
4414 socket_getservbyname(PyObject *self, PyObject *args) |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
4415 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4416 char *name, *proto=NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4417 struct servent *sp; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4418 if (!PyArg_ParseTuple(args, "s|s:getservbyname", &name, &proto)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4419 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4420 Py_BEGIN_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4421 sp = getservbyname(name, proto); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4422 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4423 if (sp == NULL) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
4424 PyErr_SetString(PyExc_OSError, "service/proto not found"); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4425 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4426 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4427 return PyLong_FromLong((long) ntohs(sp->s_port)); |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
4428 } |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
4429 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
4430 PyDoc_STRVAR(getservbyname_doc, |
|
32429
d8abf582f893
Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents:
32213
diff
changeset
|
4431 "getservbyname(servicename[, protocolname]) -> integer\n\ |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4432 \n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4433 Return a port number from a service name and protocol name.\n\ |
|
32429
d8abf582f893
Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents:
32213
diff
changeset
|
4434 The optional protocol name, if given, should be 'tcp' or 'udp',\n\ |
|
d8abf582f893
Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents:
32213
diff
changeset
|
4435 otherwise any protocol will match."); |
|
d8abf582f893
Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents:
32213
diff
changeset
|
4436 |
|
d8abf582f893
Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents:
32213
diff
changeset
|
4437 |
|
d8abf582f893
Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents:
32213
diff
changeset
|
4438 /* Python interface to getservbyport(port). |
|
d8abf582f893
Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents:
32213
diff
changeset
|
4439 This only returns the service name, since the other info is already |
|
d8abf582f893
Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents:
32213
diff
changeset
|
4440 known or not useful (like the list of aliases). */ |
|
d8abf582f893
Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents:
32213
diff
changeset
|
4441 |
|
d8abf582f893
Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents:
32213
diff
changeset
|
4442 /*ARGSUSED*/ |
|
d8abf582f893
Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents:
32213
diff
changeset
|
4443 static PyObject * |
|
d8abf582f893
Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents:
32213
diff
changeset
|
4444 socket_getservbyport(PyObject *self, PyObject *args) |
|
d8abf582f893
Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents:
32213
diff
changeset
|
4445 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4446 int port; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4447 char *proto=NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4448 struct servent *sp; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4449 if (!PyArg_ParseTuple(args, "i|s:getservbyport", &port, &proto)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4450 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4451 if (port < 0 || port > 0xffff) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4452 PyErr_SetString( |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4453 PyExc_OverflowError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4454 "getservbyport: port must be 0-65535."); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4455 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4456 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4457 Py_BEGIN_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4458 sp = getservbyport(htons((short)port), proto); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4459 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4460 if (sp == NULL) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
4461 PyErr_SetString(PyExc_OSError, "port/proto not found"); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4462 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4463 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4464 return PyUnicode_FromString(sp->s_name); |
|
32429
d8abf582f893
Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents:
32213
diff
changeset
|
4465 } |
|
d8abf582f893
Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents:
32213
diff
changeset
|
4466 |
|
d8abf582f893
Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents:
32213
diff
changeset
|
4467 PyDoc_STRVAR(getservbyport_doc, |
|
d8abf582f893
Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents:
32213
diff
changeset
|
4468 "getservbyport(port[, protocolname]) -> string\n\ |
|
d8abf582f893
Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents:
32213
diff
changeset
|
4469 \n\ |
|
d8abf582f893
Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents:
32213
diff
changeset
|
4470 Return the service name from a port number and protocol name.\n\ |
|
d8abf582f893
Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents:
32213
diff
changeset
|
4471 The optional protocol name, if given, should be 'tcp' or 'udp',\n\ |
|
d8abf582f893
Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents:
32213
diff
changeset
|
4472 otherwise any protocol will match."); |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
4473 |
|
4782
2426a220664b
Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents:
4651
diff
changeset
|
4474 /* Python interface to getprotobyname(name). |
|
2426a220664b
Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents:
4651
diff
changeset
|
4475 This only returns the protocol number, since the other info is |
|
2426a220664b
Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents:
4651
diff
changeset
|
4476 already known or not useful (like the list of aliases). */ |
|
2426a220664b
Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents:
4651
diff
changeset
|
4477 |
|
2426a220664b
Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents:
4651
diff
changeset
|
4478 /*ARGSUSED*/ |
|
2426a220664b
Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents:
4651
diff
changeset
|
4479 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
4480 socket_getprotobyname(PyObject *self, PyObject *args) |
|
4782
2426a220664b
Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents:
4651
diff
changeset
|
4481 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4482 char *name; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4483 struct protoent *sp; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4484 if (!PyArg_ParseTuple(args, "s:getprotobyname", &name)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4485 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4486 Py_BEGIN_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4487 sp = getprotobyname(name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4488 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4489 if (sp == NULL) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
4490 PyErr_SetString(PyExc_OSError, "protocol not found"); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4491 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4492 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4493 return PyLong_FromLong((long) sp->p_proto); |
|
4782
2426a220664b
Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents:
4651
diff
changeset
|
4494 } |
|
2426a220664b
Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents:
4651
diff
changeset
|
4495 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
4496 PyDoc_STRVAR(getprotobyname_doc, |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4497 "getprotobyname(name) -> integer\n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4498 \n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
4499 Return the protocol number for the named protocol. (Rarely used.)"); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4500 |
|
4782
2426a220664b
Added getprotobyname() interface.
Guido van Rossum <guido@python.org>
parents:
4651
diff
changeset
|
4501 |
|
43881
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
4502 #ifndef NO_DUP |
|
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
4503 /* dup() function for socket fds */ |
|
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
4504 |
|
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
4505 static PyObject * |
|
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
4506 socket_dup(PyObject *self, PyObject *fdobj) |
|
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
4507 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4508 SOCKET_T fd, newfd; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4509 PyObject *newfdobj; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4510 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4511 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4512 fd = PyLong_AsSocket_t(fdobj); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4513 if (fd == (SOCKET_T)(-1) && PyErr_Occurred()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4514 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4515 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4516 newfd = dup_socket(fd); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4517 if (newfd == INVALID_SOCKET) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4518 return set_error(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4519 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4520 newfdobj = PyLong_FromSocket_t(newfd); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4521 if (newfdobj == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4522 SOCKETCLOSE(newfd); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4523 return newfdobj; |
|
43881
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
4524 } |
|
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
4525 |
|
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
4526 PyDoc_STRVAR(dup_doc, |
|
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
4527 "dup(integer) -> integer\n\ |
|
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
4528 \n\ |
|
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
4529 Duplicate an integer socket file descriptor. This is like os.dup(), but for\n\ |
|
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
4530 sockets; on some platforms os.dup() won't work for socket file descriptors."); |
|
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
4531 #endif |
|
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
4532 |
|
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
4533 |
|
33063
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
4534 #ifdef HAVE_SOCKETPAIR |
|
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
4535 /* Create a pair of sockets using the socketpair() function. |
|
33239
fb9869044bba
Updated the socketpair() docstring and documentation to explain that the
Dave Cole <djc@object-craft.com.au>
parents:
33238
diff
changeset
|
4536 Arguments as for socket() except the default family is AF_UNIX if |
|
33280
826ad896a7a5
Patch #1015012. Improve markup and punctuation in libsocket.tex
Dave Cole <djc@object-craft.com.au>
parents:
33260
diff
changeset
|
4537 defined on the platform; otherwise, the default is AF_INET. */ |
|
33063
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
4538 |
|
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
4539 /*ARGSUSED*/ |
|
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
4540 static PyObject * |
|
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
4541 socket_socketpair(PyObject *self, PyObject *args) |
|
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
4542 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4543 PySocketSockObject *s0 = NULL, *s1 = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4544 SOCKET_T sv[2]; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4545 int family, type = SOCK_STREAM, proto = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4546 PyObject *res = NULL; |
|
33063
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
4547 |
|
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
4548 #if defined(AF_UNIX) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4549 family = AF_UNIX; |
|
33063
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
4550 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4551 family = AF_INET; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4552 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4553 if (!PyArg_ParseTuple(args, "|iii:socketpair", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4554 &family, &type, &proto)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4555 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4556 /* Create a pair of socket fds */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4557 if (socketpair(family, type, proto, sv) < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4558 return set_error(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4559 s0 = new_sockobject(sv[0], family, type, proto); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4560 if (s0 == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4561 goto finally; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4562 s1 = new_sockobject(sv[1], family, type, proto); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4563 if (s1 == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4564 goto finally; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4565 res = PyTuple_Pack(2, s0, s1); |
|
33063
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
4566 |
|
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
4567 finally: |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4568 if (res == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4569 if (s0 == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4570 SOCKETCLOSE(sv[0]); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4571 if (s1 == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4572 SOCKETCLOSE(sv[1]); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4573 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4574 Py_XDECREF(s0); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4575 Py_XDECREF(s1); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4576 return res; |
|
33063
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
4577 } |
|
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
4578 |
|
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
4579 PyDoc_STRVAR(socketpair_doc, |
|
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
4580 "socketpair([family[, type[, proto]]]) -> (socket object, socket object)\n\ |
|
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
4581 \n\ |
|
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
4582 Create a pair of socket objects from the sockets returned by the platform\n\ |
|
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
4583 socketpair() function.\n\ |
|
33239
fb9869044bba
Updated the socketpair() docstring and documentation to explain that the
Dave Cole <djc@object-craft.com.au>
parents:
33238
diff
changeset
|
4584 The arguments are the same as for socket() except the default family is\n\ |
|
33280
826ad896a7a5
Patch #1015012. Improve markup and punctuation in libsocket.tex
Dave Cole <djc@object-craft.com.au>
parents:
33260
diff
changeset
|
4585 AF_UNIX if defined on the platform; otherwise, the default is AF_INET."); |
|
33063
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
4586 |
|
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
4587 #endif /* HAVE_SOCKETPAIR */ |
|
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
4588 |
|
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
4589 |
|
3673
f6ace61c3dfe
ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents:
3672
diff
changeset
|
4590 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
4591 socket_ntohs(PyObject *self, PyObject *args) |
|
3673
f6ace61c3dfe
ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents:
3672
diff
changeset
|
4592 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4593 int x1, x2; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4594 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4595 if (!PyArg_ParseTuple(args, "i:ntohs", &x1)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4596 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4597 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4598 if (x1 < 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4599 PyErr_SetString(PyExc_OverflowError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4600 "can't convert negative number to unsigned long"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4601 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4602 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4603 x2 = (unsigned int)ntohs((unsigned short)x1); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4604 return PyLong_FromLong(x2); |
|
3673
f6ace61c3dfe
ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents:
3672
diff
changeset
|
4605 } |
|
f6ace61c3dfe
ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents:
3672
diff
changeset
|
4606 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
4607 PyDoc_STRVAR(ntohs_doc, |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4608 "ntohs(integer) -> integer\n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4609 \n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
4610 Convert a 16-bit integer from network to host byte order."); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4611 |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4612 |
|
3673
f6ace61c3dfe
ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents:
3672
diff
changeset
|
4613 static PyObject * |
|
24375
89ce62126664
Extended socket.htonl and ntohl to accept longs.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
24363
diff
changeset
|
4614 socket_ntohl(PyObject *self, PyObject *arg) |
|
3673
f6ace61c3dfe
ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents:
3672
diff
changeset
|
4615 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4616 unsigned long x; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4617 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4618 if (PyLong_Check(arg)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4619 x = PyLong_AsUnsignedLong(arg); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4620 if (x == (unsigned long) -1 && PyErr_Occurred()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4621 return NULL; |
|
24375
89ce62126664
Extended socket.htonl and ntohl to accept longs.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
24363
diff
changeset
|
4622 #if SIZEOF_LONG > 4 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4623 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4624 unsigned long y; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4625 /* only want the trailing 32 bits */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4626 y = x & 0xFFFFFFFFUL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4627 if (y ^ x) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4628 return PyErr_Format(PyExc_OverflowError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4629 "long int larger than 32 bits"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4630 x = y; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4631 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4632 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4633 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4634 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4635 return PyErr_Format(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4636 "expected int/long, %s found", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4637 Py_TYPE(arg)->tp_name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4638 if (x == (unsigned long) -1 && PyErr_Occurred()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4639 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4640 return PyLong_FromUnsignedLong(ntohl(x)); |
|
3673
f6ace61c3dfe
ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents:
3672
diff
changeset
|
4641 } |
|
f6ace61c3dfe
ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents:
3672
diff
changeset
|
4642 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
4643 PyDoc_STRVAR(ntohl_doc, |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4644 "ntohl(integer) -> integer\n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4645 \n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
4646 Convert a 32-bit integer from network to host byte order."); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4647 |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4648 |
|
3673
f6ace61c3dfe
ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents:
3672
diff
changeset
|
4649 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
4650 socket_htons(PyObject *self, PyObject *args) |
|
3673
f6ace61c3dfe
ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents:
3672
diff
changeset
|
4651 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4652 int x1, x2; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4653 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4654 if (!PyArg_ParseTuple(args, "i:htons", &x1)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4655 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4656 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4657 if (x1 < 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4658 PyErr_SetString(PyExc_OverflowError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4659 "can't convert negative number to unsigned long"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4660 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4661 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4662 x2 = (unsigned int)htons((unsigned short)x1); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4663 return PyLong_FromLong(x2); |
|
3673
f6ace61c3dfe
ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents:
3672
diff
changeset
|
4664 } |
|
f6ace61c3dfe
ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents:
3672
diff
changeset
|
4665 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
4666 PyDoc_STRVAR(htons_doc, |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4667 "htons(integer) -> integer\n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4668 \n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
4669 Convert a 16-bit integer from host to network byte order."); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4670 |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4671 |
|
3673
f6ace61c3dfe
ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents:
3672
diff
changeset
|
4672 static PyObject * |
|
24375
89ce62126664
Extended socket.htonl and ntohl to accept longs.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
24363
diff
changeset
|
4673 socket_htonl(PyObject *self, PyObject *arg) |
|
3673
f6ace61c3dfe
ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents:
3672
diff
changeset
|
4674 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4675 unsigned long x; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4676 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4677 if (PyLong_Check(arg)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4678 x = PyLong_AsUnsignedLong(arg); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4679 if (x == (unsigned long) -1 && PyErr_Occurred()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4680 return NULL; |
|
24375
89ce62126664
Extended socket.htonl and ntohl to accept longs.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
24363
diff
changeset
|
4681 #if SIZEOF_LONG > 4 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4682 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4683 unsigned long y; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4684 /* only want the trailing 32 bits */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4685 y = x & 0xFFFFFFFFUL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4686 if (y ^ x) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4687 return PyErr_Format(PyExc_OverflowError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4688 "long int larger than 32 bits"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4689 x = y; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4690 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4691 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4692 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4693 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4694 return PyErr_Format(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4695 "expected int/long, %s found", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4696 Py_TYPE(arg)->tp_name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4697 return PyLong_FromUnsignedLong(htonl((unsigned long)x)); |
|
3673
f6ace61c3dfe
ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents:
3672
diff
changeset
|
4698 } |
|
f6ace61c3dfe
ntohs, ntohl, htons, htonl -- thanks to Lance
Guido van Rossum <guido@python.org>
parents:
3672
diff
changeset
|
4699 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
4700 PyDoc_STRVAR(htonl_doc, |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4701 "htonl(integer) -> integer\n\ |
|
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4702 \n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
4703 Convert a 32-bit integer from host to network byte order."); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4704 |
|
23723
2f6f8708e3e9
Whitespace normalization, folding long lines, uniform comment
Guido van Rossum <guido@python.org>
parents:
23722
diff
changeset
|
4705 /* socket.inet_aton() and socket.inet_ntoa() functions. */ |
|
11217
f406e78ec10b
Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents:
11182
diff
changeset
|
4706 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
4707 PyDoc_STRVAR(inet_aton_doc, |
|
41809
8e062e572ea4
Sockets facelift. APIs that could return binary data (e.g. aton() and
Guido van Rossum <guido@python.org>
parents:
41770
diff
changeset
|
4708 "inet_aton(string) -> bytes giving packed 32-bit IP representation\n\ |
|
11217
f406e78ec10b
Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents:
11182
diff
changeset
|
4709 \n\ |
|
11219
2d7331f4dfe3
Port inet_ntoa and inet_aton to Windows:
Guido van Rossum <guido@python.org>
parents:
11217
diff
changeset
|
4710 Convert an IP address in string format (123.45.67.89) to the 32-bit packed\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
4711 binary format used in low-level network functions."); |
|
11217
f406e78ec10b
Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents:
11182
diff
changeset
|
4712 |
|
f406e78ec10b
Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents:
11182
diff
changeset
|
4713 static PyObject* |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
4714 socket_inet_aton(PyObject *self, PyObject *args) |
|
11217
f406e78ec10b
Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents:
11182
diff
changeset
|
4715 { |
|
11268
3fe8d13328c8
It appears that inet_aton() doesn't really exist except in libresolv;
Guido van Rossum <guido@python.org>
parents:
11219
diff
changeset
|
4716 #ifndef INADDR_NONE |
|
3fe8d13328c8
It appears that inet_aton() doesn't really exist except in libresolv;
Guido van Rossum <guido@python.org>
parents:
11219
diff
changeset
|
4717 #define INADDR_NONE (-1) |
|
3fe8d13328c8
It appears that inet_aton() doesn't really exist except in libresolv;
Guido van Rossum <guido@python.org>
parents:
11219
diff
changeset
|
4718 #endif |
|
27858
9453d8cdd01e
Ummm, try to get it right this time
Neal Norwitz <nnorwitz@gmail.com>
parents:
27857
diff
changeset
|
4719 #ifdef HAVE_INET_ATON |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4720 struct in_addr buf; |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
4721 #endif |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
4722 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
4723 #if !defined(HAVE_INET_ATON) || defined(USE_INET_ATON_WEAKLINK) |
|
51579
648e07dd0825
Merged revisions 69364-69365,69409-69410,69413,69417,69435,69442,69447,69495,69519-69521 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
51384
diff
changeset
|
4724 #if (SIZEOF_INT != 4) |
|
648e07dd0825
Merged revisions 69364-69365,69409-69410,69413,69417,69435,69442,69447,69495,69519-69521 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
51384
diff
changeset
|
4725 #error "Not sure if in_addr_t exists and int is not 32-bits." |
|
648e07dd0825
Merged revisions 69364-69365,69409-69410,69413,69417,69435,69442,69447,69495,69519-69521 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
51384
diff
changeset
|
4726 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4727 /* Have to use inet_addr() instead */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4728 unsigned int packed_addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4729 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4730 char *ip_addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4731 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4732 if (!PyArg_ParseTuple(args, "s:inet_aton", &ip_addr)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4733 return NULL; |
|
27861
f8440bb8ede5
socket_inet_aton(): ip_addr was left undefined before use in the
Tim Peters <tim.peters@gmail.com>
parents:
27858
diff
changeset
|
4734 |
|
f8440bb8ede5
socket_inet_aton(): ip_addr was left undefined before use in the
Tim Peters <tim.peters@gmail.com>
parents:
27858
diff
changeset
|
4735 |
|
f8440bb8ede5
socket_inet_aton(): ip_addr was left undefined before use in the
Tim Peters <tim.peters@gmail.com>
parents:
27858
diff
changeset
|
4736 #ifdef HAVE_INET_ATON |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
4737 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
4738 #ifdef USE_INET_ATON_WEAKLINK |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
4739 if (inet_aton != NULL) { |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
4740 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4741 if (inet_aton(ip_addr, &buf)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4742 return PyBytes_FromStringAndSize((char *)(&buf), |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4743 sizeof(buf)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4744 |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
4745 PyErr_SetString(PyExc_OSError, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4746 "illegal IP address string passed to inet_aton"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4747 return NULL; |
|
27854
81afca747caa
Addressing SF bug #643005, implement socket.inet_aton() using
Guido van Rossum <guido@python.org>
parents:
27558
diff
changeset
|
4748 |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
4749 #ifdef USE_INET_ATON_WEAKLINK |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
4750 } else { |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
4751 #endif |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
4752 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
4753 #endif |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
4754 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
4755 #if !defined(HAVE_INET_ATON) || defined(USE_INET_ATON_WEAKLINK) |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
4756 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4757 /* special-case this address as inet_addr might return INADDR_NONE |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4758 * for this */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4759 if (strcmp(ip_addr, "255.255.255.255") == 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4760 packed_addr = 0xFFFFFFFF; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4761 } else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4762 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4763 packed_addr = inet_addr(ip_addr); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4764 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4765 if (packed_addr == INADDR_NONE) { /* invalid address */ |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
4766 PyErr_SetString(PyExc_OSError, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4767 "illegal IP address string passed to inet_aton"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4768 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4769 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4770 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4771 return PyBytes_FromStringAndSize((char *) &packed_addr, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4772 sizeof(packed_addr)); |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
4773 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
4774 #ifdef USE_INET_ATON_WEAKLINK |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
4775 } |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
4776 #endif |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
4777 |
|
27854
81afca747caa
Addressing SF bug #643005, implement socket.inet_aton() using
Guido van Rossum <guido@python.org>
parents:
27558
diff
changeset
|
4778 #endif |
|
11217
f406e78ec10b
Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents:
11182
diff
changeset
|
4779 } |
|
f406e78ec10b
Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents:
11182
diff
changeset
|
4780 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
4781 PyDoc_STRVAR(inet_ntoa_doc, |
| 11937 | 4782 "inet_ntoa(packed_ip) -> ip_address_string\n\ |
|
11217
f406e78ec10b
Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents:
11182
diff
changeset
|
4783 \n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
4784 Convert an IP address from 32-bit packed binary format to string format"); |
|
11217
f406e78ec10b
Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents:
11182
diff
changeset
|
4785 |
|
f406e78ec10b
Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents:
11182
diff
changeset
|
4786 static PyObject* |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
4787 socket_inet_ntoa(PyObject *self, PyObject *args) |
|
11217
f406e78ec10b
Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents:
11182
diff
changeset
|
4788 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4789 char *packed_str; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4790 int addr_len; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4791 struct in_addr packed_addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4792 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4793 if (!PyArg_ParseTuple(args, "y#:inet_ntoa", &packed_str, &addr_len)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4794 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4795 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4796 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4797 if (addr_len != sizeof(packed_addr)) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
4798 PyErr_SetString(PyExc_OSError, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4799 "packed IP wrong length for inet_ntoa"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4800 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4801 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4802 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4803 memcpy(&packed_addr, packed_str, addr_len); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4804 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4805 return PyUnicode_FromString(inet_ntoa(packed_addr)); |
|
11217
f406e78ec10b
Patch by Ben Gertzfield to add inet_aton() and inet_ntoa() calls.
Guido van Rossum <guido@python.org>
parents:
11182
diff
changeset
|
4806 } |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
4807 |
|
28818
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4808 #ifdef HAVE_INET_PTON |
|
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4809 |
|
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4810 PyDoc_STRVAR(inet_pton_doc, |
|
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4811 "inet_pton(af, ip) -> packed IP address string\n\ |
|
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4812 \n\ |
|
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4813 Convert an IP address from string format to a packed string suitable\n\ |
|
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4814 for use with low-level network functions."); |
|
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4815 |
|
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4816 static PyObject * |
|
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4817 socket_inet_pton(PyObject *self, PyObject *args) |
|
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4818 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4819 int af; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4820 char* ip; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4821 int retval; |
|
29066
90342f395721
Patch #734231: Update RiscOS support. In particular, correct
Martin v. Löwis <martin@v.loewis.de>
parents:
29037
diff
changeset
|
4822 #ifdef ENABLE_IPV6 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4823 char packed[MAX(sizeof(struct in_addr), sizeof(struct in6_addr))]; |
|
29066
90342f395721
Patch #734231: Update RiscOS support. In particular, correct
Martin v. Löwis <martin@v.loewis.de>
parents:
29037
diff
changeset
|
4824 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4825 char packed[sizeof(struct in_addr)]; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4826 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4827 if (!PyArg_ParseTuple(args, "is:inet_pton", &af, &ip)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4828 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4829 } |
|
28818
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4830 |
|
32183
a799b0d1c568
Patch #924294: Do not check for AF_INET6 if it is not defined.
Martin v. Löwis <martin@v.loewis.de>
parents:
32149
diff
changeset
|
4831 #if !defined(ENABLE_IPV6) && defined(AF_INET6) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4832 if(af == AF_INET6) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
4833 PyErr_SetString(PyExc_OSError, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4834 "can't use AF_INET6, IPv6 is disabled"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4835 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4836 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4837 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4838 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4839 retval = inet_pton(af, ip, packed); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4840 if (retval < 0) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
4841 PyErr_SetFromErrno(PyExc_OSError); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4842 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4843 } else if (retval == 0) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
4844 PyErr_SetString(PyExc_OSError, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4845 "illegal IP address string passed to inet_pton"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4846 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4847 } else if (af == AF_INET) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4848 return PyBytes_FromStringAndSize(packed, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4849 sizeof(struct in_addr)); |
|
29066
90342f395721
Patch #734231: Update RiscOS support. In particular, correct
Martin v. Löwis <martin@v.loewis.de>
parents:
29037
diff
changeset
|
4850 #ifdef ENABLE_IPV6 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4851 } else if (af == AF_INET6) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4852 return PyBytes_FromStringAndSize(packed, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4853 sizeof(struct in6_addr)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4854 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4855 } else { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
4856 PyErr_SetString(PyExc_OSError, "unknown address family"); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4857 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4858 } |
|
28818
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4859 } |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
4860 |
|
28818
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4861 PyDoc_STRVAR(inet_ntop_doc, |
|
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4862 "inet_ntop(af, packed_ip) -> string formatted IP address\n\ |
|
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4863 \n\ |
|
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4864 Convert a packed IP address of the given family to string format."); |
|
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4865 |
|
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4866 static PyObject * |
|
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4867 socket_inet_ntop(PyObject *self, PyObject *args) |
|
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4868 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4869 int af; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4870 char* packed; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4871 int len; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4872 const char* retval; |
|
29066
90342f395721
Patch #734231: Update RiscOS support. In particular, correct
Martin v. Löwis <martin@v.loewis.de>
parents:
29037
diff
changeset
|
4873 #ifdef ENABLE_IPV6 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4874 char ip[MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN) + 1]; |
|
29066
90342f395721
Patch #734231: Update RiscOS support. In particular, correct
Martin v. Löwis <martin@v.loewis.de>
parents:
29037
diff
changeset
|
4875 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4876 char ip[INET_ADDRSTRLEN + 1]; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4877 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4878 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4879 /* Guarantee NUL-termination for PyUnicode_FromString() below */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4880 memset((void *) &ip[0], '\0', sizeof(ip)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4881 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4882 if (!PyArg_ParseTuple(args, "iy#:inet_ntop", &af, &packed, &len)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4883 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4884 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4885 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4886 if (af == AF_INET) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4887 if (len != sizeof(struct in_addr)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4888 PyErr_SetString(PyExc_ValueError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4889 "invalid length of packed IP address string"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4890 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4891 } |
|
29066
90342f395721
Patch #734231: Update RiscOS support. In particular, correct
Martin v. Löwis <martin@v.loewis.de>
parents:
29037
diff
changeset
|
4892 #ifdef ENABLE_IPV6 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4893 } else if (af == AF_INET6) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4894 if (len != sizeof(struct in6_addr)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4895 PyErr_SetString(PyExc_ValueError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4896 "invalid length of packed IP address string"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4897 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4898 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4899 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4900 } else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4901 PyErr_Format(PyExc_ValueError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4902 "unknown address family %d", af); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4903 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4904 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4905 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4906 retval = inet_ntop(af, packed, ip, sizeof(ip)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4907 if (!retval) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
4908 PyErr_SetFromErrno(PyExc_OSError); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4909 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4910 } else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4911 return PyUnicode_FromString(retval); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4912 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4913 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4914 /* NOTREACHED */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4915 PyErr_SetString(PyExc_RuntimeError, "invalid handling of inet_ntop"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4916 return NULL; |
|
28818
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4917 } |
|
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4918 |
|
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4919 #endif /* HAVE_INET_PTON */ |
|
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
4920 |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
4921 /* Python interface to getaddrinfo(host, port). */ |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
4922 |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
4923 /*ARGSUSED*/ |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
4924 static PyObject * |
|
64113
ca2a859e9bf6
fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents:
63890
diff
changeset
|
4925 socket_getaddrinfo(PyObject *self, PyObject *args, PyObject* kwargs) |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
4926 { |
|
70399
9d33770071b2
socket.sendto(): exit directly after setting the error
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70226
diff
changeset
|
4927 static char* kwnames[] = {"host", "port", "family", "type", "proto", |
|
64113
ca2a859e9bf6
fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents:
63890
diff
changeset
|
4928 "flags", 0}; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4929 struct addrinfo hints, *res; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4930 struct addrinfo *res0 = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4931 PyObject *hobj = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4932 PyObject *pobj = (PyObject *)NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4933 char pbuf[30]; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4934 char *hptr, *pptr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4935 int family, socktype, protocol, flags; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4936 int error; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4937 PyObject *all = (PyObject *)NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4938 PyObject *idna = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4939 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4940 family = socktype = protocol = flags = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4941 family = AF_UNSPEC; |
|
70399
9d33770071b2
socket.sendto(): exit directly after setting the error
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70226
diff
changeset
|
4942 if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO|iiii:getaddrinfo", |
|
64113
ca2a859e9bf6
fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents:
63890
diff
changeset
|
4943 kwnames, &hobj, &pobj, &family, &socktype, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4944 &protocol, &flags)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4945 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4946 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4947 if (hobj == Py_None) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4948 hptr = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4949 } else if (PyUnicode_Check(hobj)) { |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72879
diff
changeset
|
4950 _Py_IDENTIFIER(encode); |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72807
diff
changeset
|
4951 |
|
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72807
diff
changeset
|
4952 idna = _PyObject_CallMethodId(hobj, &PyId_encode, "s", "idna"); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4953 if (!idna) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4954 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4955 assert(PyBytes_Check(idna)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4956 hptr = PyBytes_AS_STRING(idna); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4957 } else if (PyBytes_Check(hobj)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4958 hptr = PyBytes_AsString(hobj); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4959 } else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4960 PyErr_SetString(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4961 "getaddrinfo() argument 1 must be string or None"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4962 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4963 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4964 if (PyLong_CheckExact(pobj)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4965 long value = PyLong_AsLong(pobj); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4966 if (value == -1 && PyErr_Occurred()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4967 goto err; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4968 PyOS_snprintf(pbuf, sizeof(pbuf), "%ld", value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4969 pptr = pbuf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4970 } else if (PyUnicode_Check(pobj)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4971 pptr = _PyUnicode_AsString(pobj); |
|
66799
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66663
diff
changeset
|
4972 if (pptr == NULL) |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66663
diff
changeset
|
4973 goto err; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4974 } else if (PyBytes_Check(pobj)) { |
|
66799
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66663
diff
changeset
|
4975 pptr = PyBytes_AS_STRING(pobj); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4976 } else if (pobj == Py_None) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4977 pptr = (char *)NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4978 } else { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
4979 PyErr_SetString(PyExc_OSError, "Int or String expected"); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4980 goto err; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4981 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4982 memset(&hints, 0, sizeof(hints)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4983 hints.ai_family = family; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4984 hints.ai_socktype = socktype; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4985 hints.ai_protocol = protocol; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4986 hints.ai_flags = flags; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4987 Py_BEGIN_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4988 ACQUIRE_GETADDRINFO_LOCK |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4989 error = getaddrinfo(hptr, pptr, &hints, &res0); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4990 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4991 RELEASE_GETADDRINFO_LOCK /* see comment in setipaddr() */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4992 if (error) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4993 set_gaierror(error); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4994 goto err; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4995 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4996 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4997 if ((all = PyList_New(0)) == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4998 goto err; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
4999 for (res = res0; res; res = res->ai_next) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5000 PyObject *single; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5001 PyObject *addr = |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5002 makesockaddr(-1, res->ai_addr, res->ai_addrlen, protocol); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5003 if (addr == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5004 goto err; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5005 single = Py_BuildValue("iiisO", res->ai_family, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5006 res->ai_socktype, res->ai_protocol, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5007 res->ai_canonname ? res->ai_canonname : "", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5008 addr); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5009 Py_DECREF(addr); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5010 if (single == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5011 goto err; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5012 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5013 if (PyList_Append(all, single)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5014 goto err; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5015 Py_XDECREF(single); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5016 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5017 Py_XDECREF(idna); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5018 if (res0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5019 freeaddrinfo(res0); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5020 return all; |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
5021 err: |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5022 Py_XDECREF(all); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5023 Py_XDECREF(idna); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5024 if (res0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5025 freeaddrinfo(res0); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5026 return (PyObject *)NULL; |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
5027 } |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
5028 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
5029 PyDoc_STRVAR(getaddrinfo_doc, |
|
24676
980767c6cd97
Clean up some docstrings. Some docstrings didn't show their return
Guido van Rossum <guido@python.org>
parents:
24619
diff
changeset
|
5030 "getaddrinfo(host, port [, family, socktype, proto, flags])\n\ |
|
980767c6cd97
Clean up some docstrings. Some docstrings didn't show their return
Guido van Rossum <guido@python.org>
parents:
24619
diff
changeset
|
5031 -> list of (family, socktype, proto, canonname, sockaddr)\n\ |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
5032 \n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
5033 Resolve host and port into addrinfo struct."); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
5034 |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
5035 /* Python interface to getnameinfo(sa, flags). */ |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
5036 |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
5037 /*ARGSUSED*/ |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
5038 static PyObject * |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5039 socket_getnameinfo(PyObject *self, PyObject *args) |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
5040 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5041 PyObject *sa = (PyObject *)NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5042 int flags; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5043 char *hostp; |
|
74233
cc346a672091
Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents:
72115
diff
changeset
|
5044 int port; |
|
cc346a672091
Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents:
72115
diff
changeset
|
5045 unsigned int flowinfo, scope_id; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5046 char hbuf[NI_MAXHOST], pbuf[NI_MAXSERV]; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5047 struct addrinfo hints, *res = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5048 int error; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5049 PyObject *ret = (PyObject *)NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5050 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5051 flags = flowinfo = scope_id = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5052 if (!PyArg_ParseTuple(args, "Oi:getnameinfo", &sa, &flags)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5053 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5054 if (!PyTuple_Check(sa)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5055 PyErr_SetString(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5056 "getnameinfo() argument 1 must be a tuple"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5057 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5058 } |
|
74233
cc346a672091
Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents:
72115
diff
changeset
|
5059 if (!PyArg_ParseTuple(sa, "si|II", |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5060 &hostp, &port, &flowinfo, &scope_id)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5061 return NULL; |
|
74233
cc346a672091
Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents:
72115
diff
changeset
|
5062 if (flowinfo < 0 || flowinfo > 0xfffff) { |
|
cc346a672091
Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents:
72115
diff
changeset
|
5063 PyErr_SetString(PyExc_OverflowError, |
|
cc346a672091
Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents:
72115
diff
changeset
|
5064 "getsockaddrarg: flowinfo must be 0-1048575."); |
|
cc346a672091
Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents:
72115
diff
changeset
|
5065 return NULL; |
|
cc346a672091
Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents:
72115
diff
changeset
|
5066 } |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5067 PyOS_snprintf(pbuf, sizeof(pbuf), "%d", port); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5068 memset(&hints, 0, sizeof(hints)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5069 hints.ai_family = AF_UNSPEC; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5070 hints.ai_socktype = SOCK_DGRAM; /* make numeric port happy */ |
|
64277
2ccd043aad5c
Issue #1027206: getnameinfo is now restricted to numeric addresses as input.
Martin v. Löwis <martin@v.loewis.de>
parents:
64230
diff
changeset
|
5071 hints.ai_flags = AI_NUMERICHOST; /* don't do any name resolution */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5072 Py_BEGIN_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5073 ACQUIRE_GETADDRINFO_LOCK |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5074 error = getaddrinfo(hostp, pbuf, &hints, &res); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5075 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5076 RELEASE_GETADDRINFO_LOCK /* see comment in setipaddr() */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5077 if (error) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5078 set_gaierror(error); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5079 goto fail; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5080 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5081 if (res->ai_next) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
5082 PyErr_SetString(PyExc_OSError, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5083 "sockaddr resolved to multiple addresses"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5084 goto fail; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5085 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5086 switch (res->ai_family) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5087 case AF_INET: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5088 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5089 if (PyTuple_GET_SIZE(sa) != 2) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
5090 PyErr_SetString(PyExc_OSError, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5091 "IPv4 sockaddr must be 2 tuple"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5092 goto fail; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5093 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5094 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5095 } |
|
21128
15ff504632ed
Remove INET6 define. Use ENABLE_IPV6 instead.
Martin v. Löwis <martin@v.loewis.de>
parents:
21094
diff
changeset
|
5096 #ifdef ENABLE_IPV6 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5097 case AF_INET6: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5098 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5099 struct sockaddr_in6 *sin6; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5100 sin6 = (struct sockaddr_in6 *)res->ai_addr; |
|
74233
cc346a672091
Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents:
72115
diff
changeset
|
5101 sin6->sin6_flowinfo = htonl(flowinfo); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5102 sin6->sin6_scope_id = scope_id; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5103 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5104 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5105 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5106 } |
|
64121
2a4ceebdfcfb
Merged revisions 84146-84147,84150 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
5107 error = getnameinfo(res->ai_addr, (socklen_t) res->ai_addrlen, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5108 hbuf, sizeof(hbuf), pbuf, sizeof(pbuf), flags); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5109 if (error) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5110 set_gaierror(error); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5111 goto fail; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5112 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5113 ret = Py_BuildValue("ss", hbuf, pbuf); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
5114 |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
5115 fail: |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5116 if (res) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5117 freeaddrinfo(res); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5118 return ret; |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
5119 } |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
5120 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
5121 PyDoc_STRVAR(getnameinfo_doc, |
|
24676
980767c6cd97
Clean up some docstrings. Some docstrings didn't show their return
Guido van Rossum <guido@python.org>
parents:
24619
diff
changeset
|
5122 "getnameinfo(sockaddr, flags) --> (host, port)\n\ |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
5123 \n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
5124 Get host and port for a sockaddr."); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
5125 |
|
24293
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5126 |
|
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5127 /* Python API to getting and setting the default timeout value. */ |
|
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5128 |
|
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5129 static PyObject * |
|
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5130 socket_getdefaulttimeout(PyObject *self) |
|
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5131 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5132 if (defaulttimeout < 0.0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5133 Py_INCREF(Py_None); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5134 return Py_None; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5135 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5136 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5137 return PyFloat_FromDouble(defaulttimeout); |
|
24293
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5138 } |
|
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5139 |
|
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5140 PyDoc_STRVAR(getdefaulttimeout_doc, |
|
24676
980767c6cd97
Clean up some docstrings. Some docstrings didn't show their return
Guido van Rossum <guido@python.org>
parents:
24619
diff
changeset
|
5141 "getdefaulttimeout() -> timeout\n\ |
|
24293
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5142 \n\ |
|
71864
ab3432a81c26
#12725: fix working. Patch by Ben Hayden.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
70012
diff
changeset
|
5143 Returns the default timeout in seconds (float) for new socket objects.\n\ |
|
24293
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5144 A value of None indicates that new socket objects have no timeout.\n\ |
|
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5145 When the socket module is first imported, the default is None."); |
|
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5146 |
|
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5147 static PyObject * |
|
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5148 socket_setdefaulttimeout(PyObject *self, PyObject *arg) |
|
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5149 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5150 double timeout; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5151 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5152 if (arg == Py_None) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5153 timeout = -1.0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5154 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5155 timeout = PyFloat_AsDouble(arg); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5156 if (timeout < 0.0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5157 if (!PyErr_Occurred()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5158 PyErr_SetString(PyExc_ValueError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5159 "Timeout value out of range"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5160 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5161 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5162 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5163 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5164 defaulttimeout = timeout; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5165 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5166 Py_INCREF(Py_None); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5167 return Py_None; |
|
24293
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5168 } |
|
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5169 |
|
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5170 PyDoc_STRVAR(setdefaulttimeout_doc, |
|
24676
980767c6cd97
Clean up some docstrings. Some docstrings didn't show their return
Guido van Rossum <guido@python.org>
parents:
24619
diff
changeset
|
5171 "setdefaulttimeout(timeout)\n\ |
|
24293
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5172 \n\ |
|
71864
ab3432a81c26
#12725: fix working. Patch by Ben Hayden.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
70012
diff
changeset
|
5173 Set the default timeout in seconds (float) for new socket objects.\n\ |
|
24293
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5174 A value of None indicates that new socket objects have no timeout.\n\ |
|
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5175 When the socket module is first imported, the default is None."); |
|
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5176 |
|
70136
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5177 #ifdef HAVE_IF_NAMEINDEX |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5178 /* Python API for getting interface indices and names */ |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5179 |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5180 static PyObject * |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5181 socket_if_nameindex(PyObject *self, PyObject *arg) |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5182 { |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5183 PyObject *list; |
|
70226
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5184 int i; |
|
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5185 struct if_nameindex *ni; |
|
70399
9d33770071b2
socket.sendto(): exit directly after setting the error
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70226
diff
changeset
|
5186 |
|
70226
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5187 ni = if_nameindex(); |
|
70136
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5188 if (ni == NULL) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
5189 PyErr_SetFromErrno(PyExc_OSError); |
|
70136
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5190 return NULL; |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5191 } |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5192 |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5193 list = PyList_New(0); |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5194 if (list == NULL) { |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5195 if_freenameindex(ni); |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5196 return NULL; |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5197 } |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5198 |
|
70226
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5199 for (i = 0; ni[i].if_index != 0 && i < INT_MAX; i++) { |
|
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5200 PyObject *ni_tuple = Py_BuildValue("IO&", |
|
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5201 ni[i].if_index, PyUnicode_DecodeFSDefault, ni[i].if_name); |
|
70136
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5202 |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5203 if (ni_tuple == NULL || PyList_Append(list, ni_tuple) == -1) { |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5204 Py_XDECREF(ni_tuple); |
|
70226
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5205 Py_DECREF(list); |
|
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5206 if_freenameindex(ni); |
|
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5207 return NULL; |
|
70136
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5208 } |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5209 Py_DECREF(ni_tuple); |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5210 } |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5211 |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5212 if_freenameindex(ni); |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5213 return list; |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5214 } |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5215 |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5216 PyDoc_STRVAR(if_nameindex_doc, |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5217 "if_nameindex()\n\ |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5218 \n\ |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5219 Returns a list of network interface information (index, name) tuples."); |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5220 |
|
70226
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5221 static PyObject * |
|
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5222 socket_if_nametoindex(PyObject *self, PyObject *args) |
|
70136
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5223 { |
|
70226
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5224 PyObject *oname; |
|
70136
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5225 unsigned long index; |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5226 |
|
70226
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5227 if (!PyArg_ParseTuple(args, "O&:if_nametoindex", |
|
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5228 PyUnicode_FSConverter, &oname)) |
|
70136
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5229 return NULL; |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5230 |
|
70226
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5231 index = if_nametoindex(PyBytes_AS_STRING(oname)); |
|
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5232 Py_DECREF(oname); |
|
70136
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5233 if (index == 0) { |
|
70226
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5234 /* if_nametoindex() doesn't set errno */ |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
5235 PyErr_SetString(PyExc_OSError, "no interface with this name"); |
|
70136
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5236 return NULL; |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5237 } |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5238 |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5239 return PyLong_FromUnsignedLong(index); |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5240 } |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5241 |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5242 PyDoc_STRVAR(if_nametoindex_doc, |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5243 "if_nametoindex(if_name)\n\ |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5244 \n\ |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5245 Returns the interface index corresponding to the interface name if_name."); |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5246 |
|
70226
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5247 static PyObject * |
|
70136
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5248 socket_if_indextoname(PyObject *self, PyObject *arg) |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5249 { |
|
70226
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5250 unsigned long index; |
|
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5251 char name[IF_NAMESIZE + 1]; |
|
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5252 |
|
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5253 index = PyLong_AsUnsignedLong(arg); |
|
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5254 if (index == (unsigned long) -1) |
|
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5255 return NULL; |
|
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5256 |
|
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5257 if (if_indextoname(index, name) == NULL) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
5258 PyErr_SetFromErrno(PyExc_OSError); |
|
70136
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5259 return NULL; |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5260 } |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5261 |
|
70226
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5262 return PyUnicode_DecodeFSDefault(name); |
|
70136
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5263 } |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5264 |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5265 PyDoc_STRVAR(if_indextoname_doc, |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5266 "if_indextoname(if_index)\n\ |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5267 \n\ |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5268 Returns the interface name corresponding to the interface index if_index."); |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5269 |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5270 #endif /* HAVE_IF_NAMEINDEX */ |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5271 |
|
24293
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5272 |
|
72029
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5273 #ifdef CMSG_LEN |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5274 /* Python interface to CMSG_LEN(length). */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5275 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5276 static PyObject * |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5277 socket_CMSG_LEN(PyObject *self, PyObject *args) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5278 { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5279 Py_ssize_t length; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5280 size_t result; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5281 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5282 if (!PyArg_ParseTuple(args, "n:CMSG_LEN", &length)) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5283 return NULL; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5284 if (length < 0 || !get_CMSG_LEN(length, &result)) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5285 PyErr_Format(PyExc_OverflowError, "CMSG_LEN() argument out of range"); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5286 return NULL; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5287 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5288 return PyLong_FromSize_t(result); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5289 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5290 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5291 PyDoc_STRVAR(CMSG_LEN_doc, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5292 "CMSG_LEN(length) -> control message length\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5293 \n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5294 Return the total length, without trailing padding, of an ancillary\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5295 data item with associated data of the given length. This value can\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5296 often be used as the buffer size for recvmsg() to receive a single\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5297 item of ancillary data, but RFC 3542 requires portable applications to\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5298 use CMSG_SPACE() and thus include space for padding, even when the\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5299 item will be the last in the buffer. Raises OverflowError if length\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5300 is outside the permissible range of values."); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5301 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5302 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5303 #ifdef CMSG_SPACE |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5304 /* Python interface to CMSG_SPACE(length). */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5305 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5306 static PyObject * |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5307 socket_CMSG_SPACE(PyObject *self, PyObject *args) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5308 { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5309 Py_ssize_t length; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5310 size_t result; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5311 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5312 if (!PyArg_ParseTuple(args, "n:CMSG_SPACE", &length)) |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5313 return NULL; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5314 if (length < 0 || !get_CMSG_SPACE(length, &result)) { |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5315 PyErr_SetString(PyExc_OverflowError, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5316 "CMSG_SPACE() argument out of range"); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5317 return NULL; |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5318 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5319 return PyLong_FromSize_t(result); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5320 } |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5321 |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5322 PyDoc_STRVAR(CMSG_SPACE_doc, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5323 "CMSG_SPACE(length) -> buffer size\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5324 \n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5325 Return the buffer size needed for recvmsg() to receive an ancillary\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5326 data item with associated data of the given length, along with any\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5327 trailing padding. The buffer space needed to receive multiple items\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5328 is the sum of the CMSG_SPACE() values for their associated data\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5329 lengths. Raises OverflowError if length is outside the permissible\n\ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5330 range of values."); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5331 #endif /* CMSG_SPACE */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5332 #endif /* CMSG_LEN */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5333 |
|
24293
640370f08e2a
Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents:
24280
diff
changeset
|
5334 |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
5335 /* List of functions exported by this module. */ |
|
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
5336 |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5337 static PyMethodDef socket_methods[] = { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5338 {"gethostbyname", socket_gethostbyname, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5339 METH_VARARGS, gethostbyname_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5340 {"gethostbyname_ex", socket_gethostbyname_ex, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5341 METH_VARARGS, ghbn_ex_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5342 {"gethostbyaddr", socket_gethostbyaddr, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5343 METH_VARARGS, gethostbyaddr_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5344 {"gethostname", socket_gethostname, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5345 METH_NOARGS, gethostname_doc}, |
|
68194
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
5346 #ifdef HAVE_SETHOSTNAME |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
5347 {"sethostname", socket_sethostname, |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
5348 METH_VARARGS, sethostname_doc}, |
|
a2d61117c2d2
Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68102
diff
changeset
|
5349 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5350 {"getservbyname", socket_getservbyname, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5351 METH_VARARGS, getservbyname_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5352 {"getservbyport", socket_getservbyport, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5353 METH_VARARGS, getservbyport_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5354 {"getprotobyname", socket_getprotobyname, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5355 METH_VARARGS, getprotobyname_doc}, |
|
43881
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
5356 #ifndef NO_DUP |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5357 {"dup", socket_dup, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5358 METH_O, dup_doc}, |
|
43881
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
5359 #endif |
|
33063
90da70986407
Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents:
32913
diff
changeset
|
5360 #ifdef HAVE_SOCKETPAIR |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5361 {"socketpair", socket_socketpair, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5362 METH_VARARGS, socketpair_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5363 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5364 {"ntohs", socket_ntohs, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5365 METH_VARARGS, ntohs_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5366 {"ntohl", socket_ntohl, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5367 METH_O, ntohl_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5368 {"htons", socket_htons, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5369 METH_VARARGS, htons_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5370 {"htonl", socket_htonl, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5371 METH_O, htonl_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5372 {"inet_aton", socket_inet_aton, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5373 METH_VARARGS, inet_aton_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5374 {"inet_ntoa", socket_inet_ntoa, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5375 METH_VARARGS, inet_ntoa_doc}, |
|
28818
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
5376 #ifdef HAVE_INET_PTON |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5377 {"inet_pton", socket_inet_pton, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5378 METH_VARARGS, inet_pton_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5379 {"inet_ntop", socket_inet_ntop, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5380 METH_VARARGS, inet_ntop_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5381 #endif |
|
64113
ca2a859e9bf6
fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents:
63890
diff
changeset
|
5382 {"getaddrinfo", (PyCFunction)socket_getaddrinfo, |
|
ca2a859e9bf6
fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents:
63890
diff
changeset
|
5383 METH_VARARGS | METH_KEYWORDS, getaddrinfo_doc}, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5384 {"getnameinfo", socket_getnameinfo, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5385 METH_VARARGS, getnameinfo_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5386 {"getdefaulttimeout", (PyCFunction)socket_getdefaulttimeout, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5387 METH_NOARGS, getdefaulttimeout_doc}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5388 {"setdefaulttimeout", socket_setdefaulttimeout, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5389 METH_O, setdefaulttimeout_doc}, |
|
70136
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5390 #ifdef HAVE_IF_NAMEINDEX |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5391 {"if_nameindex", socket_if_nameindex, |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5392 METH_NOARGS, if_nameindex_doc}, |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5393 {"if_nametoindex", socket_if_nametoindex, |
|
70226
cc60d0283fad
Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents:
70151
diff
changeset
|
5394 METH_VARARGS, if_nametoindex_doc}, |
|
70136
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5395 {"if_indextoname", socket_if_indextoname, |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5396 METH_O, if_indextoname_doc}, |
|
c2515cb23d9b
Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents:
70013
diff
changeset
|
5397 #endif |
|
72029
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5398 #ifdef CMSG_LEN |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5399 {"CMSG_LEN", socket_CMSG_LEN, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5400 METH_VARARGS, CMSG_LEN_doc}, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5401 #ifdef CMSG_SPACE |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5402 {"CMSG_SPACE", socket_CMSG_SPACE, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5403 METH_VARARGS, CMSG_SPACE_doc}, |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5404 #endif |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5405 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5406 {NULL, NULL} /* Sentinel */ |
| 294 | 5407 }; |
| 5408 | |
|
295
d7a38dece86a
Many changes to the interface, and added comments.
Guido van Rossum <guido@python.org>
parents:
294
diff
changeset
|
5409 |
|
3702
3408756ec601
changed windows test symbols; removed debug printf from sockets
Guido van Rossum <guido@python.org>
parents:
3700
diff
changeset
|
5410 #ifdef MS_WINDOWS |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5411 #define OS_INIT_DEFINED |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5412 |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5413 /* Additional initialization and cleanup for Windows */ |
|
3700
931086cb8529
More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents:
3673
diff
changeset
|
5414 |
|
931086cb8529
More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents:
3673
diff
changeset
|
5415 static void |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5416 os_cleanup(void) |
|
3700
931086cb8529
More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents:
3673
diff
changeset
|
5417 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5418 WSACleanup(); |
|
3700
931086cb8529
More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents:
3673
diff
changeset
|
5419 } |
|
931086cb8529
More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents:
3673
diff
changeset
|
5420 |
|
931086cb8529
More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents:
3673
diff
changeset
|
5421 static int |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5422 os_init(void) |
|
3700
931086cb8529
More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents:
3673
diff
changeset
|
5423 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5424 WSADATA WSAData; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5425 int ret; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5426 ret = WSAStartup(0x0101, &WSAData); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5427 switch (ret) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5428 case 0: /* No error */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5429 Py_AtExit(os_cleanup); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5430 return 1; /* Success */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5431 case WSASYSNOTREADY: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5432 PyErr_SetString(PyExc_ImportError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5433 "WSAStartup failed: network not ready"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5434 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5435 case WSAVERNOTSUPPORTED: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5436 case WSAEINVAL: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5437 PyErr_SetString( |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5438 PyExc_ImportError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5439 "WSAStartup failed: requested version not supported"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5440 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5441 default: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5442 PyErr_Format(PyExc_ImportError, "WSAStartup failed: error code %d", ret); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5443 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5444 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5445 return 0; /* Failure */ |
|
3700
931086cb8529
More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents:
3673
diff
changeset
|
5446 } |
|
931086cb8529
More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents:
3673
diff
changeset
|
5447 |
|
3702
3408756ec601
changed windows test symbols; removed debug printf from sockets
Guido van Rossum <guido@python.org>
parents:
3700
diff
changeset
|
5448 #endif /* MS_WINDOWS */ |
|
3700
931086cb8529
More rational support for Windows (tested on Roj's NT 3.5 machine only).
Guido van Rossum <guido@python.org>
parents:
3673
diff
changeset
|
5449 |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5450 |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5451 #ifdef PYOS_OS2 |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5452 #define OS_INIT_DEFINED |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5453 |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5454 /* Additional initialization for OS/2 */ |
|
6626
5e31d381fa47
os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents:
6618
diff
changeset
|
5455 |
|
5e31d381fa47
os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents:
6618
diff
changeset
|
5456 static int |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5457 os_init(void) |
|
6626
5e31d381fa47
os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents:
6618
diff
changeset
|
5458 { |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5459 #ifndef PYCC_GCC |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5460 int rc = sock_init(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5461 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5462 if (rc == 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5463 return 1; /* Success */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5464 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5465 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5466 PyErr_Format(PyExc_ImportError, "OS/2 TCP/IP Error# %d", sock_errno()); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5467 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5468 return 0; /* Failure */ |
|
22115
d104bb50a194
OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
22096
diff
changeset
|
5469 #else |
|
68585
bf94b6a73fc8
#11565: Fix several typos. Patch by Piotr Kasprzyk.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65668
diff
changeset
|
5470 /* No need to initialize sockets with GCC/EMX */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5471 return 1; /* Success */ |
|
22115
d104bb50a194
OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
22096
diff
changeset
|
5472 #endif |
|
6626
5e31d381fa47
os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents:
6618
diff
changeset
|
5473 } |
|
5e31d381fa47
os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents:
6618
diff
changeset
|
5474 |
|
5e31d381fa47
os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents:
6618
diff
changeset
|
5475 #endif /* PYOS_OS2 */ |
|
5e31d381fa47
os2 patch by Jeff Rush
Guido van Rossum <guido@python.org>
parents:
6618
diff
changeset
|
5476 |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5477 |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5478 #ifndef OS_INIT_DEFINED |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5479 static int |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5480 os_init(void) |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5481 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5482 return 1; /* Success */ |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5483 } |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5484 #endif |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5485 |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5486 |
|
21959
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
5487 /* C API table - always add new things to the end for binary |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
5488 compatibility. */ |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
5489 static |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
5490 PySocketModule_APIObject PySocketModuleAPI = |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
5491 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5492 &sock_type, |
|
66663
3d9a86b8cc98
Issue #10272: The ssl module now raises socket.timeout instead of a generic
Antoine Pitrou <solipsis@pitrou.net>
parents:
65981
diff
changeset
|
5493 NULL, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5494 NULL |
|
21959
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
5495 }; |
|
3957d155f8c5
Break SSL support out of _socket module and place it into a new
Marc-André Lemburg <mal@egenix.com>
parents:
21757
diff
changeset
|
5496 |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5497 |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5498 /* Initialize the _socket module. |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5499 |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5500 This module is actually called "_socket", and there's a wrapper |
|
41809
8e062e572ea4
Sockets facelift. APIs that could return binary data (e.g. aton() and
Guido van Rossum <guido@python.org>
parents:
41770
diff
changeset
|
5501 "socket.py" which implements some additional functionality. |
|
8e062e572ea4
Sockets facelift. APIs that could return binary data (e.g. aton() and
Guido van Rossum <guido@python.org>
parents:
41770
diff
changeset
|
5502 The import of "_socket" may fail with an ImportError exception if |
|
8e062e572ea4
Sockets facelift. APIs that could return binary data (e.g. aton() and
Guido van Rossum <guido@python.org>
parents:
41770
diff
changeset
|
5503 os-specific initialization fails. On Windows, this does WINSOCK |
|
68585
bf94b6a73fc8
#11565: Fix several typos. Patch by Piotr Kasprzyk.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
65668
diff
changeset
|
5504 initialization. When WINSOCK is initialized successfully, a call to |
|
41809
8e062e572ea4
Sockets facelift. APIs that could return binary data (e.g. aton() and
Guido van Rossum <guido@python.org>
parents:
41770
diff
changeset
|
5505 WSACleanup() is scheduled to be made at exit time. |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5506 */ |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
5507 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23818
diff
changeset
|
5508 PyDoc_STRVAR(socket_doc, |
|
24676
980767c6cd97
Clean up some docstrings. Some docstrings didn't show their return
Guido van Rossum <guido@python.org>
parents:
24619
diff
changeset
|
5509 "Implementation module for socket operations.\n\ |
|
980767c6cd97
Clean up some docstrings. Some docstrings didn't show their return
Guido van Rossum <guido@python.org>
parents:
24619
diff
changeset
|
5510 \n\ |
|
980767c6cd97
Clean up some docstrings. Some docstrings didn't show their return
Guido van Rossum <guido@python.org>
parents:
24619
diff
changeset
|
5511 See the socket module for documentation."); |
|
8631
d86733676815
Added copious docstrings, plus two minor layout tweaks.
Guido van Rossum <guido@python.org>
parents:
8439
diff
changeset
|
5512 |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
5513 static struct PyModuleDef socketmodule = { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5514 PyModuleDef_HEAD_INIT, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5515 PySocket_MODULE_NAME, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5516 socket_doc, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5517 -1, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5518 socket_methods, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5519 NULL, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5520 NULL, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5521 NULL, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5522 NULL |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
5523 }; |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
5524 |
|
24471
f66b3a3509c7
Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype
Mark Hammond <mhammond@skippinet.com.au>
parents:
24411
diff
changeset
|
5525 PyMODINIT_FUNC |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
5526 PyInit__socket(void) |
| 294 | 5527 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5528 PyObject *m, *has_ipv6; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5529 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5530 if (!os_init()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5531 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5532 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5533 Py_TYPE(&sock_type) = &PyType_Type; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5534 m = PyModule_Create(&socketmodule); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5535 if (m == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5536 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5537 |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
5538 Py_INCREF(PyExc_OSError); |
|
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
5539 PySocketModuleAPI.error = PyExc_OSError; |
|
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
5540 Py_INCREF(PyExc_OSError); |
|
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
5541 PyModule_AddObject(m, "error", PyExc_OSError); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5542 socket_herror = PyErr_NewException("socket.herror", |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
5543 PyExc_OSError, NULL); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5544 if (socket_herror == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5545 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5546 Py_INCREF(socket_herror); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5547 PyModule_AddObject(m, "herror", socket_herror); |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
5548 socket_gaierror = PyErr_NewException("socket.gaierror", PyExc_OSError, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5549 NULL); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5550 if (socket_gaierror == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5551 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5552 Py_INCREF(socket_gaierror); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5553 PyModule_AddObject(m, "gaierror", socket_gaierror); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5554 socket_timeout = PyErr_NewException("socket.timeout", |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
5555 PyExc_OSError, NULL); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5556 if (socket_timeout == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5557 return NULL; |
|
66663
3d9a86b8cc98
Issue #10272: The ssl module now raises socket.timeout instead of a generic
Antoine Pitrou <solipsis@pitrou.net>
parents:
65981
diff
changeset
|
5558 PySocketModuleAPI.timeout_error = socket_timeout; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5559 Py_INCREF(socket_timeout); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5560 PyModule_AddObject(m, "timeout", socket_timeout); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5561 Py_INCREF((PyObject *)&sock_type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5562 if (PyModule_AddObject(m, "SocketType", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5563 (PyObject *)&sock_type) != 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5564 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5565 Py_INCREF((PyObject *)&sock_type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5566 if (PyModule_AddObject(m, "socket", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5567 (PyObject *)&sock_type) != 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5568 return NULL; |
|
11182
35e0d03f2b02
Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents:
10579
diff
changeset
|
5569 |
|
28818
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
5570 #ifdef ENABLE_IPV6 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5571 has_ipv6 = Py_True; |
|
28818
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
5572 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5573 has_ipv6 = Py_False; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5574 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5575 Py_INCREF(has_ipv6); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5576 PyModule_AddObject(m, "has_ipv6", has_ipv6); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5577 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5578 /* Export C API */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5579 if (PyModule_AddObject(m, PySocket_CAPI_NAME, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5580 PyCapsule_New(&PySocketModuleAPI, PySocket_CAPSULE_NAME, NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5581 ) != 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5582 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5583 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5584 /* Address families (we only support AF_INET and AF_UNIX) */ |
|
11182
35e0d03f2b02
Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents:
10579
diff
changeset
|
5585 #ifdef AF_UNSPEC |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5586 PyModule_AddIntConstant(m, "AF_UNSPEC", AF_UNSPEC); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5587 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5588 PyModule_AddIntConstant(m, "AF_INET", AF_INET); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
5589 #ifdef AF_INET6 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5590 PyModule_AddIntConstant(m, "AF_INET6", AF_INET6); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
5591 #endif /* AF_INET6 */ |
|
31867
51aaceeaabe1
OS/2's TCP/IP stack supports AF_UNIX sockets, with the limitation that
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
31790
diff
changeset
|
5592 #if defined(AF_UNIX) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5593 PyModule_AddIntConstant(m, "AF_UNIX", AF_UNIX); |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
5594 #endif /* AF_UNIX */ |
|
11182
35e0d03f2b02
Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents:
10579
diff
changeset
|
5595 #ifdef AF_AX25 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5596 /* Amateur Radio AX.25 */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5597 PyModule_AddIntConstant(m, "AF_AX25", AF_AX25); |
|
11182
35e0d03f2b02
Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents:
10579
diff
changeset
|
5598 #endif |
|
35e0d03f2b02
Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents:
10579
diff
changeset
|
5599 #ifdef AF_IPX |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5600 PyModule_AddIntConstant(m, "AF_IPX", AF_IPX); /* Novell IPX */ |
|
11182
35e0d03f2b02
Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents:
10579
diff
changeset
|
5601 #endif |
|
35e0d03f2b02
Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents:
10579
diff
changeset
|
5602 #ifdef AF_APPLETALK |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5603 /* Appletalk DDP */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5604 PyModule_AddIntConstant(m, "AF_APPLETALK", AF_APPLETALK); |
|
11182
35e0d03f2b02
Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents:
10579
diff
changeset
|
5605 #endif |
|
35e0d03f2b02
Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents:
10579
diff
changeset
|
5606 #ifdef AF_NETROM |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5607 /* Amateur radio NetROM */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5608 PyModule_AddIntConstant(m, "AF_NETROM", AF_NETROM); |
|
11182
35e0d03f2b02
Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents:
10579
diff
changeset
|
5609 #endif |
|
35e0d03f2b02
Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents:
10579
diff
changeset
|
5610 #ifdef AF_BRIDGE |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5611 /* Multiprotocol bridge */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5612 PyModule_AddIntConstant(m, "AF_BRIDGE", AF_BRIDGE); |
|
11182
35e0d03f2b02
Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents:
10579
diff
changeset
|
5613 #endif |
|
32764
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5614 #ifdef AF_ATMPVC |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5615 /* ATM PVCs */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5616 PyModule_AddIntConstant(m, "AF_ATMPVC", AF_ATMPVC); |
|
32764
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5617 #endif |
|
11182
35e0d03f2b02
Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents:
10579
diff
changeset
|
5618 #ifdef AF_AAL5 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5619 /* Reserved for Werner's ATM */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5620 PyModule_AddIntConstant(m, "AF_AAL5", AF_AAL5); |
|
11182
35e0d03f2b02
Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents:
10579
diff
changeset
|
5621 #endif |
|
35e0d03f2b02
Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents:
10579
diff
changeset
|
5622 #ifdef AF_X25 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5623 /* Reserved for X.25 project */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5624 PyModule_AddIntConstant(m, "AF_X25", AF_X25); |
|
11182
35e0d03f2b02
Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents:
10579
diff
changeset
|
5625 #endif |
|
35e0d03f2b02
Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents:
10579
diff
changeset
|
5626 #ifdef AF_INET6 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5627 PyModule_AddIntConstant(m, "AF_INET6", AF_INET6); /* IP version 6 */ |
|
11182
35e0d03f2b02
Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents:
10579
diff
changeset
|
5628 #endif |
|
35e0d03f2b02
Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents:
10579
diff
changeset
|
5629 #ifdef AF_ROSE |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5630 /* Amateur Radio X.25 PLP */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5631 PyModule_AddIntConstant(m, "AF_ROSE", AF_ROSE); |
|
11182
35e0d03f2b02
Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents:
10579
diff
changeset
|
5632 #endif |
|
32764
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5633 #ifdef AF_DECnet |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5634 /* Reserved for DECnet project */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5635 PyModule_AddIntConstant(m, "AF_DECnet", AF_DECnet); |
|
32764
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5636 #endif |
|
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5637 #ifdef AF_NETBEUI |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5638 /* Reserved for 802.2LLC project */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5639 PyModule_AddIntConstant(m, "AF_NETBEUI", AF_NETBEUI); |
|
32764
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5640 #endif |
|
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5641 #ifdef AF_SECURITY |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5642 /* Security callback pseudo AF */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5643 PyModule_AddIntConstant(m, "AF_SECURITY", AF_SECURITY); |
|
32764
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5644 #endif |
|
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5645 #ifdef AF_KEY |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5646 /* PF_KEY key management API */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5647 PyModule_AddIntConstant(m, "AF_KEY", AF_KEY); |
|
32764
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5648 #endif |
|
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5649 #ifdef AF_NETLINK |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5650 /* */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5651 PyModule_AddIntConstant(m, "AF_NETLINK", AF_NETLINK); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5652 PyModule_AddIntConstant(m, "NETLINK_ROUTE", NETLINK_ROUTE); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36684
diff
changeset
|
5653 #ifdef NETLINK_SKIP |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5654 PyModule_AddIntConstant(m, "NETLINK_SKIP", NETLINK_SKIP); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36684
diff
changeset
|
5655 #endif |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36684
diff
changeset
|
5656 #ifdef NETLINK_W1 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5657 PyModule_AddIntConstant(m, "NETLINK_W1", NETLINK_W1); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5658 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5659 PyModule_AddIntConstant(m, "NETLINK_USERSOCK", NETLINK_USERSOCK); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5660 PyModule_AddIntConstant(m, "NETLINK_FIREWALL", NETLINK_FIREWALL); |
|
36632
4d988dda6478
NETLINK_TCPDIAG and NETLINK_NFLOG aren't defined on older Linux
Guido van Rossum <guido@python.org>
parents:
36610
diff
changeset
|
5661 #ifdef NETLINK_TCPDIAG |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5662 PyModule_AddIntConstant(m, "NETLINK_TCPDIAG", NETLINK_TCPDIAG); |
|
36632
4d988dda6478
NETLINK_TCPDIAG and NETLINK_NFLOG aren't defined on older Linux
Guido van Rossum <guido@python.org>
parents:
36610
diff
changeset
|
5663 #endif |
|
4d988dda6478
NETLINK_TCPDIAG and NETLINK_NFLOG aren't defined on older Linux
Guido van Rossum <guido@python.org>
parents:
36610
diff
changeset
|
5664 #ifdef NETLINK_NFLOG |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5665 PyModule_AddIntConstant(m, "NETLINK_NFLOG", NETLINK_NFLOG); |
|
36632
4d988dda6478
NETLINK_TCPDIAG and NETLINK_NFLOG aren't defined on older Linux
Guido van Rossum <guido@python.org>
parents:
36610
diff
changeset
|
5666 #endif |
|
36298
9eeaa33f9640
Get socketmodule to build after adding netlink support.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36289
diff
changeset
|
5667 #ifdef NETLINK_XFRM |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5668 PyModule_AddIntConstant(m, "NETLINK_XFRM", NETLINK_XFRM); |
|
36298
9eeaa33f9640
Get socketmodule to build after adding netlink support.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36289
diff
changeset
|
5669 #endif |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36684
diff
changeset
|
5670 #ifdef NETLINK_ARPD |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5671 PyModule_AddIntConstant(m, "NETLINK_ARPD", NETLINK_ARPD); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36684
diff
changeset
|
5672 #endif |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36684
diff
changeset
|
5673 #ifdef NETLINK_ROUTE6 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5674 PyModule_AddIntConstant(m, "NETLINK_ROUTE6", NETLINK_ROUTE6); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5675 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5676 PyModule_AddIntConstant(m, "NETLINK_IP6_FW", NETLINK_IP6_FW); |
|
40893
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40638
diff
changeset
|
5677 #ifdef NETLINK_DNRTMSG |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5678 PyModule_AddIntConstant(m, "NETLINK_DNRTMSG", NETLINK_DNRTMSG); |
|
43881
70cfc7b504c2
This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents:
43877
diff
changeset
|
5679 #endif |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36684
diff
changeset
|
5680 #ifdef NETLINK_TAPBASE |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5681 PyModule_AddIntConstant(m, "NETLINK_TAPBASE", NETLINK_TAPBASE); |
|
32764
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5682 #endif |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36684
diff
changeset
|
5683 #endif /* AF_NETLINK */ |
|
32764
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5684 #ifdef AF_ROUTE |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5685 /* Alias to emulate 4.4BSD */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5686 PyModule_AddIntConstant(m, "AF_ROUTE", AF_ROUTE); |
|
32764
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5687 #endif |
|
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5688 #ifdef AF_ASH |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5689 /* Ash */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5690 PyModule_AddIntConstant(m, "AF_ASH", AF_ASH); |
|
32764
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5691 #endif |
|
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5692 #ifdef AF_ECONET |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5693 /* Acorn Econet */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5694 PyModule_AddIntConstant(m, "AF_ECONET", AF_ECONET); |
|
32764
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5695 #endif |
|
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5696 #ifdef AF_ATMSVC |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5697 /* ATM SVCs */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5698 PyModule_AddIntConstant(m, "AF_ATMSVC", AF_ATMSVC); |
|
32764
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5699 #endif |
|
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5700 #ifdef AF_SNA |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5701 /* Linux SNA Project (nutters!) */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5702 PyModule_AddIntConstant(m, "AF_SNA", AF_SNA); |
|
32764
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5703 #endif |
|
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5704 #ifdef AF_IRDA |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5705 /* IRDA sockets */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5706 PyModule_AddIntConstant(m, "AF_IRDA", AF_IRDA); |
|
32764
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5707 #endif |
|
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5708 #ifdef AF_PPPOX |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5709 /* PPPoX sockets */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5710 PyModule_AddIntConstant(m, "AF_PPPOX", AF_PPPOX); |
|
32764
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5711 #endif |
|
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5712 #ifdef AF_WANPIPE |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5713 /* Wanpipe API Sockets */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5714 PyModule_AddIntConstant(m, "AF_WANPIPE", AF_WANPIPE); |
|
32764
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5715 #endif |
|
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5716 #ifdef AF_LLC |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5717 /* Linux LLC */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5718 PyModule_AddIntConstant(m, "AF_LLC", AF_LLC); |
|
32764
ecb0c97f1e42
Patch #984654: Add more address family constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
32611
diff
changeset
|
5719 #endif |
|
31441
493707692671
Patch #874083: Bluetooth support for socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
31274
diff
changeset
|
5720 |
|
31443
afb4c9726d1a
Add FreeBSD support for bluetooth sockets.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
31441
diff
changeset
|
5721 #ifdef USE_BLUETOOTH |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5722 PyModule_AddIntConstant(m, "AF_BLUETOOTH", AF_BLUETOOTH); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5723 PyModule_AddIntConstant(m, "BTPROTO_L2CAP", BTPROTO_L2CAP); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5724 PyModule_AddIntConstant(m, "BTPROTO_HCI", BTPROTO_HCI); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5725 PyModule_AddIntConstant(m, "SOL_HCI", SOL_HCI); |
|
65429
15859740aae6
Merged revisions 85586-85587,85596-85598 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65245
diff
changeset
|
5726 #if !defined(__NetBSD__) && !defined(__DragonFly__) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5727 PyModule_AddIntConstant(m, "HCI_FILTER", HCI_FILTER); |
|
65429
15859740aae6
Merged revisions 85586-85587,85596-85598 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65245
diff
changeset
|
5728 #endif |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41943
diff
changeset
|
5729 #if !defined(__FreeBSD__) |
|
65429
15859740aae6
Merged revisions 85586-85587,85596-85598 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65245
diff
changeset
|
5730 #if !defined(__NetBSD__) && !defined(__DragonFly__) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5731 PyModule_AddIntConstant(m, "HCI_TIME_STAMP", HCI_TIME_STAMP); |
|
65429
15859740aae6
Merged revisions 85586-85587,85596-85598 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65245
diff
changeset
|
5732 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5733 PyModule_AddIntConstant(m, "HCI_DATA_DIR", HCI_DATA_DIR); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5734 PyModule_AddIntConstant(m, "BTPROTO_SCO", BTPROTO_SCO); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5735 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5736 PyModule_AddIntConstant(m, "BTPROTO_RFCOMM", BTPROTO_RFCOMM); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5737 PyModule_AddStringConstant(m, "BDADDR_ANY", "00:00:00:00:00:00"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5738 PyModule_AddStringConstant(m, "BDADDR_LOCAL", "00:00:00:FF:FF:FF"); |
|
31441
493707692671
Patch #874083: Bluetooth support for socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
31274
diff
changeset
|
5739 #endif |
|
493707692671
Patch #874083: Bluetooth support for socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
31274
diff
changeset
|
5740 |
|
72758
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
5741 #ifdef AF_CAN |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
5742 /* Controller Area Network */ |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
5743 PyModule_AddIntConstant(m, "AF_CAN", AF_CAN); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
5744 #endif |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
5745 #ifdef PF_CAN |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
5746 /* Controller Area Network */ |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
5747 PyModule_AddIntConstant(m, "PF_CAN", PF_CAN); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
5748 #endif |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
5749 |
|
73478
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
5750 /* Reliable Datagram Sockets */ |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
5751 #ifdef AF_RDS |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
5752 PyModule_AddIntConstant(m, "AF_RDS", AF_RDS); |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
5753 #endif |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
5754 #ifdef PF_RDS |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
5755 PyModule_AddIntConstant(m, "PF_RDS", PF_RDS); |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
5756 #endif |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
5757 |
|
74741
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
5758 /* Kernel event messages */ |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
5759 #ifdef PF_SYSTEM |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
5760 PyModule_AddIntConstant(m, "PF_SYSTEM", PF_SYSTEM); |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
5761 #endif |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
5762 #ifdef AF_SYSTEM |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
5763 PyModule_AddIntConstant(m, "AF_SYSTEM", AF_SYSTEM); |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
5764 #endif |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
5765 |
|
65668
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5766 #ifdef AF_PACKET |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5767 PyModule_AddIntMacro(m, AF_PACKET); |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5768 #endif |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5769 #ifdef PF_PACKET |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5770 PyModule_AddIntMacro(m, PF_PACKET); |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5771 #endif |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5772 #ifdef PACKET_HOST |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5773 PyModule_AddIntMacro(m, PACKET_HOST); |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5774 #endif |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5775 #ifdef PACKET_BROADCAST |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5776 PyModule_AddIntMacro(m, PACKET_BROADCAST); |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5777 #endif |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5778 #ifdef PACKET_MULTICAST |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5779 PyModule_AddIntMacro(m, PACKET_MULTICAST); |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5780 #endif |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5781 #ifdef PACKET_OTHERHOST |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5782 PyModule_AddIntMacro(m, PACKET_OTHERHOST); |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5783 #endif |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5784 #ifdef PACKET_OUTGOING |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5785 PyModule_AddIntMacro(m, PACKET_OUTGOING); |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5786 #endif |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5787 #ifdef PACKET_LOOPBACK |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5788 PyModule_AddIntMacro(m, PACKET_LOOPBACK); |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5789 #endif |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5790 #ifdef PACKET_FASTROUTE |
|
add1bc05e426
Merged revisions 85868 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65429
diff
changeset
|
5791 PyModule_AddIntMacro(m, PACKET_FASTROUTE); |
|
16947
b25131bc6ec7
RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents:
16472
diff
changeset
|
5792 #endif |
|
11182
35e0d03f2b02
Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents:
10579
diff
changeset
|
5793 |
|
44568
305d7d2ce047
Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents:
44535
diff
changeset
|
5794 #ifdef HAVE_LINUX_TIPC_H |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5795 PyModule_AddIntConstant(m, "AF_TIPC", AF_TIPC); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5796 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5797 /* for addresses */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5798 PyModule_AddIntConstant(m, "TIPC_ADDR_NAMESEQ", TIPC_ADDR_NAMESEQ); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5799 PyModule_AddIntConstant(m, "TIPC_ADDR_NAME", TIPC_ADDR_NAME); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5800 PyModule_AddIntConstant(m, "TIPC_ADDR_ID", TIPC_ADDR_ID); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5801 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5802 PyModule_AddIntConstant(m, "TIPC_ZONE_SCOPE", TIPC_ZONE_SCOPE); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5803 PyModule_AddIntConstant(m, "TIPC_CLUSTER_SCOPE", TIPC_CLUSTER_SCOPE); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5804 PyModule_AddIntConstant(m, "TIPC_NODE_SCOPE", TIPC_NODE_SCOPE); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5805 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5806 /* for setsockopt() */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5807 PyModule_AddIntConstant(m, "SOL_TIPC", SOL_TIPC); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5808 PyModule_AddIntConstant(m, "TIPC_IMPORTANCE", TIPC_IMPORTANCE); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5809 PyModule_AddIntConstant(m, "TIPC_SRC_DROPPABLE", TIPC_SRC_DROPPABLE); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5810 PyModule_AddIntConstant(m, "TIPC_DEST_DROPPABLE", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5811 TIPC_DEST_DROPPABLE); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5812 PyModule_AddIntConstant(m, "TIPC_CONN_TIMEOUT", TIPC_CONN_TIMEOUT); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5813 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5814 PyModule_AddIntConstant(m, "TIPC_LOW_IMPORTANCE", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5815 TIPC_LOW_IMPORTANCE); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5816 PyModule_AddIntConstant(m, "TIPC_MEDIUM_IMPORTANCE", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5817 TIPC_MEDIUM_IMPORTANCE); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5818 PyModule_AddIntConstant(m, "TIPC_HIGH_IMPORTANCE", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5819 TIPC_HIGH_IMPORTANCE); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5820 PyModule_AddIntConstant(m, "TIPC_CRITICAL_IMPORTANCE", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5821 TIPC_CRITICAL_IMPORTANCE); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5822 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5823 /* for subscriptions */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5824 PyModule_AddIntConstant(m, "TIPC_SUB_PORTS", TIPC_SUB_PORTS); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5825 PyModule_AddIntConstant(m, "TIPC_SUB_SERVICE", TIPC_SUB_SERVICE); |
|
44643
d8e4342c145e
Merged revisions 59883-59920 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44568
diff
changeset
|
5826 #ifdef TIPC_SUB_CANCEL |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5827 /* doesn't seem to be available everywhere */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5828 PyModule_AddIntConstant(m, "TIPC_SUB_CANCEL", TIPC_SUB_CANCEL); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5829 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5830 PyModule_AddIntConstant(m, "TIPC_WAIT_FOREVER", TIPC_WAIT_FOREVER); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5831 PyModule_AddIntConstant(m, "TIPC_PUBLISHED", TIPC_PUBLISHED); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5832 PyModule_AddIntConstant(m, "TIPC_WITHDRAWN", TIPC_WITHDRAWN); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5833 PyModule_AddIntConstant(m, "TIPC_SUBSCR_TIMEOUT", TIPC_SUBSCR_TIMEOUT); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5834 PyModule_AddIntConstant(m, "TIPC_CFG_SRV", TIPC_CFG_SRV); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5835 PyModule_AddIntConstant(m, "TIPC_TOP_SRV", TIPC_TOP_SRV); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5836 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5837 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5838 /* Socket types */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5839 PyModule_AddIntConstant(m, "SOCK_STREAM", SOCK_STREAM); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5840 PyModule_AddIntConstant(m, "SOCK_DGRAM", SOCK_DGRAM); |
|
8823
f2a4a2b60860
Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
8821
diff
changeset
|
5841 /* We have incomplete socket support. */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5842 PyModule_AddIntConstant(m, "SOCK_RAW", SOCK_RAW); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5843 PyModule_AddIntConstant(m, "SOCK_SEQPACKET", SOCK_SEQPACKET); |
|
26597
7ddea4dfa519
Patch #650422: Use Posix AF_ constants instead of PF_ ones.
Martin v. Löwis <martin@v.loewis.de>
parents:
26551
diff
changeset
|
5844 #if defined(SOCK_RDM) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5845 PyModule_AddIntConstant(m, "SOCK_RDM", SOCK_RDM); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5846 #endif |
|
65314
12442ac3f7dd
Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
65243
diff
changeset
|
5847 #ifdef SOCK_CLOEXEC |
|
12442ac3f7dd
Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
65243
diff
changeset
|
5848 PyModule_AddIntConstant(m, "SOCK_CLOEXEC", SOCK_CLOEXEC); |
|
12442ac3f7dd
Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
65243
diff
changeset
|
5849 #endif |
|
12442ac3f7dd
Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
65243
diff
changeset
|
5850 #ifdef SOCK_NONBLOCK |
|
12442ac3f7dd
Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
65243
diff
changeset
|
5851 PyModule_AddIntConstant(m, "SOCK_NONBLOCK", SOCK_NONBLOCK); |
|
12442ac3f7dd
Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
65243
diff
changeset
|
5852 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5853 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5854 #ifdef SO_DEBUG |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5855 PyModule_AddIntConstant(m, "SO_DEBUG", SO_DEBUG); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5856 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5857 #ifdef SO_ACCEPTCONN |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5858 PyModule_AddIntConstant(m, "SO_ACCEPTCONN", SO_ACCEPTCONN); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5859 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5860 #ifdef SO_REUSEADDR |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5861 PyModule_AddIntConstant(m, "SO_REUSEADDR", SO_REUSEADDR); |
|
2299
990099ed7810
add socket related constants
Guido van Rossum <guido@python.org>
parents:
2123
diff
changeset
|
5862 #endif |
|
32578
21fd6e62cd27
[Patch #982665 ] add SO_EXCLUSIVEADDRUSE constant
Andrew M. Kuchling <amk@amk.ca>
parents:
32521
diff
changeset
|
5863 #ifdef SO_EXCLUSIVEADDRUSE |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5864 PyModule_AddIntConstant(m, "SO_EXCLUSIVEADDRUSE", SO_EXCLUSIVEADDRUSE); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5865 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5866 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5867 #ifdef SO_KEEPALIVE |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5868 PyModule_AddIntConstant(m, "SO_KEEPALIVE", SO_KEEPALIVE); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5869 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5870 #ifdef SO_DONTROUTE |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5871 PyModule_AddIntConstant(m, "SO_DONTROUTE", SO_DONTROUTE); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5872 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5873 #ifdef SO_BROADCAST |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5874 PyModule_AddIntConstant(m, "SO_BROADCAST", SO_BROADCAST); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5875 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5876 #ifdef SO_USELOOPBACK |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5877 PyModule_AddIntConstant(m, "SO_USELOOPBACK", SO_USELOOPBACK); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5878 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5879 #ifdef SO_LINGER |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5880 PyModule_AddIntConstant(m, "SO_LINGER", SO_LINGER); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5881 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5882 #ifdef SO_OOBINLINE |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5883 PyModule_AddIntConstant(m, "SO_OOBINLINE", SO_OOBINLINE); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5884 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5885 #ifdef SO_REUSEPORT |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5886 PyModule_AddIntConstant(m, "SO_REUSEPORT", SO_REUSEPORT); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5887 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5888 #ifdef SO_SNDBUF |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5889 PyModule_AddIntConstant(m, "SO_SNDBUF", SO_SNDBUF); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5890 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5891 #ifdef SO_RCVBUF |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5892 PyModule_AddIntConstant(m, "SO_RCVBUF", SO_RCVBUF); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5893 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5894 #ifdef SO_SNDLOWAT |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5895 PyModule_AddIntConstant(m, "SO_SNDLOWAT", SO_SNDLOWAT); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5896 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5897 #ifdef SO_RCVLOWAT |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5898 PyModule_AddIntConstant(m, "SO_RCVLOWAT", SO_RCVLOWAT); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5899 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5900 #ifdef SO_SNDTIMEO |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5901 PyModule_AddIntConstant(m, "SO_SNDTIMEO", SO_SNDTIMEO); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5902 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5903 #ifdef SO_RCVTIMEO |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5904 PyModule_AddIntConstant(m, "SO_RCVTIMEO", SO_RCVTIMEO); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5905 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5906 #ifdef SO_ERROR |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5907 PyModule_AddIntConstant(m, "SO_ERROR", SO_ERROR); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5908 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5909 #ifdef SO_TYPE |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5910 PyModule_AddIntConstant(m, "SO_TYPE", SO_TYPE); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5911 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
5912 #ifdef SO_SETFIB |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
5913 PyModule_AddIntConstant(m, "SO_SETFIB", SO_SETFIB); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
5914 #endif |
|
72029
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5915 #ifdef SO_PASSCRED |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5916 PyModule_AddIntConstant(m, "SO_PASSCRED", SO_PASSCRED); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5917 #endif |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5918 #ifdef SO_PEERCRED |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5919 PyModule_AddIntConstant(m, "SO_PEERCRED", SO_PEERCRED); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5920 #endif |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5921 #ifdef LOCAL_PEERCRED |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5922 PyModule_AddIntConstant(m, "LOCAL_PEERCRED", LOCAL_PEERCRED); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5923 #endif |
|
73128
6159311f0f44
Issue #12619: Expose socket.SO_BINDTODEVICE constant
Victor Stinner <victor.stinner@haypocalc.com>
parents:
72925
diff
changeset
|
5924 #ifdef SO_BINDTODEVICE |
|
6159311f0f44
Issue #12619: Expose socket.SO_BINDTODEVICE constant
Victor Stinner <victor.stinner@haypocalc.com>
parents:
72925
diff
changeset
|
5925 PyModule_AddIntMacro(m, SO_BINDTODEVICE); |
|
6159311f0f44
Issue #12619: Expose socket.SO_BINDTODEVICE constant
Victor Stinner <victor.stinner@haypocalc.com>
parents:
72925
diff
changeset
|
5926 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5927 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5928 /* Maximum number of connections for "listen" */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5929 #ifdef SOMAXCONN |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5930 PyModule_AddIntConstant(m, "SOMAXCONN", SOMAXCONN); |
|
2299
990099ed7810
add socket related constants
Guido van Rossum <guido@python.org>
parents:
2123
diff
changeset
|
5931 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5932 PyModule_AddIntConstant(m, "SOMAXCONN", 5); /* Common value */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5933 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5934 |
|
72029
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5935 /* Ancilliary message types */ |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5936 #ifdef SCM_RIGHTS |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5937 PyModule_AddIntConstant(m, "SCM_RIGHTS", SCM_RIGHTS); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5938 #endif |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5939 #ifdef SCM_CREDENTIALS |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5940 PyModule_AddIntConstant(m, "SCM_CREDENTIALS", SCM_CREDENTIALS); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5941 #endif |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5942 #ifdef SCM_CREDS |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5943 PyModule_AddIntConstant(m, "SCM_CREDS", SCM_CREDS); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5944 #endif |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5945 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5946 /* Flags for send, recv */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5947 #ifdef MSG_OOB |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5948 PyModule_AddIntConstant(m, "MSG_OOB", MSG_OOB); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5949 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5950 #ifdef MSG_PEEK |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5951 PyModule_AddIntConstant(m, "MSG_PEEK", MSG_PEEK); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5952 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5953 #ifdef MSG_DONTROUTE |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5954 PyModule_AddIntConstant(m, "MSG_DONTROUTE", MSG_DONTROUTE); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5955 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5956 #ifdef MSG_DONTWAIT |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5957 PyModule_AddIntConstant(m, "MSG_DONTWAIT", MSG_DONTWAIT); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5958 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5959 #ifdef MSG_EOR |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5960 PyModule_AddIntConstant(m, "MSG_EOR", MSG_EOR); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5961 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5962 #ifdef MSG_TRUNC |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5963 PyModule_AddIntConstant(m, "MSG_TRUNC", MSG_TRUNC); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5964 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5965 #ifdef MSG_CTRUNC |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5966 PyModule_AddIntConstant(m, "MSG_CTRUNC", MSG_CTRUNC); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5967 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5968 #ifdef MSG_WAITALL |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5969 PyModule_AddIntConstant(m, "MSG_WAITALL", MSG_WAITALL); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5970 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5971 #ifdef MSG_BTAG |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5972 PyModule_AddIntConstant(m, "MSG_BTAG", MSG_BTAG); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5973 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5974 #ifdef MSG_ETAG |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5975 PyModule_AddIntConstant(m, "MSG_ETAG", MSG_ETAG); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
5976 #endif |
|
72029
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5977 #ifdef MSG_NOSIGNAL |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5978 PyModule_AddIntConstant(m, "MSG_NOSIGNAL", MSG_NOSIGNAL); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5979 #endif |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5980 #ifdef MSG_NOTIFICATION |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5981 PyModule_AddIntConstant(m, "MSG_NOTIFICATION", MSG_NOTIFICATION); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5982 #endif |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5983 #ifdef MSG_CMSG_CLOEXEC |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5984 PyModule_AddIntConstant(m, "MSG_CMSG_CLOEXEC", MSG_CMSG_CLOEXEC); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5985 #endif |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5986 #ifdef MSG_ERRQUEUE |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5987 PyModule_AddIntConstant(m, "MSG_ERRQUEUE", MSG_ERRQUEUE); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5988 #endif |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5989 #ifdef MSG_CONFIRM |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5990 PyModule_AddIntConstant(m, "MSG_CONFIRM", MSG_CONFIRM); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5991 #endif |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5992 #ifdef MSG_MORE |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5993 PyModule_AddIntConstant(m, "MSG_MORE", MSG_MORE); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5994 #endif |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5995 #ifdef MSG_EOF |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5996 PyModule_AddIntConstant(m, "MSG_EOF", MSG_EOF); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5997 #endif |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5998 #ifdef MSG_BCAST |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
5999 PyModule_AddIntConstant(m, "MSG_BCAST", MSG_BCAST); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
6000 #endif |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
6001 #ifdef MSG_MCAST |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
6002 PyModule_AddIntConstant(m, "MSG_MCAST", MSG_MCAST); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
6003 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6004 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6005 /* Protocol level and numbers, usable for [gs]etsockopt */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6006 #ifdef SOL_SOCKET |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6007 PyModule_AddIntConstant(m, "SOL_SOCKET", SOL_SOCKET); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6008 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6009 #ifdef SOL_IP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6010 PyModule_AddIntConstant(m, "SOL_IP", SOL_IP); |
|
11182
35e0d03f2b02
Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents:
10579
diff
changeset
|
6011 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6012 PyModule_AddIntConstant(m, "SOL_IP", 0); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6013 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6014 #ifdef SOL_IPX |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6015 PyModule_AddIntConstant(m, "SOL_IPX", SOL_IPX); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6016 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6017 #ifdef SOL_AX25 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6018 PyModule_AddIntConstant(m, "SOL_AX25", SOL_AX25); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6019 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6020 #ifdef SOL_ATALK |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6021 PyModule_AddIntConstant(m, "SOL_ATALK", SOL_ATALK); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6022 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6023 #ifdef SOL_NETROM |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6024 PyModule_AddIntConstant(m, "SOL_NETROM", SOL_NETROM); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6025 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6026 #ifdef SOL_ROSE |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6027 PyModule_AddIntConstant(m, "SOL_ROSE", SOL_ROSE); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6028 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6029 #ifdef SOL_TCP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6030 PyModule_AddIntConstant(m, "SOL_TCP", SOL_TCP); |
|
11182
35e0d03f2b02
Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents:
10579
diff
changeset
|
6031 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6032 PyModule_AddIntConstant(m, "SOL_TCP", 6); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6033 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6034 #ifdef SOL_UDP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6035 PyModule_AddIntConstant(m, "SOL_UDP", SOL_UDP); |
|
11182
35e0d03f2b02
Patch by Marc-Andre Lemburg to add a bunch more symbols.
Guido van Rossum <guido@python.org>
parents:
10579
diff
changeset
|
6036 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6037 PyModule_AddIntConstant(m, "SOL_UDP", 17); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6038 #endif |
|
72758
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
6039 #ifdef SOL_CAN_BASE |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
6040 PyModule_AddIntConstant(m, "SOL_CAN_BASE", SOL_CAN_BASE); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
6041 #endif |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
6042 #ifdef SOL_CAN_RAW |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
6043 PyModule_AddIntConstant(m, "SOL_CAN_RAW", SOL_CAN_RAW); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
6044 PyModule_AddIntConstant(m, "CAN_RAW", CAN_RAW); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
6045 #endif |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
6046 #ifdef HAVE_LINUX_CAN_H |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
6047 PyModule_AddIntConstant(m, "CAN_EFF_FLAG", CAN_EFF_FLAG); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
6048 PyModule_AddIntConstant(m, "CAN_RTR_FLAG", CAN_RTR_FLAG); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
6049 PyModule_AddIntConstant(m, "CAN_ERR_FLAG", CAN_ERR_FLAG); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
6050 |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
6051 PyModule_AddIntConstant(m, "CAN_SFF_MASK", CAN_SFF_MASK); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
6052 PyModule_AddIntConstant(m, "CAN_EFF_MASK", CAN_EFF_MASK); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
6053 PyModule_AddIntConstant(m, "CAN_ERR_MASK", CAN_ERR_MASK); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
6054 #endif |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
6055 #ifdef HAVE_LINUX_CAN_RAW_H |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
6056 PyModule_AddIntConstant(m, "CAN_RAW_FILTER", CAN_RAW_FILTER); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
6057 PyModule_AddIntConstant(m, "CAN_RAW_ERR_FILTER", CAN_RAW_ERR_FILTER); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
6058 PyModule_AddIntConstant(m, "CAN_RAW_LOOPBACK", CAN_RAW_LOOPBACK); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
6059 PyModule_AddIntConstant(m, "CAN_RAW_RECV_OWN_MSGS", CAN_RAW_RECV_OWN_MSGS); |
|
e767318baccd
Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents:
72510
diff
changeset
|
6060 #endif |
|
73478
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6061 #ifdef SOL_RDS |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6062 PyModule_AddIntConstant(m, "SOL_RDS", SOL_RDS); |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6063 #endif |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6064 #ifdef RDS_CANCEL_SENT_TO |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6065 PyModule_AddIntConstant(m, "RDS_CANCEL_SENT_TO", RDS_CANCEL_SENT_TO); |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6066 #endif |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6067 #ifdef RDS_GET_MR |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6068 PyModule_AddIntConstant(m, "RDS_GET_MR", RDS_GET_MR); |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6069 #endif |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6070 #ifdef RDS_FREE_MR |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6071 PyModule_AddIntConstant(m, "RDS_FREE_MR", RDS_FREE_MR); |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6072 #endif |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6073 #ifdef RDS_RECVERR |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6074 PyModule_AddIntConstant(m, "RDS_RECVERR", RDS_RECVERR); |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6075 #endif |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6076 #ifdef RDS_CONG_MONITOR |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6077 PyModule_AddIntConstant(m, "RDS_CONG_MONITOR", RDS_CONG_MONITOR); |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6078 #endif |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6079 #ifdef RDS_GET_MR_FOR_DEST |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6080 PyModule_AddIntConstant(m, "RDS_GET_MR_FOR_DEST", RDS_GET_MR_FOR_DEST); |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6081 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6082 #ifdef IPPROTO_IP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6083 PyModule_AddIntConstant(m, "IPPROTO_IP", IPPROTO_IP); |
|
8439
534602746079
Some systems (e.g. Linux) use enums for some symbols (like IPPROTO_IP)
Guido van Rossum <guido@python.org>
parents:
7942
diff
changeset
|
6084 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6085 PyModule_AddIntConstant(m, "IPPROTO_IP", 0); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6086 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6087 #ifdef IPPROTO_HOPOPTS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6088 PyModule_AddIntConstant(m, "IPPROTO_HOPOPTS", IPPROTO_HOPOPTS); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6089 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6090 #ifdef IPPROTO_ICMP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6091 PyModule_AddIntConstant(m, "IPPROTO_ICMP", IPPROTO_ICMP); |
|
8439
534602746079
Some systems (e.g. Linux) use enums for some symbols (like IPPROTO_IP)
Guido van Rossum <guido@python.org>
parents:
7942
diff
changeset
|
6092 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6093 PyModule_AddIntConstant(m, "IPPROTO_ICMP", 1); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6094 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6095 #ifdef IPPROTO_IGMP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6096 PyModule_AddIntConstant(m, "IPPROTO_IGMP", IPPROTO_IGMP); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6097 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6098 #ifdef IPPROTO_GGP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6099 PyModule_AddIntConstant(m, "IPPROTO_GGP", IPPROTO_GGP); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6100 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6101 #ifdef IPPROTO_IPV4 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6102 PyModule_AddIntConstant(m, "IPPROTO_IPV4", IPPROTO_IPV4); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6103 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6104 #ifdef IPPROTO_IPV6 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6105 PyModule_AddIntConstant(m, "IPPROTO_IPV6", IPPROTO_IPV6); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6106 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6107 #ifdef IPPROTO_IPIP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6108 PyModule_AddIntConstant(m, "IPPROTO_IPIP", IPPROTO_IPIP); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6109 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6110 #ifdef IPPROTO_TCP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6111 PyModule_AddIntConstant(m, "IPPROTO_TCP", IPPROTO_TCP); |
|
8439
534602746079
Some systems (e.g. Linux) use enums for some symbols (like IPPROTO_IP)
Guido van Rossum <guido@python.org>
parents:
7942
diff
changeset
|
6112 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6113 PyModule_AddIntConstant(m, "IPPROTO_TCP", 6); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6114 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6115 #ifdef IPPROTO_EGP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6116 PyModule_AddIntConstant(m, "IPPROTO_EGP", IPPROTO_EGP); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6117 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6118 #ifdef IPPROTO_PUP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6119 PyModule_AddIntConstant(m, "IPPROTO_PUP", IPPROTO_PUP); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6120 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6121 #ifdef IPPROTO_UDP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6122 PyModule_AddIntConstant(m, "IPPROTO_UDP", IPPROTO_UDP); |
|
8439
534602746079
Some systems (e.g. Linux) use enums for some symbols (like IPPROTO_IP)
Guido van Rossum <guido@python.org>
parents:
7942
diff
changeset
|
6123 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6124 PyModule_AddIntConstant(m, "IPPROTO_UDP", 17); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6125 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6126 #ifdef IPPROTO_IDP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6127 PyModule_AddIntConstant(m, "IPPROTO_IDP", IPPROTO_IDP); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6128 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6129 #ifdef IPPROTO_HELLO |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6130 PyModule_AddIntConstant(m, "IPPROTO_HELLO", IPPROTO_HELLO); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6131 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6132 #ifdef IPPROTO_ND |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6133 PyModule_AddIntConstant(m, "IPPROTO_ND", IPPROTO_ND); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6134 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6135 #ifdef IPPROTO_TP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6136 PyModule_AddIntConstant(m, "IPPROTO_TP", IPPROTO_TP); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6137 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6138 #ifdef IPPROTO_IPV6 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6139 PyModule_AddIntConstant(m, "IPPROTO_IPV6", IPPROTO_IPV6); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6140 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6141 #ifdef IPPROTO_ROUTING |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6142 PyModule_AddIntConstant(m, "IPPROTO_ROUTING", IPPROTO_ROUTING); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6143 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6144 #ifdef IPPROTO_FRAGMENT |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6145 PyModule_AddIntConstant(m, "IPPROTO_FRAGMENT", IPPROTO_FRAGMENT); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6146 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6147 #ifdef IPPROTO_RSVP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6148 PyModule_AddIntConstant(m, "IPPROTO_RSVP", IPPROTO_RSVP); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6149 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6150 #ifdef IPPROTO_GRE |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6151 PyModule_AddIntConstant(m, "IPPROTO_GRE", IPPROTO_GRE); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6152 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6153 #ifdef IPPROTO_ESP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6154 PyModule_AddIntConstant(m, "IPPROTO_ESP", IPPROTO_ESP); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6155 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6156 #ifdef IPPROTO_AH |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6157 PyModule_AddIntConstant(m, "IPPROTO_AH", IPPROTO_AH); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6158 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6159 #ifdef IPPROTO_MOBILE |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6160 PyModule_AddIntConstant(m, "IPPROTO_MOBILE", IPPROTO_MOBILE); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6161 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6162 #ifdef IPPROTO_ICMPV6 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6163 PyModule_AddIntConstant(m, "IPPROTO_ICMPV6", IPPROTO_ICMPV6); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6164 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6165 #ifdef IPPROTO_NONE |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6166 PyModule_AddIntConstant(m, "IPPROTO_NONE", IPPROTO_NONE); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6167 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6168 #ifdef IPPROTO_DSTOPTS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6169 PyModule_AddIntConstant(m, "IPPROTO_DSTOPTS", IPPROTO_DSTOPTS); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6170 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6171 #ifdef IPPROTO_XTP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6172 PyModule_AddIntConstant(m, "IPPROTO_XTP", IPPROTO_XTP); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6173 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6174 #ifdef IPPROTO_EON |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6175 PyModule_AddIntConstant(m, "IPPROTO_EON", IPPROTO_EON); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6176 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6177 #ifdef IPPROTO_PIM |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6178 PyModule_AddIntConstant(m, "IPPROTO_PIM", IPPROTO_PIM); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6179 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6180 #ifdef IPPROTO_IPCOMP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6181 PyModule_AddIntConstant(m, "IPPROTO_IPCOMP", IPPROTO_IPCOMP); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6182 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6183 #ifdef IPPROTO_VRRP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6184 PyModule_AddIntConstant(m, "IPPROTO_VRRP", IPPROTO_VRRP); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6185 #endif |
|
72029
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
6186 #ifdef IPPROTO_SCTP |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
6187 PyModule_AddIntConstant(m, "IPPROTO_SCTP", IPPROTO_SCTP); |
|
c64216addd7f
Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents:
71865
diff
changeset
|
6188 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6189 #ifdef IPPROTO_BIP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6190 PyModule_AddIntConstant(m, "IPPROTO_BIP", IPPROTO_BIP); |
|
2299
990099ed7810
add socket related constants
Guido van Rossum <guido@python.org>
parents:
2123
diff
changeset
|
6191 #endif |
|
990099ed7810
add socket related constants
Guido van Rossum <guido@python.org>
parents:
2123
diff
changeset
|
6192 /**/ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6193 #ifdef IPPROTO_RAW |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6194 PyModule_AddIntConstant(m, "IPPROTO_RAW", IPPROTO_RAW); |
|
8439
534602746079
Some systems (e.g. Linux) use enums for some symbols (like IPPROTO_IP)
Guido van Rossum <guido@python.org>
parents:
7942
diff
changeset
|
6195 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6196 PyModule_AddIntConstant(m, "IPPROTO_RAW", 255); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6197 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6198 #ifdef IPPROTO_MAX |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6199 PyModule_AddIntConstant(m, "IPPROTO_MAX", IPPROTO_MAX); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6200 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6201 |
|
74741
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
6202 #ifdef SYSPROTO_CONTROL |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
6203 PyModule_AddIntConstant(m, "SYSPROTO_CONTROL", SYSPROTO_CONTROL); |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
6204 #endif |
|
aa3680d2c24d
Issue #13777: Add PF_SYSTEM sockets on OS X.
Martin v. Löwis <martin@v.loewis.de>
parents:
74234
diff
changeset
|
6205 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6206 /* Some port configuration */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6207 #ifdef IPPORT_RESERVED |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6208 PyModule_AddIntConstant(m, "IPPORT_RESERVED", IPPORT_RESERVED); |
|
2299
990099ed7810
add socket related constants
Guido van Rossum <guido@python.org>
parents:
2123
diff
changeset
|
6209 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6210 PyModule_AddIntConstant(m, "IPPORT_RESERVED", 1024); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6211 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6212 #ifdef IPPORT_USERRESERVED |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6213 PyModule_AddIntConstant(m, "IPPORT_USERRESERVED", IPPORT_USERRESERVED); |
|
2299
990099ed7810
add socket related constants
Guido van Rossum <guido@python.org>
parents:
2123
diff
changeset
|
6214 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6215 PyModule_AddIntConstant(m, "IPPORT_USERRESERVED", 5000); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6216 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6217 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6218 /* Some reserved IP v.4 addresses */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6219 #ifdef INADDR_ANY |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6220 PyModule_AddIntConstant(m, "INADDR_ANY", INADDR_ANY); |
| 2369 | 6221 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6222 PyModule_AddIntConstant(m, "INADDR_ANY", 0x00000000); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6223 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6224 #ifdef INADDR_BROADCAST |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6225 PyModule_AddIntConstant(m, "INADDR_BROADCAST", INADDR_BROADCAST); |
| 2369 | 6226 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6227 PyModule_AddIntConstant(m, "INADDR_BROADCAST", 0xffffffff); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6228 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6229 #ifdef INADDR_LOOPBACK |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6230 PyModule_AddIntConstant(m, "INADDR_LOOPBACK", INADDR_LOOPBACK); |
| 2369 | 6231 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6232 PyModule_AddIntConstant(m, "INADDR_LOOPBACK", 0x7F000001); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6233 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6234 #ifdef INADDR_UNSPEC_GROUP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6235 PyModule_AddIntConstant(m, "INADDR_UNSPEC_GROUP", INADDR_UNSPEC_GROUP); |
| 2369 | 6236 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6237 PyModule_AddIntConstant(m, "INADDR_UNSPEC_GROUP", 0xe0000000); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6238 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6239 #ifdef INADDR_ALLHOSTS_GROUP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6240 PyModule_AddIntConstant(m, "INADDR_ALLHOSTS_GROUP", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6241 INADDR_ALLHOSTS_GROUP); |
| 2369 | 6242 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6243 PyModule_AddIntConstant(m, "INADDR_ALLHOSTS_GROUP", 0xe0000001); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6244 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6245 #ifdef INADDR_MAX_LOCAL_GROUP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6246 PyModule_AddIntConstant(m, "INADDR_MAX_LOCAL_GROUP", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6247 INADDR_MAX_LOCAL_GROUP); |
| 2369 | 6248 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6249 PyModule_AddIntConstant(m, "INADDR_MAX_LOCAL_GROUP", 0xe00000ff); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6250 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6251 #ifdef INADDR_NONE |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6252 PyModule_AddIntConstant(m, "INADDR_NONE", INADDR_NONE); |
| 2369 | 6253 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6254 PyModule_AddIntConstant(m, "INADDR_NONE", 0xffffffff); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6255 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6256 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6257 /* IPv4 [gs]etsockopt options */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6258 #ifdef IP_OPTIONS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6259 PyModule_AddIntConstant(m, "IP_OPTIONS", IP_OPTIONS); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6260 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6261 #ifdef IP_HDRINCL |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6262 PyModule_AddIntConstant(m, "IP_HDRINCL", IP_HDRINCL); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6263 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6264 #ifdef IP_TOS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6265 PyModule_AddIntConstant(m, "IP_TOS", IP_TOS); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6266 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6267 #ifdef IP_TTL |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6268 PyModule_AddIntConstant(m, "IP_TTL", IP_TTL); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6269 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6270 #ifdef IP_RECVOPTS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6271 PyModule_AddIntConstant(m, "IP_RECVOPTS", IP_RECVOPTS); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6272 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6273 #ifdef IP_RECVRETOPTS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6274 PyModule_AddIntConstant(m, "IP_RECVRETOPTS", IP_RECVRETOPTS); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6275 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6276 #ifdef IP_RECVDSTADDR |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6277 PyModule_AddIntConstant(m, "IP_RECVDSTADDR", IP_RECVDSTADDR); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6278 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6279 #ifdef IP_RETOPTS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6280 PyModule_AddIntConstant(m, "IP_RETOPTS", IP_RETOPTS); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6281 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6282 #ifdef IP_MULTICAST_IF |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6283 PyModule_AddIntConstant(m, "IP_MULTICAST_IF", IP_MULTICAST_IF); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6284 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6285 #ifdef IP_MULTICAST_TTL |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6286 PyModule_AddIntConstant(m, "IP_MULTICAST_TTL", IP_MULTICAST_TTL); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6287 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6288 #ifdef IP_MULTICAST_LOOP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6289 PyModule_AddIntConstant(m, "IP_MULTICAST_LOOP", IP_MULTICAST_LOOP); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6290 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6291 #ifdef IP_ADD_MEMBERSHIP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6292 PyModule_AddIntConstant(m, "IP_ADD_MEMBERSHIP", IP_ADD_MEMBERSHIP); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6293 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6294 #ifdef IP_DROP_MEMBERSHIP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6295 PyModule_AddIntConstant(m, "IP_DROP_MEMBERSHIP", IP_DROP_MEMBERSHIP); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6296 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6297 #ifdef IP_DEFAULT_MULTICAST_TTL |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6298 PyModule_AddIntConstant(m, "IP_DEFAULT_MULTICAST_TTL", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6299 IP_DEFAULT_MULTICAST_TTL); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6300 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6301 #ifdef IP_DEFAULT_MULTICAST_LOOP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6302 PyModule_AddIntConstant(m, "IP_DEFAULT_MULTICAST_LOOP", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6303 IP_DEFAULT_MULTICAST_LOOP); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6304 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6305 #ifdef IP_MAX_MEMBERSHIPS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6306 PyModule_AddIntConstant(m, "IP_MAX_MEMBERSHIPS", IP_MAX_MEMBERSHIPS); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6307 #endif |
|
74012
59ea1d1a4137
Issue #12809: Expose IP_TRANSPARENT in the socket module. Patch by Michael
Charles-François Natali <neologix@free.fr>
parents:
74007
diff
changeset
|
6308 #ifdef IP_TRANSPARENT |
|
59ea1d1a4137
Issue #12809: Expose IP_TRANSPARENT in the socket module. Patch by Michael
Charles-François Natali <neologix@free.fr>
parents:
74007
diff
changeset
|
6309 PyModule_AddIntConstant(m, "IP_TRANSPARENT", IP_TRANSPARENT); |
|
59ea1d1a4137
Issue #12809: Expose IP_TRANSPARENT in the socket module. Patch by Michael
Charles-François Natali <neologix@free.fr>
parents:
74007
diff
changeset
|
6310 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6311 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6312 /* IPv6 [gs]etsockopt options, defined in RFC2553 */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6313 #ifdef IPV6_JOIN_GROUP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6314 PyModule_AddIntConstant(m, "IPV6_JOIN_GROUP", IPV6_JOIN_GROUP); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6315 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6316 #ifdef IPV6_LEAVE_GROUP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6317 PyModule_AddIntConstant(m, "IPV6_LEAVE_GROUP", IPV6_LEAVE_GROUP); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6318 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6319 #ifdef IPV6_MULTICAST_HOPS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6320 PyModule_AddIntConstant(m, "IPV6_MULTICAST_HOPS", IPV6_MULTICAST_HOPS); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6321 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6322 #ifdef IPV6_MULTICAST_IF |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6323 PyModule_AddIntConstant(m, "IPV6_MULTICAST_IF", IPV6_MULTICAST_IF); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6324 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6325 #ifdef IPV6_MULTICAST_LOOP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6326 PyModule_AddIntConstant(m, "IPV6_MULTICAST_LOOP", IPV6_MULTICAST_LOOP); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6327 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6328 #ifdef IPV6_UNICAST_HOPS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6329 PyModule_AddIntConstant(m, "IPV6_UNICAST_HOPS", IPV6_UNICAST_HOPS); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6330 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6331 /* Additional IPV6 socket options, defined in RFC 3493 */ |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6332 #ifdef IPV6_V6ONLY |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6333 PyModule_AddIntConstant(m, "IPV6_V6ONLY", IPV6_V6ONLY); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6334 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6335 /* Advanced IPV6 socket options, from RFC 3542 */ |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6336 #ifdef IPV6_CHECKSUM |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6337 PyModule_AddIntConstant(m, "IPV6_CHECKSUM", IPV6_CHECKSUM); |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6338 #endif |
|
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6339 #ifdef IPV6_DONTFRAG |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6340 PyModule_AddIntConstant(m, "IPV6_DONTFRAG", IPV6_DONTFRAG); |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6341 #endif |
|
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6342 #ifdef IPV6_DSTOPTS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6343 PyModule_AddIntConstant(m, "IPV6_DSTOPTS", IPV6_DSTOPTS); |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6344 #endif |
|
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6345 #ifdef IPV6_HOPLIMIT |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6346 PyModule_AddIntConstant(m, "IPV6_HOPLIMIT", IPV6_HOPLIMIT); |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6347 #endif |
|
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6348 #ifdef IPV6_HOPOPTS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6349 PyModule_AddIntConstant(m, "IPV6_HOPOPTS", IPV6_HOPOPTS); |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6350 #endif |
|
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6351 #ifdef IPV6_NEXTHOP |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6352 PyModule_AddIntConstant(m, "IPV6_NEXTHOP", IPV6_NEXTHOP); |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6353 #endif |
|
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6354 #ifdef IPV6_PATHMTU |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6355 PyModule_AddIntConstant(m, "IPV6_PATHMTU", IPV6_PATHMTU); |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6356 #endif |
|
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6357 #ifdef IPV6_PKTINFO |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6358 PyModule_AddIntConstant(m, "IPV6_PKTINFO", IPV6_PKTINFO); |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6359 #endif |
|
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6360 #ifdef IPV6_RECVDSTOPTS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6361 PyModule_AddIntConstant(m, "IPV6_RECVDSTOPTS", IPV6_RECVDSTOPTS); |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6362 #endif |
|
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6363 #ifdef IPV6_RECVHOPLIMIT |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6364 PyModule_AddIntConstant(m, "IPV6_RECVHOPLIMIT", IPV6_RECVHOPLIMIT); |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6365 #endif |
|
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6366 #ifdef IPV6_RECVHOPOPTS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6367 PyModule_AddIntConstant(m, "IPV6_RECVHOPOPTS", IPV6_RECVHOPOPTS); |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6368 #endif |
|
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6369 #ifdef IPV6_RECVPKTINFO |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6370 PyModule_AddIntConstant(m, "IPV6_RECVPKTINFO", IPV6_RECVPKTINFO); |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6371 #endif |
|
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6372 #ifdef IPV6_RECVRTHDR |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6373 PyModule_AddIntConstant(m, "IPV6_RECVRTHDR", IPV6_RECVRTHDR); |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6374 #endif |
|
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6375 #ifdef IPV6_RECVTCLASS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6376 PyModule_AddIntConstant(m, "IPV6_RECVTCLASS", IPV6_RECVTCLASS); |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6377 #endif |
|
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6378 #ifdef IPV6_RTHDR |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6379 PyModule_AddIntConstant(m, "IPV6_RTHDR", IPV6_RTHDR); |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6380 #endif |
|
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6381 #ifdef IPV6_RTHDRDSTOPTS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6382 PyModule_AddIntConstant(m, "IPV6_RTHDRDSTOPTS", IPV6_RTHDRDSTOPTS); |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6383 #endif |
|
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6384 #ifdef IPV6_RTHDR_TYPE_0 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6385 PyModule_AddIntConstant(m, "IPV6_RTHDR_TYPE_0", IPV6_RTHDR_TYPE_0); |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6386 #endif |
|
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6387 #ifdef IPV6_RECVPATHMTU |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6388 PyModule_AddIntConstant(m, "IPV6_RECVPATHMTU", IPV6_RECVPATHMTU); |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6389 #endif |
|
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6390 #ifdef IPV6_TCLASS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6391 PyModule_AddIntConstant(m, "IPV6_TCLASS", IPV6_TCLASS); |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6392 #endif |
|
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6393 #ifdef IPV6_USE_MIN_MTU |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6394 PyModule_AddIntConstant(m, "IPV6_USE_MIN_MTU", IPV6_USE_MIN_MTU); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6395 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6396 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6397 /* TCP options */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6398 #ifdef TCP_NODELAY |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6399 PyModule_AddIntConstant(m, "TCP_NODELAY", TCP_NODELAY); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6400 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6401 #ifdef TCP_MAXSEG |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6402 PyModule_AddIntConstant(m, "TCP_MAXSEG", TCP_MAXSEG); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6403 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6404 #ifdef TCP_CORK |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6405 PyModule_AddIntConstant(m, "TCP_CORK", TCP_CORK); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6406 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6407 #ifdef TCP_KEEPIDLE |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6408 PyModule_AddIntConstant(m, "TCP_KEEPIDLE", TCP_KEEPIDLE); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6409 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6410 #ifdef TCP_KEEPINTVL |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6411 PyModule_AddIntConstant(m, "TCP_KEEPINTVL", TCP_KEEPINTVL); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6412 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6413 #ifdef TCP_KEEPCNT |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6414 PyModule_AddIntConstant(m, "TCP_KEEPCNT", TCP_KEEPCNT); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6415 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6416 #ifdef TCP_SYNCNT |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6417 PyModule_AddIntConstant(m, "TCP_SYNCNT", TCP_SYNCNT); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6418 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6419 #ifdef TCP_LINGER2 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6420 PyModule_AddIntConstant(m, "TCP_LINGER2", TCP_LINGER2); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6421 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6422 #ifdef TCP_DEFER_ACCEPT |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6423 PyModule_AddIntConstant(m, "TCP_DEFER_ACCEPT", TCP_DEFER_ACCEPT); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6424 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6425 #ifdef TCP_WINDOW_CLAMP |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6426 PyModule_AddIntConstant(m, "TCP_WINDOW_CLAMP", TCP_WINDOW_CLAMP); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6427 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6428 #ifdef TCP_INFO |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6429 PyModule_AddIntConstant(m, "TCP_INFO", TCP_INFO); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6430 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6431 #ifdef TCP_QUICKACK |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6432 PyModule_AddIntConstant(m, "TCP_QUICKACK", TCP_QUICKACK); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6433 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6434 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6435 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6436 /* IPX options */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6437 #ifdef IPX_TYPE |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6438 PyModule_AddIntConstant(m, "IPX_TYPE", IPX_TYPE); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6439 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6440 |
|
73478
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6441 /* Reliable Datagram Sockets */ |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6442 #ifdef RDS_CMSG_RDMA_ARGS |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6443 PyModule_AddIntConstant(m, "RDS_CMSG_RDMA_ARGS", RDS_CMSG_RDMA_ARGS); |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6444 #endif |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6445 #ifdef RDS_CMSG_RDMA_DEST |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6446 PyModule_AddIntConstant(m, "RDS_CMSG_RDMA_DEST", RDS_CMSG_RDMA_DEST); |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6447 #endif |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6448 #ifdef RDS_CMSG_RDMA_MAP |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6449 PyModule_AddIntConstant(m, "RDS_CMSG_RDMA_MAP", RDS_CMSG_RDMA_MAP); |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6450 #endif |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6451 #ifdef RDS_CMSG_RDMA_STATUS |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6452 PyModule_AddIntConstant(m, "RDS_CMSG_RDMA_STATUS", RDS_CMSG_RDMA_STATUS); |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6453 #endif |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6454 #ifdef RDS_CMSG_RDMA_UPDATE |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6455 PyModule_AddIntConstant(m, "RDS_CMSG_RDMA_UPDATE", RDS_CMSG_RDMA_UPDATE); |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6456 #endif |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6457 #ifdef RDS_RDMA_READWRITE |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6458 PyModule_AddIntConstant(m, "RDS_RDMA_READWRITE", RDS_RDMA_READWRITE); |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6459 #endif |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6460 #ifdef RDS_RDMA_FENCE |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6461 PyModule_AddIntConstant(m, "RDS_RDMA_FENCE", RDS_RDMA_FENCE); |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6462 #endif |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6463 #ifdef RDS_RDMA_INVALIDATE |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6464 PyModule_AddIntConstant(m, "RDS_RDMA_INVALIDATE", RDS_RDMA_INVALIDATE); |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6465 #endif |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6466 #ifdef RDS_RDMA_USE_ONCE |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6467 PyModule_AddIntConstant(m, "RDS_RDMA_USE_ONCE", RDS_RDMA_USE_ONCE); |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6468 #endif |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6469 #ifdef RDS_RDMA_DONTWAIT |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6470 PyModule_AddIntConstant(m, "RDS_RDMA_DONTWAIT", RDS_RDMA_DONTWAIT); |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6471 #endif |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6472 #ifdef RDS_RDMA_NOTIFY_ME |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6473 PyModule_AddIntConstant(m, "RDS_RDMA_NOTIFY_ME", RDS_RDMA_NOTIFY_ME); |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6474 #endif |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6475 #ifdef RDS_RDMA_SILENT |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6476 PyModule_AddIntConstant(m, "RDS_RDMA_SILENT", RDS_RDMA_SILENT); |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6477 #endif |
|
2293ca739223
Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents:
73128
diff
changeset
|
6478 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6479 /* get{addr,name}info parameters */ |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6480 #ifdef EAI_ADDRFAMILY |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6481 PyModule_AddIntConstant(m, "EAI_ADDRFAMILY", EAI_ADDRFAMILY); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6482 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6483 #ifdef EAI_AGAIN |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6484 PyModule_AddIntConstant(m, "EAI_AGAIN", EAI_AGAIN); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6485 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6486 #ifdef EAI_BADFLAGS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6487 PyModule_AddIntConstant(m, "EAI_BADFLAGS", EAI_BADFLAGS); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6488 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6489 #ifdef EAI_FAIL |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6490 PyModule_AddIntConstant(m, "EAI_FAIL", EAI_FAIL); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6491 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6492 #ifdef EAI_FAMILY |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6493 PyModule_AddIntConstant(m, "EAI_FAMILY", EAI_FAMILY); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6494 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6495 #ifdef EAI_MEMORY |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6496 PyModule_AddIntConstant(m, "EAI_MEMORY", EAI_MEMORY); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6497 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6498 #ifdef EAI_NODATA |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6499 PyModule_AddIntConstant(m, "EAI_NODATA", EAI_NODATA); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6500 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6501 #ifdef EAI_NONAME |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6502 PyModule_AddIntConstant(m, "EAI_NONAME", EAI_NONAME); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6503 #endif |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6504 #ifdef EAI_OVERFLOW |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6505 PyModule_AddIntConstant(m, "EAI_OVERFLOW", EAI_OVERFLOW); |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6506 #endif |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6507 #ifdef EAI_SERVICE |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6508 PyModule_AddIntConstant(m, "EAI_SERVICE", EAI_SERVICE); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6509 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6510 #ifdef EAI_SOCKTYPE |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6511 PyModule_AddIntConstant(m, "EAI_SOCKTYPE", EAI_SOCKTYPE); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6512 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6513 #ifdef EAI_SYSTEM |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6514 PyModule_AddIntConstant(m, "EAI_SYSTEM", EAI_SYSTEM); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6515 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6516 #ifdef EAI_BADHINTS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6517 PyModule_AddIntConstant(m, "EAI_BADHINTS", EAI_BADHINTS); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6518 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6519 #ifdef EAI_PROTOCOL |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6520 PyModule_AddIntConstant(m, "EAI_PROTOCOL", EAI_PROTOCOL); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6521 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6522 #ifdef EAI_MAX |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6523 PyModule_AddIntConstant(m, "EAI_MAX", EAI_MAX); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6524 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6525 #ifdef AI_PASSIVE |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6526 PyModule_AddIntConstant(m, "AI_PASSIVE", AI_PASSIVE); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6527 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6528 #ifdef AI_CANONNAME |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6529 PyModule_AddIntConstant(m, "AI_CANONNAME", AI_CANONNAME); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6530 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6531 #ifdef AI_NUMERICHOST |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6532 PyModule_AddIntConstant(m, "AI_NUMERICHOST", AI_NUMERICHOST); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6533 #endif |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6534 #ifdef AI_NUMERICSERV |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6535 PyModule_AddIntConstant(m, "AI_NUMERICSERV", AI_NUMERICSERV); |
|
31274
24d34ab4ef75
Add IPV6_ socket options from RFCs 3493 and 3542. Fixes #867012.
Martin v. Löwis <martin@v.loewis.de>
parents:
31207
diff
changeset
|
6536 #endif |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6537 #ifdef AI_MASK |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6538 PyModule_AddIntConstant(m, "AI_MASK", AI_MASK); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6539 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6540 #ifdef AI_ALL |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6541 PyModule_AddIntConstant(m, "AI_ALL", AI_ALL); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6542 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6543 #ifdef AI_V4MAPPED_CFG |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6544 PyModule_AddIntConstant(m, "AI_V4MAPPED_CFG", AI_V4MAPPED_CFG); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6545 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6546 #ifdef AI_ADDRCONFIG |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6547 PyModule_AddIntConstant(m, "AI_ADDRCONFIG", AI_ADDRCONFIG); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6548 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6549 #ifdef AI_V4MAPPED |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6550 PyModule_AddIntConstant(m, "AI_V4MAPPED", AI_V4MAPPED); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6551 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6552 #ifdef AI_DEFAULT |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6553 PyModule_AddIntConstant(m, "AI_DEFAULT", AI_DEFAULT); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6554 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6555 #ifdef NI_MAXHOST |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6556 PyModule_AddIntConstant(m, "NI_MAXHOST", NI_MAXHOST); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6557 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6558 #ifdef NI_MAXSERV |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6559 PyModule_AddIntConstant(m, "NI_MAXSERV", NI_MAXSERV); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6560 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6561 #ifdef NI_NOFQDN |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6562 PyModule_AddIntConstant(m, "NI_NOFQDN", NI_NOFQDN); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6563 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6564 #ifdef NI_NUMERICHOST |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6565 PyModule_AddIntConstant(m, "NI_NUMERICHOST", NI_NUMERICHOST); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6566 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6567 #ifdef NI_NAMEREQD |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6568 PyModule_AddIntConstant(m, "NI_NAMEREQD", NI_NAMEREQD); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6569 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6570 #ifdef NI_NUMERICSERV |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6571 PyModule_AddIntConstant(m, "NI_NUMERICSERV", NI_NUMERICSERV); |
|
18794
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6572 #endif |
|
4d0ea4c2386d
Patch #401196: IPv6 extensions to the socket module.
Martin v. Löwis <martin@v.loewis.de>
parents:
18790
diff
changeset
|
6573 #ifdef NI_DGRAM |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6574 PyModule_AddIntConstant(m, "NI_DGRAM", NI_DGRAM); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6575 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6576 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6577 /* shutdown() parameters */ |
|
31027
bf038986cb8f
Patch #849595: Add socket.shutdown() constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
30978
diff
changeset
|
6578 #ifdef SHUT_RD |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6579 PyModule_AddIntConstant(m, "SHUT_RD", SHUT_RD); |
|
31027
bf038986cb8f
Patch #849595: Add socket.shutdown() constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
30978
diff
changeset
|
6580 #elif defined(SD_RECEIVE) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6581 PyModule_AddIntConstant(m, "SHUT_RD", SD_RECEIVE); |
|
31027
bf038986cb8f
Patch #849595: Add socket.shutdown() constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
30978
diff
changeset
|
6582 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6583 PyModule_AddIntConstant(m, "SHUT_RD", 0); |
|
31027
bf038986cb8f
Patch #849595: Add socket.shutdown() constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
30978
diff
changeset
|
6584 #endif |
|
bf038986cb8f
Patch #849595: Add socket.shutdown() constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
30978
diff
changeset
|
6585 #ifdef SHUT_WR |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6586 PyModule_AddIntConstant(m, "SHUT_WR", SHUT_WR); |
|
31027
bf038986cb8f
Patch #849595: Add socket.shutdown() constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
30978
diff
changeset
|
6587 #elif defined(SD_SEND) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6588 PyModule_AddIntConstant(m, "SHUT_WR", SD_SEND); |
|
31027
bf038986cb8f
Patch #849595: Add socket.shutdown() constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
30978
diff
changeset
|
6589 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6590 PyModule_AddIntConstant(m, "SHUT_WR", 1); |
|
31027
bf038986cb8f
Patch #849595: Add socket.shutdown() constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
30978
diff
changeset
|
6591 #endif |
|
bf038986cb8f
Patch #849595: Add socket.shutdown() constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
30978
diff
changeset
|
6592 #ifdef SHUT_RDWR |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6593 PyModule_AddIntConstant(m, "SHUT_RDWR", SHUT_RDWR); |
|
31027
bf038986cb8f
Patch #849595: Add socket.shutdown() constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
30978
diff
changeset
|
6594 #elif defined(SD_BOTH) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6595 PyModule_AddIntConstant(m, "SHUT_RDWR", SD_BOTH); |
|
31027
bf038986cb8f
Patch #849595: Add socket.shutdown() constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
30978
diff
changeset
|
6596 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6597 PyModule_AddIntConstant(m, "SHUT_RDWR", 2); |
|
31027
bf038986cb8f
Patch #849595: Add socket.shutdown() constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
30978
diff
changeset
|
6598 #endif |
|
bf038986cb8f
Patch #849595: Add socket.shutdown() constants.
Martin v. Löwis <martin@v.loewis.de>
parents:
30978
diff
changeset
|
6599 |
|
44535
420fe6d7d5f4
Merged revisions 59703-59773 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
6600 #ifdef SIO_RCVALL |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6601 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
6602 DWORD codes[] = {SIO_RCVALL, SIO_KEEPALIVE_VALS}; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
6603 const char *names[] = {"SIO_RCVALL", "SIO_KEEPALIVE_VALS"}; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
6604 int i; |
|
72510
b534b56379cb
Use the new Py_ARRAY_LENGTH macro
Victor Stinner <victor.stinner@haypocalc.com>
parents:
72117
diff
changeset
|
6605 for(i = 0; i<Py_ARRAY_LENGTH(codes); ++i) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
6606 PyObject *tmp; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
6607 tmp = PyLong_FromUnsignedLong(codes[i]); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
6608 if (tmp == NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
6609 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
6610 PyModule_AddObject(m, names[i], tmp); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61085
diff
changeset
|
6611 } |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6612 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6613 PyModule_AddIntConstant(m, "RCVALL_OFF", RCVALL_OFF); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6614 PyModule_AddIntConstant(m, "RCVALL_ON", RCVALL_ON); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6615 PyModule_AddIntConstant(m, "RCVALL_SOCKETLEVELONLY", RCVALL_SOCKETLEVELONLY); |
|
47663
92b79b6d1a3b
Slowly apply part of #2065: py3k can be compiled with VS8.0
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47583
diff
changeset
|
6616 #ifdef RCVALL_IPLEVEL |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6617 PyModule_AddIntConstant(m, "RCVALL_IPLEVEL", RCVALL_IPLEVEL); |
|
47663
92b79b6d1a3b
Slowly apply part of #2065: py3k can be compiled with VS8.0
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47583
diff
changeset
|
6618 #endif |
|
92b79b6d1a3b
Slowly apply part of #2065: py3k can be compiled with VS8.0
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47583
diff
changeset
|
6619 #ifdef RCVALL_MAX |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6620 PyModule_AddIntConstant(m, "RCVALL_MAX", RCVALL_MAX); |
|
47663
92b79b6d1a3b
Slowly apply part of #2065: py3k can be compiled with VS8.0
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47583
diff
changeset
|
6621 #endif |
|
44535
420fe6d7d5f4
Merged revisions 59703-59773 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
6622 #endif /* _MSTCPIP_ */ |
|
420fe6d7d5f4
Merged revisions 59703-59773 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
6623 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6624 /* Initialize gethostbyname lock */ |
|
29035
e1d5ca8ab7dc
[ 731644] & [ 604210 ] Release the GIL around getaddrinfo(), yet protect
Just van Rossum <just@letterror.com>
parents:
28953
diff
changeset
|
6625 #if defined(USE_GETHOSTBYNAME_LOCK) || defined(USE_GETADDRINFO_LOCK) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6626 netdb_lock = PyThread_allocate_lock(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6627 #endif |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6628 return m; |
| 294 | 6629 } |
|
18262
6b0a8157be3b
Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents:
18253
diff
changeset
|
6630 |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
6631 |
|
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
6632 #ifndef HAVE_INET_PTON |
|
43926
2de7d00fbf19
The patch from weck does a better job than my original idea. Thanks!
Christian Heimes <christian@cheimes.de>
parents:
43881
diff
changeset
|
6633 #if !defined(NTDDI_VERSION) || (NTDDI_VERSION < NTDDI_LONGHORN) |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
6634 |
|
18262
6b0a8157be3b
Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents:
18253
diff
changeset
|
6635 /* Simplistic emulation code for inet_pton that only works for IPv4 */ |
|
28818
57e61588571b
Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents:
28671
diff
changeset
|
6636 /* These are not exposed because they do not set errno properly */ |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
6637 |
|
23723
2f6f8708e3e9
Whitespace normalization, folding long lines, uniform comment
Guido van Rossum <guido@python.org>
parents:
23722
diff
changeset
|
6638 int |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
6639 inet_pton(int af, const char *src, void *dst) |
|
18262
6b0a8157be3b
Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents:
18253
diff
changeset
|
6640 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6641 if (af == AF_INET) { |
|
51579
648e07dd0825
Merged revisions 69364-69365,69409-69410,69413,69417,69435,69442,69447,69495,69519-69521 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
51384
diff
changeset
|
6642 #if (SIZEOF_INT != 4) |
|
648e07dd0825
Merged revisions 69364-69365,69409-69410,69413,69417,69435,69442,69447,69495,69519-69521 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
51384
diff
changeset
|
6643 #error "Not sure if in_addr_t exists and int is not 32-bits." |
|
648e07dd0825
Merged revisions 69364-69365,69409-69410,69413,69417,69435,69442,69447,69495,69519-69521 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
51384
diff
changeset
|
6644 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6645 unsigned int packed_addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6646 packed_addr = inet_addr(src); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6647 if (packed_addr == INADDR_NONE) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6648 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6649 memcpy(dst, &packed_addr, 4); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6650 return 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6651 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6652 /* Should set errno to EAFNOSUPPORT */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6653 return -1; |
|
18262
6b0a8157be3b
Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents:
18253
diff
changeset
|
6654 } |
|
6b0a8157be3b
Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents:
18253
diff
changeset
|
6655 |
|
18790
7cd22bf56d7b
Silence warnings in MSVC++: hide unused variables, add constness back to
Martin v. Löwis <martin@v.loewis.de>
parents:
18753
diff
changeset
|
6656 const char * |
|
7cd22bf56d7b
Silence warnings in MSVC++: hide unused variables, add constness back to
Martin v. Löwis <martin@v.loewis.de>
parents:
18753
diff
changeset
|
6657 inet_ntop(int af, const void *src, char *dst, socklen_t size) |
|
18262
6b0a8157be3b
Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents:
18253
diff
changeset
|
6658 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6659 if (af == AF_INET) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6660 struct in_addr packed_addr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6661 if (size < 16) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6662 /* Should set errno to ENOSPC. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6663 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6664 memcpy(&packed_addr, src, sizeof(packed_addr)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6665 return strncpy(dst, inet_ntoa(packed_addr), size); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6666 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6667 /* Should set errno to EAFNOSUPPORT */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61086
diff
changeset
|
6668 return NULL; |
|
18262
6b0a8157be3b
Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents:
18253
diff
changeset
|
6669 } |
|
23725
1235a95fedcd
Major cleanup. Renamed static methods to avoid Py prefix. Other misc
Guido van Rossum <guido@python.org>
parents:
23723
diff
changeset
|
6670 |
|
18262
6b0a8157be3b
Emulate inet_{pton,ntop} on systems that don't provide it.
Martin v. Löwis <martin@v.loewis.de>
parents:
18253
diff
changeset
|
6671 #endif |
| 43874 | 6672 #endif |
