Seite 1 von 1

dup2

Verfasst: Sonntag 19. Oktober 2003, 17:59
von gast
Hi ich hab folgenden code:

Code: Alles auswählen

srv=socket(AF_INET,SOCK_STREAM)
 srv.bind(("",12345))
srv.listen(1)
client = srv.accept()
os.dup2(client,0)
os.dup2(client,1)
os.dup2(client,2)
und er geht net weil dup2 eine int variable haben will, und client es nicht ist, aber was muss ich sonst fuer ein Variable übergeben ?

Verfasst: Sonntag 19. Oktober 2003, 18:35
von Dookie
Hi,

versuchs mal mit

Code: Alles auswählen

os.dup2(client[0].fileno(),0)
Ich habs nicht getestet, aber laut Beschreibung gibt socket.accept() ein tuple zurück, dessen erster Wert wieder ein socket ist, und mit der methode fileno() bekommst Du den filedescriptor dieses sockets.


Gruß

Dookie

Verfasst: Montag 20. Oktober 2003, 14:17
von guest
hab auch sowieso in der art versucht, aber python meint nur bad file descriptor :/

die variable client sieht so aus:

socket._socketobject object at 0x00904600, ('127.0.0.1', 1842))

das erste ist das socket object, dann die ip vom clienten der connected und der remot port.

Verfasst: Montag 20. Oktober 2003, 14:26
von geust
war verdreht mit os.dup2(0,client[0].fileno()) scheint zu gehen. danke :D

Verfasst: Dienstag 21. Oktober 2003, 12:21
von guest
hm wieso gehts umgekehrt ?

os.dup2(oldfd,newfd) # Duplicate oldfd to newfd

wenn fuer oldfd , 0 steht und fuer newd client[0].fileno() gehts, aber ich will ja den socket descriptor zu stdin machen. Dass alles was an stdin,sterror,stdut durch den socket geht. :(

Verfasst: Dienstag 21. Oktober 2003, 12:38
von Gast
mit 2.2 gehts mit python 2.3 nicht :?: