OverRatedProgrammer
OverRatedProgrammer

Reputation: 59

Python Socket Error "Only one usage of each socket address is normally permitted"

I have a basic server and client that prints a message on the server when a client connects, and then prints a message on the client saying "Thanks for connecting." But when I try to run the server again(after closing it), I get "error: Only one usage of each socket address is normally permitted"(Not exact). And when I change the port again it works.

#Server 
import socket               

s = socket.socket()         
host = socket.gethostname() 
port = 12345             
s.bind((host, port))        

s.listen(5)                 
while True:
   c, addr = s.accept()    
   print 'Got connection from', addr
   c.send('Thank you for connecting')
   c.close()

.

#Client 
import socket               

s = socket.socket()         
host = socket.gethostname() 
port = 12345              

s.connect((host, port))
print s.recv(1024)
s.close  

If I change the last two lines of code for the server to

    break
c.close()

it works but closes the server.

How can I keep the server up after the client disconnects without having to change the port each time?

Upvotes: 0

Views: 4963

Answers (1)

James Mills
James Mills

Reputation: 19030

You want to set the socket option SO_REUSEADDR:

Example:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)

Upvotes: 1

Related Questions