errno 107 socket.recv issue

Jean-Michel Pichavant jeanmichel at sequans.com
Tue Feb 9 10:48:39 EST 2010


Jordan Apgar wrote:
> I found my car ;)
>
> here's the server:
>
> class commServer:
>     """Class to hold a tcp server and interact with with it
>     allows for a wrapper around socket class to keep code clean"""
>
>     def __init__ (self, host, hostid, port, buff =1024):
>         self.host = host
>         self.hostid = hostid #id of the server
>         self.port = port
>         self.buffer = buff
>         self.socket = socket.socket(socket.AF_INET,
> socket.SOCK_STREAM)
>         self.conn = None
>         self.addr = None
>
>     def bindServ(self):
>         """Connect to the server specified by self.host, self.port"""
>         self.socket.bind((self.host, self.port))
>     def closeConn(self):
>         """Disconnect from the server connected to"""
>         self.conn.close()
>     def listen(self):
>         self.socket.listen(1)
>     def accept(self):
>         self.conn, self.addr = self.socket.accept()
>
>     #lets you send a string msg to the server
>     def sendMSG(self, msg):
>         self.conn.send(msg)
>     #lets you receive data from the server
>     def recvMSG(self):
>         msg = self.socket.recv(self.buffer)
>         if msg == "": #if the client disconnected let's not throw
>             return False
>         else:
>             return msg
>
>
> class Negotiator:
>     """Negotiator for the server handles all communication with the
> client to
>     verify the server and prepare the file the client wants for
> download"""
>     def __init__(self, host, hostid, port, rsa_key):
>         self.server = commServer(host,hostid,port)
>
>     def Negotiate(self):
>         self.server.bindServ()
>         self.server.listen()
>         self.server.accept()
>
>         #Plan on being asked for server confirmation
>         clmsg = self.server.recvMSG()  # it fails right here on the
> server
>
>
> calling the Server Negotiator as:
> host = "127.0.0.1"
> port = 8005
> HOSTID = a string
> key = an RSA key
> servernegotiator = Negotiator(host,HostID, port, key)
> if servernegotiator.Negotiate() == False:
>     print "something went wrong"
> print "Done"
>
>
>
> for the client it is:
> class commClient:
>     """Class to hold a tcp client and interact with with it
>     allows for a wrapper around socket class to keep code clean"""
>
>     def __init__ (self, host, hostid, port, buff =1024):
>         self.host = host
>         self.hostid = hostid #id of the server
>         self.port = port
>         self.buffer = buff
>         self.socket = socket.socket(socket.AF_INET,
> socket.SOCK_STREAM)
>
>     def connectServ(self):
>         """Connect to the server specified by self.host, self.port"""
>         self.socket.connect((self.host, self.port))
>     def disconnServ(self):
>         """Disconnect from the server connected to"""
>         self.socket.close()
>
>     #lets you send a string msg to the server
>     def sendMSG(self, msg):
>         self.socket.send(msg)
>     #lets you receive data from the server
>     def recvMSG(self):
>         msg = self.socket.recv(self.buffer)
>         if msg == "": #if the server disconnected let's not throw
> something later
>             return False
>         else:
>             return msg
>
>
>
> class Negotiator:
>     """The Negotiator handles all communications and message handling
>     necessary for verifying the server, and that the file is available
> to
>     download"""
>     def __init__(self, host, hostid, port, rsa_key):
>         """client should be a commClient object that has not been
> connected
>         to the server."""
>         self.client = commClient(host, hostid, port)
>         self.clientKey = rsa_key
>         self.serverKey = None
>         self.CScipher = None #AES cipher for client -> server
>         self.SCcipher = None #AES cipher for server -> client
>         self.CShalves = None #tuple for random halves by client
>         self.SChalves = None #tuple for random halves by server
>         self.file = None
>
>
>     def Negotiate(self, fname):
>         """Contact the server, verify the server,
>         negotiates for a file to be downloaded by the client.  It
> returns
>         the file name to be downloaded, and the cipher to decrypt
> it."""
>
>         self.client.connectServ()
>         print "connected"
>
>         #tell the server you want to connect
>         clmsg = message(CONN, (self.client.getHost(),
>                                self.client.getHostID())) #message acts
> as a wrapper around a message type and the data for the type
>         self.client.sendMSG(clmsg.getSendable())    # here is were it
> fails
>
> the Negotiator is called as:
> host = "127.0.0.1"
> port = 8005
> HOSTID is the same string as before
> key is an RSA key
> clientnegotiator = Negotiator(host, HostID, port, key)
> filename = clientnegotiator.Negotiate("hostid")
>
> the stack traces are:
> Server side:
> Traceback (most recent call last):
>   File "Server.py", line 17, in <module>
>     if servernegotiator.Negotiate() == False:
>   File "/home/twistedphrame/Desktop/communication/
> ServerNegotiator.py", line 184, in Negotiate
>     clmsg = self.server.recvMSG()
>   File "/home/twistedphrame/Desktop/communication/
> ServerNegotiator.py", line 67, in recvMSG
>     msg = self.socket.recv(self.buffer)
> socket.error: [Errno 107] Transport endpoint is not connected
>
> Client Side:
>  File "Client.py", line 17, in <module>
>     filename = clientnegotiator.Negotiate("hostid")
>   File "/home/twistedphrame/Desktop/communication/
> ClientNegotiator.py", line 209, in Negotiate
>     srvmsg = self.client.recvMSG()
>   File "/home/twistedphrame/Desktop/communication/
> ClientNegotiator.py", line 55, in recvMSG
>     msg = self.socket.recv(self.buffer)
> socket.error: [Errno 104] Connection reset by peer
>
>
>   
http://docs.python.org/library/socketserver.html

JM



More information about the Python-list mailing list