title: How to make server accepting connections from multiple ports?
body: <p>How can I make a simple server(simple as in accepting a connection and print to terminal whatever is received) accept connection from multiple ports or a port range?</p>
  
  <p>Do I have to use multiple threads, one for each bind call. Or is there another solution?</p>
  
  <p>The simple server can look something like this.</p>
  
  <pre><code>def server():
  import sys, os, socket
  
  port = 11116
  host = ''
  backlog = 5 # Number of clients on wait.
  buf_size = 1024
  
  try:
      listening_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      listening_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) 
      listening_socket.bind((host, port)) 
      listening_socket.listen(backlog)
  except socket.error, (value, message):
      if listening_socket:
          listening_socket.close()
      print 'Could not open socket: ' + message
      sys.exit(1)
  
  while True:
      accepted_socket, adress = listening_socket.accept()
  
      data = accepted_socket.recv(buf_size)
      if data:
          accepted_socket.send('Hello, and goodbye.')
      accepted_socket.close()
  
  server()
  </code></pre>
  
  <p>EDIT:
  This is an example of how it can be done. Thanks everyone.</p>
  
  <pre><code>import socket, select
  
  def server():
  import sys, os, socket
  
  port_wan = 11111
  port_mob = 11112
  port_sat = 11113
  
  sock_lst = []
  host = ''
  backlog = 5 # Number of clients on wait.
  buf_size = 1024
  
  try:
      for item in port_wan, port_mob, port_sat:
          sock_lst.append(socket.socket(socket.AF_INET, socket.SOCK_STREAM))
          sock_lst[-1].setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) 
          sock_lst[-1].bind((host, item)) 
          sock_lst[-1].listen(backlog)
  except socket.error, (value, message):
      if sock_lst[-1]:
          sock_lst[-1].close()
          sock_lst = sock_lst[:-1]
      print 'Could not open socket: ' + message
      sys.exit(1)
  
  while True:
      read, write, error = select.select(sock_lst,[],[])
  
      for r in read:
          for item in sock_lst:
              if r == item:
                  accepted_socket, adress = item.accept()
  
                  print 'We have a connection with ', adress
                  data = accepted_socket.recv(buf_size)
                  if data:
                      print data
                      accepted_socket.send('Hello, and goodbye.')
                  accepted_socket.close()
  
  server()
  </code></pre>