Skip to content

Commit 7a03d33

Browse files
Address review comments
Restore the AF_INET default family of socketpair() on platforms which do not define AF_UNIX, and the note about os.close() and os.dup() in the docstrings of close() and dup(). Remove the preprocessor guards around the METHODDEF macros of the functions generated by Argument Clinic: such macro is empty if the function is not compiled.
1 parent 7dc1de3 commit 7a03d33

2 files changed

Lines changed: 33 additions & 29 deletions

File tree

Modules/clinic/socketmodule.c.h

Lines changed: 12 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Modules/socketmodule.c

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -692,6 +692,14 @@ class _socket.socket "PySocketSockObject *" "clinic_state()->sock_type"
692692
# undef HAVE_SETHOSTNAME
693693
#endif
694694

695+
/* The default family of socketpair() is AF_UNIX if defined on the
696+
platform; otherwise, the default is AF_INET. */
697+
#if defined(AF_UNIX)
698+
# define SOCKETPAIR_DEFAULT_FAMILY AF_UNIX
699+
#else
700+
# define SOCKETPAIR_DEFAULT_FAMILY AF_INET
701+
#endif
702+
695703
#define clinic_state() (find_module_state_by_def(type))
696704
#include "clinic/socketmodule.c.h"
697705
#undef clinic_state
@@ -5482,25 +5490,15 @@ _socket_socket_share_impl(PySocketSockObject *s, unsigned int processId)
54825490
/* List of methods for socket objects */
54835491

