Re: Sockets and threading

2009-07-12 Thread Gabriel Genellina

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

2009-07-12 Thread Piet van Oostrum
 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