As a Python developer, you may encounter the `socket.error: [Errno 99] Cannot assign requested address` error when working with sockets. Don't worry; this guide is here to help you fix this issue. We'll go through the reasons behind this error and provide a step-by-step solution. ## Table of Contents - [Understanding the Error](#understanding-the-error) - [Reasons Behind the Error](#reasons-behind-the-error) - [Step-by-Step Solution](#step-by-step-solution) - [FAQ](#faq) - [Related Links](#related-links) ## Understanding the Error The `Cannot assign requested address` error occurs when the Python socket library fails to bind a socket to the requested IP address and port number. This error is represented by the error number `Errno 99`. Here's an example of code that might trigger this error: ```python import socket HOST = '192.168.1.100' # Example IP address PORT = 8080 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((HOST, PORT)) s.listen(1)
In this example, if the IP address
192.168.1.100 is not configured on the system or the port
8080 is already in use, you'll encounter the
Errno 99 error.
Reasons Behind the Error
There are a few common reasons why you might encounter the
Errno 99 error:
- Invalid IP address: The IP address you're trying to bind the socket to is invalid or not configured on the system.
- Port already in use: The port number you're trying to use is already in use by another process or service.
- Restricted port range: You might be trying to bind the socket to a port number in the restricted (reserved) range.
To fix the
Errno 99 error, follow these steps:
Verify the IP address: Ensure that the IP address you're binding the socket to is valid and configured on your system. You can use the
ifconfig command on Linux or
ipconfig on Windows to check the available IP addresses.
Check the port number: Ensure that the port number you're trying to use is available and not in use by another process. You can use the
netstat command to check the active connections and their port numbers.
Use a different port number: If the port number is already in use or restricted, try using a different port number.
Use the wildcard address: If you want to bind the socket to all available network interfaces, use the wildcard address
0.0.0.0 instead of a specific IP address.
Allow address reuse: If you face the error because of a recently closed socket still using the port, set the
SO_REUSEADDR socket option to allow reusing the address:
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
1. What does the wildcard address
The wildcard address
0.0.0.0 allows a socket to listen on all available network interfaces. When you bind a socket to
0.0.0.0, it will accept connections from any IP address.
2. What is the
SO_REUSEADDR socket option?
SO_REUSEADDR socket option allows a socket to reuse an address that is still in the
TIME_WAIT state after being closed. This can help avoid the
Errno 99 error when a socket is closed and immediately reopened on the same address and port.
3. Why is my socket still using the port after closing?
When a socket is closed, it might still use the port for a short period due to the
TIME_WAIT state. The
TIME_WAIT state ensures that any delayed packets are received and processed before the port is reused.
4. How can I check if a port is already in use?
You can use the
netstat command on your system to check the active connections and their port numbers. For example, on Linux, you can run
netstat -tuln to display the listening TCP and UDP sockets.
5. What is the restricted (reserved) port range?
The restricted (reserved) port range includes port numbers from 1 to 1023. These ports are reserved for well-known services and should not be used for custom applications.