@@ -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
54845492static 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
65536549Close 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
65566555static 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
65876586Duplicate 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
65926593static 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
66556656Create a pair of connected socket objects.
66566657
66576658The 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
66616664static 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