54845492
static PyMethodDef sock_methods[] = {
5485-
#if defined(HAVE_ACCEPT) || defined(HAVE_ACCEPT4)
54865493
_SOCKET_SOCKET__ACCEPT_METHODDEF
5487-
#endif
5488-
#ifdef HAVE_BIND
54895494
_SOCKET_SOCKET_BIND_METHODDEF
5490-
#endif
54915495
_SOCKET_SOCKET_CLOSE_METHODDEF
5492-
#ifdef HAVE_CONNECT
54935496
_SOCKET_SOCKET_CONNECT_METHODDEF
54945497
_SOCKET_SOCKET_CONNECT_EX_METHODDEF
5495-
#endif
54965498
_SOCKET_SOCKET_DETACH_METHODDEF
54975499
_SOCKET_SOCKET_FILENO_METHODDEF
5498-
#ifdef HAVE_GETPEERNAME
54995500
_SOCKET_SOCKET_GETPEERNAME_METHODDEF
5500-
#endif
5501-
#ifdef HAVE_GETSOCKNAME
55025501
_SOCKET_SOCKET_GETSOCKNAME_METHODDEF
5503-
#endif
55045502
_SOCKET_SOCKET_GETSOCKOPT_METHODDEF
55055503
#if defined(MS_WINDOWS) && defined(SIO_RCVALL)
55065504
{"ioctl", sock_ioctl, METH_VARARGS, sock_ioctl_doc},
@@ -5523,9 +5521,7 @@ static PyMethodDef sock_methods[] = {
55235521
#ifdef HAVE_SETSOCKOPT
55245522
{"setsockopt", sock_setsockopt, METH_VARARGS, setsockopt_doc},
55255523
#endif
5526-
#ifdef HAVE_SHUTDOWN
55275524
_SOCKET_SOCKET_SHUTDOWN_METHODDEF
5528-
#endif
55295525
_SOCKET_SOCKET_RECVMSG_METHODDEF
55305526
_SOCKET_SOCKET_RECVMSG_INTO_METHODDEF
55315527
_SOCKET_SOCKET_SENDMSG_METHODDEF
@@ -6551,11 +6547,14 @@ _socket.close
65516547
/
65526548
65536549
Close a socket fd.
6550+
6551+
This is like os.close(), but for sockets; on some platforms os.close()
6552+
won't work for socket file descriptors.
65546553
[clinic start generated code]*/
65556554

65566555
static PyObject *
65576556
_socket_close(PyObject *module, PyObject *fdobj)
6558-
/*[clinic end generated code: output=1d62092e6fc365dc input=3928558b90299147]*/
6557+
/*[clinic end generated code: output=1d62092e6fc365dc input=b9fc18380117ee4b]*/
65596558
{
65606559
SOCKET_T fd;
65616560
int res;
@@ -6586,12 +6585,14 @@ _socket.dup
65866585
65876586
Duplicate a socket descriptor.
65886587
6589-
The new descriptor is non-inheritable.
6588+
The new descriptor is non-inheritable. This is like os.dup(), but for
6589+
sockets; on some platforms os.dup() won't work for socket file
6590+
descriptors.
65906591
[clinic start generated code]*/
65916592

65926593
static PyObject *
65936594
_socket_dup(PyObject *module, PyObject *fdobj)
6594-
/*[clinic end generated code: output=7e9c4485cf5a76c0 input=dfc5de188bf696ef]*/
6595+
/*[clinic end generated code: output=7e9c4485cf5a76c0 input=d1d74c320feb3d04]*/
65956596
{
65966597
SOCKET_T fd, newfd;
65976598
PyObject *newfdobj;
@@ -6647,20 +6648,22 @@ _socket_dup(PyObject *module, PyObject *fdobj)
66476648
/*[clinic input]
66486649
_socket.socketpair
66496650
6650-
family: int(c_default="AF_UNIX") = AF_UNIX
6651+
family: int(c_default="SOCKETPAIR_DEFAULT_FAMILY") = AF_UNIX
66516652
type: int(c_default="SOCK_STREAM") = SOCK_STREAM
66526653
proto: int = 0
66536654
/
66546655
66556656
Create a pair of connected socket objects.
66566657
66576658
The sockets are returned by the platform socketpair() function. The
6658-
arguments are the same as for socket().
6659+
arguments are the same as for socket(), except that the default
6660+
family is AF_UNIX if defined on the platform; otherwise, the default
6661+
is AF_INET.
66596662
[clinic start generated code]*/
66606663

66616664
static PyObject *
66626665
_socket_socketpair_impl(PyObject *module, int family, int type, int proto)
6663-
/*[clinic end generated code: output=c012ae1f558bb0ca input=823902632e78e181]*/
6666+
/*[clinic end generated code: output=c012ae1f558bb0ca input=59695511a31a2d52]*/
66646667
{
66656668
PySocketSockObject *s0 = NULL, *s1 = NULL;
66666669
SOCKET_T sv[2];
@@ -7532,17 +7535,13 @@ static PyMethodDef socket_methods[] = {
75327535
_SOCKET_GETHOSTBYNAME_METHODDEF
75337536
_SOCKET_GETHOSTBYNAME_EX_METHODDEF
75347537
_SOCKET_GETHOSTBYADDR_METHODDEF
7535-
#ifdef HAVE_GETHOSTNAME
75367538
_SOCKET_GETHOSTNAME_METHODDEF
7537-
#endif
75387539
_SOCKET_SETHOSTNAME_METHODDEF
75397540
_SOCKET_GETSERVBYNAME_METHODDEF
75407541
_SOCKET_GETSERVBYPORT_METHODDEF
75417542
_SOCKET_GETPROTOBYNAME_METHODDEF
75427543
_SOCKET_CLOSE_METHODDEF
7543-
#ifndef NO_DUP
75447544
_SOCKET_DUP_METHODDEF
7545-
#endif
75467545
_SOCKET_SOCKETPAIR_METHODDEF
75477546
_SOCKET_NTOHS_METHODDEF
75487547
_SOCKET_NTOHL_METHODDEF
@@ -7556,11 +7555,9 @@ static PyMethodDef socket_methods[] = {
75567555
_SOCKET_GETNAMEINFO_METHODDEF
75577556
_SOCKET_GETDEFAULTTIMEOUT_METHODDEF
75587557
_SOCKET_SETDEFAULTTIMEOUT_METHODDEF
7559-
#if defined(HAVE_IF_NAMEINDEX) || defined(MS_WINDOWS)
75607558
_SOCKET_IF_NAMEINDEX_METHODDEF
75617559
_SOCKET_IF_NAMETOINDEX_METHODDEF
75627560
_SOCKET_IF_INDEXTONAME_METHODDEF
7563-
#endif
75647561
_SOCKET_CMSG_LEN_METHODDEF
75657562
_SOCKET_CMSG_SPACE_METHODDEF
75667563
{NULL, NULL} /* Sentinel */

0 commit comments

Comments
 (0)