Bind failed: Address already in use

前端 未结 7 1888
慢半拍i
慢半拍i 2020-11-30 21:39

I am attempting to bind a socket to a port below:

if( bind(socket_desc,(struct sockaddr *) &server, sizeof(server)) < 0)
{
    perror(\"bind failed.         


        
相关标签:
7条回答
  • 2020-11-30 21:44

    I was also facing that problem, but I resolved it. Make sure that both the programs for client-side and server-side are on different projects in your IDE, in my case NetBeans. Then assuming you're using localhost, I recommend you to implement both the programs as two different projects.

    0 讨论(0)
  • 2020-11-30 21:45

    As mentioned above the port is in use already. This could be due to several reasons

    1. some other application is already using it.
    2. The port is in close_wait state when your program is waiting for the other end to close the program.refer (https://unix.stackexchange.com/questions/10106/orphaned-connections-in-close-wait-state).
    3. The program might be in time_wait state. you can wait or use socket option SO_REUSEADDR as mentioned in another post.

    Do netstat -a | grep <portno> to check the port state.

    0 讨论(0)
  • 2020-11-30 21:48

    Everyone is correct. However, if you're also busy testing your code your own application might still "own" the socket if it starts and stops relatively quickly. Try SO_REUSEADDR as a socket option:

    What exactly does SO_REUSEADDR do?

    This socket option tells the kernel that even if this port is busy (in the TIME_WAIT state), go ahead and reuse it anyway. If it is busy, but with another state, you will still get an address already in use error. It is useful if your server has been shut down, and then restarted right away while sockets are still active on its port. You should be aware that if any unexpected data comes in, it may confuse your server, but while this is possible, it is not likely.

    It has been pointed out that "A socket is a 5 tuple (proto, local addr, local port, remote addr, remote port). SO_REUSEADDR just says that you can reuse local addresses. The 5 tuple still must be unique!" by Michael Hunter (mphunter@qnx.com). This is true, and this is why it is very unlikely that unexpected data will ever be seen by your server. The danger is that such a 5 tuple is still floating around on the net, and while it is bouncing around, a new connection from the same client, on the same system, happens to get the same remote port. This is explained by Richard Stevens in ``2.7 Please explain the TIME_WAIT state.''.

    0 讨论(0)
  • 2020-11-30 21:49

    You have a process that is already using that port. netstat -tulpn will enable one to find the process ID of that is using a particular port.

    0 讨论(0)
  • 2020-11-30 21:49

    Address already in use means that the port you are trying to allocate for your current execution is already occupied/allocated to some other process.

    If you are a developer and if you are working on an application which require lots of testing, you might have an instance of your same application running in background (may be you forgot to stop it properly)

    So if you encounter this error, just see which application/process is using the port.

    In linux try using netstat -tulpn. This command will list down a process list with all running processes.

    Check if an application is using your port. If that application or process is another important one then you might want to use another port which is not used by any process/application.

    Anyway you can stop the process which uses your port and let your application take it.

    If you are in linux environment try,

    • Use netstat -tulpn to display the processes
    • kill <pid> This will terminate the process

    If you are using windows,

    • Use netstat -a -o -n to check for the port usages
    • Use taskkill /F /PID <pid> to kill that process
    0 讨论(0)
  • 2020-11-30 21:51

    It also happens when you have not give enough permissions(read and write) to your sock file!

    Just add expected permission to your sock contained folder and your sock file:

     chmod ug+rw /path/to/your/
     chmod ug+rw /path/to/your/file.sock
    

    Then have fun!

    0 讨论(0)
提交回复
热议问题