mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +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} | ||||
| 
 | ||||
| \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 | ||||
| the last call to \method{setblocking()} or \method{settimeout()}. | ||||
| \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 | ||||
| \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} | ||||
| Set the value of the given socket option (see the \UNIX{} manual page | ||||
| \manpage{setsockopt}{2}).  The needed symbolic constants are defined in | ||||
|  |  | |||
|  | @ -183,6 +183,24 @@ def makefile(self, mode='r', bufsize=-1): | |||
|         and bufsize arguments are as for the built-in open() function.""" | ||||
|         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.__doc__ = _realsocket.%s.__doc__\n") | ||||
|     for _m in _socketmethods: | ||||
|  |  | |||
|  | @ -469,6 +469,14 @@ def testSendAfterClose(self): | |||
|         sock.close() | ||||
|         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): | ||||
| 
 | ||||
|     def __init__(self, methodName='runTest'): | ||||
|  |  | |||
|  | @ -291,6 +291,9 @@ Core and builtins | |||
| 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: | ||||
|     Para, addpack, cmp, cmpcache, codehack, dircmp, dump, find, fmt, grep, | ||||
|     lockfile, newdir, ni, packmail, poly, rand, statcache, tb, tzparse,  | ||||
|  |  | |||
|  | @ -62,6 +62,7 @@ Local naming conventions: | |||
| */ | ||||
| 
 | ||||
| #include "Python.h" | ||||
| #include "structmember.h" | ||||
| 
 | ||||
| #undef MAX | ||||
| #define MAX(x, y) ((x) < (y) ? (y) : (x)) | ||||
|  | @ -2502,6 +2503,14 @@ static PyMethodDef sock_methods[] = { | |||
| 	{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().
 | ||||
|    First close the file description. */ | ||||
|  | @ -2625,7 +2634,7 @@ static PyTypeObject sock_type = { | |||
| 	0,					/* tp_iter */ | ||||
| 	0,					/* tp_iternext */ | ||||
| 	sock_methods,				/* tp_methods */ | ||||
| 	0,					/* tp_members */ | ||||
| 	sock_memberlist,			/* tp_members */ | ||||
| 	0,					/* tp_getset */ | ||||
| 	0,					/* tp_base */ | ||||
| 	0,					/* tp_dict */ | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Georg Brandl
						Georg Brandl