OSError: [Errno 9] Bad file descriptor in python 3

33,387

When there is a OIError, you're calling serverSocket.close(). But when you re-enter in the while loop, you call serverSocket.accept() without call serverSocket=socket(AF_INET,SOCK_STREAM), and this fails, because you've called the close()

See this post

Hope help

PD: django developers don't use socket regularly. =)

Share:
33,387
Admin
Author by

Admin

Updated on July 23, 2021

Comments

  • Admin
    Admin almost 3 years

    I'm a beginning/intermediate level programmer currently trying to write a simple web server in Python 3. However, whenever I run the module I get OSError: [Errno 9] Bad file descriptor. I've scoured the internet looking for answers, but I can't seem to figure this one out on my own. Here is the code and traceback:

    #import socket module
    
    from socket import *
    
    serverSocket=socket(AF_INET,SOCK_STREAM)
    
    #Prepare a server socket
    
    serverSocket.bind(('IP address', 8000))
    serverSocket.listen(1)
    
    while True:
    #Establish the connection
    
     print('Ready to serve...')
    
     (connectionSocket, addr) = serverSocket.accept()
    
     print ('connected from',addr)
    
     try:
    
    
          message=connectionSocket.recv(1024)
          filename=message.split()[1]
          print (filename)
    
          filename=message.split()[1]
    
          f=open(filename[1:])
    
          outputdata=f.read()
    
     #Send one HTTP header line into socket
    
          connectionSocket.send('HTTP/1.1 200 OK')
    
     #Send the content of the requested file to the client
    
          for i in range(0, len(outputdata)):
               connectionSocket.send(outputdata[i])
               connectionSocket.close()
     except IOError as err:
          print ('IO error')
    
    
               #Send response message for file not found
    
          connectionSocket.send(b'file not found')
    
                    #Close client socket
          connectionSocket.close()
          serverSocket.close()
    

    Traceback:

    Traceback (most recent call last):
      File "/Users/BigRed/Desktop/SOS/webServer.py", line 17, in <module>
        (connectionSocket, addr) = serverSocket.accept()
      File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/socket.py", line       184, in accept
    fd, addr = self._accept()
    OSError: [Errno 9] Bad file descriptor