mirror of
https://github.com/python/cpython.git
synced 2025-07-30 14:44:10 +00:00
RFE #567972: Socket objects' family, type and proto properties are
now exposed via new get...() methods.
This commit is contained in:
parent
5c170fd4a9
commit
bc45a3f821
5 changed files with 55 additions and 2 deletions
|
@ -626,7 +626,7 @@ timeouts on socket operations.
|
||||||
\end{methoddesc}
|
\end{methoddesc}
|
||||||
|
|
||||||
\begin{methoddesc}[socket]{gettimeout}{}
|
\begin{methoddesc}[socket]{gettimeout}{}
|
||||||
Returns the timeout in floating seconds associated with socket
|
Return the timeout in floating seconds associated with socket
|
||||||
operations, or \code{None} if no timeout is set. This reflects
|
operations, or \code{None} if no timeout is set. This reflects
|
||||||
the last call to \method{setblocking()} or \method{settimeout()}.
|
the last call to \method{setblocking()} or \method{settimeout()}.
|
||||||
\versionadded{2.3}
|
\versionadded{2.3}
|
||||||
|
@ -654,6 +654,21 @@ Note that the \method{connect()} operation is subject to the timeout
|
||||||
setting, and in general it is recommended to call
|
setting, and in general it is recommended to call
|
||||||
\method{settimeout()} before calling \method{connect()}.
|
\method{settimeout()} before calling \method{connect()}.
|
||||||
|
|
||||||
|
\begin{methoddesc}[socket]{getfamily}{}
|
||||||
|
Return the socket family, as given to the \class{socket} constructor.
|
||||||
|
\versionadded{2.5}
|
||||||
|
\end{methoddesc}
|
||||||
|
|
||||||
|
\begin{methoddesc}[socket]{gettype}{}
|
||||||
|
Return the socket type, as given to the \class{socket} constructor.
|
||||||
|
\versionadded{2.5}
|
||||||
|
\end{methoddesc}
|
||||||
|
|
||||||
|
\begin{methoddesc}[socket]{getproto}{}
|
||||||
|
Return the socket protocol, as given to the \class{socket} constructor.
|
||||||
|
\versionadded{2.5}
|
||||||
|
\end{methoddesc}
|
||||||
|
|
||||||
\begin{methoddesc}[socket]{setsockopt}{level, optname, value}
|
\begin{methoddesc}[socket]{setsockopt}{level, optname, value}
|
||||||
Set the value of the given socket option (see the \UNIX{} manual page
|
Set the value of the given socket option (see the \UNIX{} manual page
|
||||||
\manpage{setsockopt}{2}). The needed symbolic constants are defined in
|
\manpage{setsockopt}{2}). The needed symbolic constants are defined in
|
||||||
|
|
|
@ -183,6 +183,24 @@ class _socketobject(object):
|
||||||
and bufsize arguments are as for the built-in open() function."""
|
and bufsize arguments are as for the built-in open() function."""
|
||||||
return _fileobject(self._sock, mode, bufsize)
|
return _fileobject(self._sock, mode, bufsize)
|
||||||
|
|
||||||
|
def getfamily(self):
|
||||||
|
"""getfamily() -> socket family
|
||||||
|
|
||||||
|
Return the socket family."""
|
||||||
|
return self._sock.family
|
||||||
|
|
||||||
|
def gettype(self):
|
||||||
|
"""gettype() -> socket type
|
||||||
|
|
||||||
|
Return the socket type."""
|
||||||
|
return self._sock.type
|
||||||
|
|
||||||
|
def getproto(self):
|
||||||
|
"""getproto() -> socket protocol
|
||||||
|
|
||||||
|
Return the socket protocol."""
|
||||||
|
return self._sock.proto
|
||||||
|
|
||||||
_s = ("def %s(self, *args): return self._sock.%s(*args)\n\n"
|
_s = ("def %s(self, *args): return self._sock.%s(*args)\n\n"
|
||||||
"%s.__doc__ = _realsocket.%s.__doc__\n")
|
"%s.__doc__ = _realsocket.%s.__doc__\n")
|
||||||
for _m in _socketmethods:
|
for _m in _socketmethods:
|
||||||
|
|
|
@ -469,6 +469,14 @@ class GeneralModuleTests(unittest.TestCase):
|
||||||
sock.close()
|
sock.close()
|
||||||
self.assertRaises(socket.error, sock.send, "spam")
|
self.assertRaises(socket.error, sock.send, "spam")
|
||||||
|
|
||||||
|
def testNewGetMethods(self):
|
||||||
|
# testing getfamily(), gettype() and getprotocol()
|
||||||
|
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
self.assertEqual(sock.getfamily(), socket.AF_INET)
|
||||||
|
self.assertEqual(sock.gettype(), socket.SOCK_STREAM)
|
||||||
|
self.assertEqual(sock.getproto(), 0)
|
||||||
|
sock.close()
|
||||||
|
|
||||||
class BasicTCPTest(SocketConnectedTest):
|
class BasicTCPTest(SocketConnectedTest):
|
||||||
|
|
||||||
def __init__(self, methodName='runTest'):
|
def __init__(self, methodName='runTest'):
|
||||||
|
|
|
@ -291,6 +291,9 @@ Core and builtins
|
||||||
Extension Modules
|
Extension Modules
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- RFE #567972: Socket objects' family, type and proto properties are
|
||||||
|
now exposed via new get...() methods.
|
||||||
|
|
||||||
- Everything under lib-old was removed. This includes the following modules:
|
- Everything under lib-old was removed. This includes the following modules:
|
||||||
Para, addpack, cmp, cmpcache, codehack, dircmp, dump, find, fmt, grep,
|
Para, addpack, cmp, cmpcache, codehack, dircmp, dump, find, fmt, grep,
|
||||||
lockfile, newdir, ni, packmail, poly, rand, statcache, tb, tzparse,
|
lockfile, newdir, ni, packmail, poly, rand, statcache, tb, tzparse,
|
||||||
|
|
|
@ -62,6 +62,7 @@ Local naming conventions:
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "Python.h"
|
#include "Python.h"
|
||||||
|
#include "structmember.h"
|
||||||
|
|
||||||
#undef MAX
|
#undef MAX
|
||||||
#define MAX(x, y) ((x) < (y) ? (y) : (x))
|
#define MAX(x, y) ((x) < (y) ? (y) : (x))
|
||||||
|
@ -2502,6 +2503,14 @@ static PyMethodDef sock_methods[] = {
|
||||||
{NULL, NULL} /* sentinel */
|
{NULL, NULL} /* sentinel */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* SockObject members */
|
||||||
|
static PyMemberDef sock_memberlist[] = {
|
||||||
|
{"family", T_INT, offsetof(PySocketSockObject, sock_family), READONLY, "the socket family"},
|
||||||
|
{"type", T_INT, offsetof(PySocketSockObject, sock_type), READONLY, "the socket type"},
|
||||||
|
{"proto", T_INT, offsetof(PySocketSockObject, sock_proto), READONLY, "the socket protocol"},
|
||||||
|
{"timeout", T_DOUBLE, offsetof(PySocketSockObject, sock_timeout), READONLY, "the socket timeout"},
|
||||||
|
{0},
|
||||||
|
};
|
||||||
|
|
||||||
/* Deallocate a socket object in response to the last Py_DECREF().
|
/* Deallocate a socket object in response to the last Py_DECREF().
|
||||||
First close the file description. */
|
First close the file description. */
|
||||||
|
@ -2625,7 +2634,7 @@ static PyTypeObject sock_type = {
|
||||||
0, /* tp_iter */
|
0, /* tp_iter */
|
||||||
0, /* tp_iternext */
|
0, /* tp_iternext */
|
||||||
sock_methods, /* tp_methods */
|
sock_methods, /* tp_methods */
|
||||||
0, /* tp_members */
|
sock_memberlist, /* tp_members */
|
||||||
0, /* tp_getset */
|
0, /* tp_getset */
|
||||||
0, /* tp_base */
|
0, /* tp_base */
|
||||||
0, /* tp_dict */
|
0, /* tp_dict */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue