Re: Sockets and threading
En Sun, 12 Jul 2009 16:16:29 -0300, zayatzz alan.kesselm...@gmail.com escribió: while 1: k = self.myclntsock.recv(1) if k == : break srvr.vlock.acquire() srvr.v += k srvr.vlock.release() self.myclntsock.send(srvr.v) self.myclntsock.close() Instead of sendint back i get this error : File server3.py, line 31, in serveclient k = self.myclntsock.recv(1) File /usr/lib/python2.6/socket.py, line 165, in _dummy raise error(EBADF, 'Bad file descriptor') socket.error: [Errno 9] Bad file descriptor As much as i understand this line 31 is supposed to recieve stuff from clients and has buffer size 1. I dont understand what this has to do with file descriptor.. whatever that is anyway. That means the clntsock variable isn't an open, available socket. Note that you close the socket right after sending the response - are you sure you don't have an indentation error there? -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list
Re: Sockets and threading
zayatzz alan.kesselm...@gmail.com (z) wrote: z Im trying to get aquinted to python on bit more basic level and am z following socket and threading programming tutorials from these 2 z addresses : z http://heather.cs.ucdavis.edu/~matloff/Python/PyNet.pdf z http://heather.cs.ucdavis.edu/~matloff/Python/PyThreads.pdf z in this PyThreads file he sets up threaded server app which listens to z what clients send to it and echos it back to clients while adding sent z info into one string. z The problem is that the code does not work for me. z class srvr(threading.Thread): z v = z vlock = threading.Lock() z id = 0 z def __init__(self,clntsock): z threading.Thread.__init__(self) z self.myid = srvr.id z srvr.id += 1 z self.myclntsock = clntsock z def run(self): z while 1: z k = self.myclntsock.recv(1) z if k == : break z srvr.vlock.acquire() z srvr.v += k z srvr.vlock.release() z self.myclntsock.send(srvr.v) z self.myclntsock.close() The last line is wrongly indented. It should be outside the loop. Shift it left so that it lines up with the while. What happens now is that the socket is closed after the first recv(). Then the next round in the loop fails because the myclntsock is closed. -- Piet van Oostrum p...@cs.uu.nl URL: http://pietvanoostrum.com [PGP 8DAE142BE17999C4] Private email: p...@vanoostrum.org -- http://mail.python.org/mailman/listinfo/python-list