title: python socket.error: [Errno 9] Bad file descriptor
body: <p>I wanted to make a server and a client with Python.
  It was supposed to make multiple connections, one, where the server is sending something to the client, and one where the client is sending something to the server.</p>
  
  <p>The first connection worked fine, but the second one crashed with the message:</p>
  
  <pre><code>socket.error: [Errno 9] Bad file descriptor
  </code></pre>
  
  <p>Here is the Server:</p>
  
  <pre><code>import socket
  import errno
  import pickle
  
  def Main():
      host = '188.174.233.99'
      port = 66666
  
      all_text = ['text1', 'text2', 'text3']
  
      all_description = ['Test \n Description1\n', 'Test \n Description1\n', 'Test \n Description1\n']
  
      all_images = ['unlock.png', 'unlock.png', 'unlock.png']
      s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)
      s.bind((host, port))
      s.listen(1)
  
  
      while True:
  
          c, addr = s.accept()
          c.setblocking(0)
  
          print "Connection from: " + str(addr)
  
  
          command = c.recv(1024)
  
          if command == 'GIVEALL':
              textstring = pickle.dumps([all_text, all_images, all_description])#verwandelt Liste in String
              c.send(textstring)
  
  
  
          else:
              try:
                  new_event = pickle.loads(command)
                  print new_event
                  caption = new_event[0]
                  image = new_event[1]
                  describtion = new_event[2]
                  city = new_event[3]
  
              except:
                  pass
  
          try:
              c.close()
  
              s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
          except socket.error as e:
              if e.errno != errno.ECONNRESET:
                  raise
              pass
  
  if __name__ == '__main__':
      Main()
  </code></pre>
  
  <p>And here is the Client:</p>
  
  <p>import socket
  import pickle</p>
  
  <pre><code>from kivy.properties import StringProperty
  from kivy.properties import NumericProperty
  from kivy.properties import ListProperty
  
  class Netclient(object):
  
      def __init__(self):
          self.s = socket.socket()
          self.texte = []
          self.current = 'All'
  
          self.ip = '188.174.233.99'
          self.port = 66666
  
      def giveWid(self):
          print 'give Widgets executed'
          if self.current == 'All':
              self.texte, self.images, self.description = self.sentHOT(self.ip, self.port)
  
          return self.texte, self.images, self.description
  
      def sentHOT(self, host, port):
  
          self.s.connect((host, port))
          self.s.send('GIVEALL')#sends command
  
          recived_string = self.s.recv(1023)
  
          more_text = pickle.loads(recived_string)#verwandelt string in liste
  
          self.s.close()
          print 'closed'
          return more_text[0], more_text[1], more_text[2]
  
  
      def add_event(self, caption, image, description, city='Pawonkow'):
          new_event = [caption, image, description, city]
          new_compact_event = pickle.dumps(new_event)
  
          self.s.connect((self.ip, self.port))
          self.s.send(new_compact_event)
  
          self.s.close()
  
  
      n = Netclient()
      t, i, d = n.giveWid()
      print t
      n.add_event('new', 'new.png', 'ew event', 'Hanau')
  </code></pre>