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. =)
Author by
Admin
Updated on July 23, 2021Comments
-
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