Sometimes, you need to manipulate the default values of certain properties of a socket library, for example, the socket timeout.
Setting and getting the default socket timeout
How to do it...
You can make an instance of a socket object and call a gettimeout() method to get the default timeout value and the settimeout() method to set a specific timeout value. This is very useful in developing custom server applications.
We first create a socket object inside a test_socket_timeout() function. Then, we can use the getter/setter instance methods to manipulate timeout values.
Listing 1.6 shows socket_timeout as follows:
#!/usr/bin/env python # Python Network Programming Cookbook, Second Edition -- Chapter - 1 # This program is optimized for Python 2.7.12 and Python 3.5.2. # It may run on any other version with/without modifications. import socket def test_socket_timeout(): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print ("Default socket timeout: %s" %s.gettimeout()) s.settimeout(100) print ("Current socket timeout: %s" %s.gettimeout()) if __name__ == '__main__': test_socket_timeout()
After running the preceding script, you can see how this modifies the default socket timeout as follows:
$ python 1_6_socket_timeout.py Default socket timeout: None Current socket timeout: 100.0
How it works...
In this code snippet, we have first created a socket object by passing the socket family and socket type as the first and second arguments of the socket constructor. Then, you can get the socket timeout value by calling gettimeout() and alter the value by calling the settimeout() method. The timeout value passed to the settimeout() method can be in seconds (non-negative float) or None. This method is used for manipulating the blocking-socket operations. Setting a timeout of None disables timeouts on socket operations.