socket.error: (9, 'Bad file descriptor')

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

socket.error: (9, 'Bad file descriptor')

Beitragvon Costi » Sonntag 24. Dezember 2006, 18:55

ho,ho, ho, wasn das fuer ein feherl, warum?


Code: Alles auswählen

Connected by ('127.0.0.1', 33264)
DEBUG eine action
Traceback (most recent call last):
  File "/home/hmm/Desktop/remin/main.py", line 136, in ?
    handleClient(conn, addr)
  File "/home/hmm/Desktop/remin/main.py", line 42, in handleClient
    resp =socket.recv(512)
  File "/usr/lib/python2.4/socket.py", line 136, in _dummy
    raise error(EBADF, 'Bad file descriptor')
socket.error: (9, 'Bad file descriptor')


und der code (noch eien baustelle):

Code: Alles auswählen

import socket
import cgi

class Season:
   def __init__(self):
      self.data = {}
   
   def get(self, varName):
      return self.data[varName]
   
   def set(self, varName, value):
      self.data[varname] = value
   
   def addDict(self, varname, value):
      self.data[varname].update(value)
   
   def addList(self, varname, value):
      self.data[varname].append(value)
   
   def rm(self, varName):
      del self.data[varname] #vieleicht anderes

class Utils:
   def check(self, dict, *keys):

      for key in keys:
         if not dict.has_key():
            return False
      return True
   
   def formatCmds(self, dict):
      retval = ""
      for key, val in dict.iteritems():
         retval+= "<br><br><center>---"+ key +"---</center><br>" + val
      return retval
      
         
   

def handleClient(socket, ip):
   resp =socket.recv(512)
   method, req, proto = resp.split(" ", 2)#vileicht auch 2
   #try:
   if method == "GET":
         try:
            query = req.split("?")[1]
         except:
            query = ""
   elif method == "POST":
      query = resp.split("\r\n\r\n")[1]
   #except.. . .er.b
   param = cgi.parse_qs(query)
   
   html = ""
   if param.has_key("action"):
      print "DEBUG eine action"
      action = param["action"]
      if not SEASONS.has_key(ip):
         socket.send("access denied!!!, login first")
         socket.close()
         return
      
      if action == "login":
         if not utils.check(param, "login", "pwd"):
            socket.send(utils.missingInputs())
            socket.close()
            return
         if param["login"] in users.keys() and users[param["login"]] == param["pwd"]:
            SEASONS.update({ip: Season()})
         else:
            html+= "false password or username"
      
      elif action == "cmd":
         
         if param.has_key(cmd):#noch clear implementieren
            cmdResp = os.system(cmd)#vieleicht anderes
            SEASON[ip].set({})
            SEASON[ip].addDict({cmd: cmdResp})
            
         
         html+= """
         <html>
         <body>
         
         <table height=100% width=100% border=3>
         <tr>
         <td>
         <form action="" method="get">
         cmd <input name="cmd" size="20">
         <input type="hidden" name="action" value="cmd">
         <input type="submit" value="r00t">
         </form>
         </td>
         <td>
         """ + utils.formatCmds(cmds) + """
         </td>
         </tr>
         </table>
         
         
         """
            
      elif action == "edit":
         pass
   else: #also keine action
      print "DEBUG keine action"
      html+= """
      <html>
      <body>

      <form action="" method="get">
      login: <input name="login" size="20"><br>
      password: <input name="pwd" type:password size="20"><br>
      <input type="hidden" name="action" value="login">
      <input type="submit" value="login">
      </form>

      </body>
      </html>
      """
   socket.send(html)   
   socket.close()#################
   
if __name__ == "__main__":
   global utils #ist gloabal noetig?
   utils = Utils()
   global SEASONS
   SEASONS = {} #ist gloabal noetig?
   s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   s.bind(("", 80))
   s.listen(10)
   conn, addr = s.accept()
   print 'Connected by', addr
   while 1:
      handleClient(conn, addr)
   conn.close()
   
print "test"
cp != mv
BlackJack

Beitragvon BlackJack » Sonntag 24. Dezember 2006, 19:36

Wie man an der DEBUG-Ausgabe sieht funktioniert die Funktion einmal. Am Ende schliesst Du die Verbindung und beim nächsten Aufruf versuchst Du etwas über eine geschlossene Verbindung zu empfangen.
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Beitragvon Costi » Sonntag 24. Dezember 2006, 21:01

ahhh, stimmt, thx
mein while 1 steht an der falschen stelle
cp != mv

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]