Ultimate Guide to Fixing Socket.error: [Errno 99] Cannot Assign Requested Address Issue in Python


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:

import socket

HOST = ''  # Example IP address
PORT = 8080

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))

In this example, if the IP address 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:

  1. Invalid IP address: The IP address you're trying to bind the socket to is invalid or not configured on the system.
  2. Port already in use: The port number you're trying to use is already in use by another process or service.
  3. Restricted port range: You might be trying to bind the socket to a port number in the restricted (reserved) range.

Step-by-Step Solution

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 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 do?

The wildcard address allows a socket to listen on all available network interfaces. When you bind a socket to, it will accept connections from any IP address.

2. What is the SO_REUSEADDR socket option?

The 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.


Great! You’ve successfully signed up.

Welcome back! You've successfully signed in.

You've successfully subscribed to Lxadm.com.

Success! Check your email for magic link to sign-in.

Success! Your billing info has been updated.

Your billing was not updated.