~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/sftp.py

merge bzr.dev.revno.1905

Show diffs side-by-side

added added

removed removed

Lines of Context:
831
831
                                      % (self._host, self._port, e))
832
832
            self._sftp = SFTPClient(LoopbackSFTP(sock))
833
833
        elif vendor != 'none':
834
 
            sock = SFTPSubprocess(self._host, vendor, self._port,
835
 
                                  self._username)
836
 
            self._sftp = SFTPClient(sock)
 
834
            try:
 
835
                sock = SFTPSubprocess(self._host, vendor, self._port,
 
836
                                      self._username)
 
837
                self._sftp = SFTPClient(sock)
 
838
            except (EOFError, paramiko.SSHException), e:
 
839
                raise ConnectionError('Unable to connect to SSH host %s:%s: %s'
 
840
                                      % (self._host, self._port, e))
 
841
            except (OSError, IOError), e:
 
842
                # If the machine is fast enough, ssh can actually exit
 
843
                # before we try and send it the sftp request, which
 
844
                # raises a Broken Pipe
 
845
                if e.errno not in (errno.EPIPE,):
 
846
                    raise
 
847
                raise ConnectionError('Unable to connect to SSH host %s:%s: %s'
 
848
                                      % (self._host, self._port, e))
837
849
        else:
838
850
            self._paramiko_connect()
839
851
 
848
860
            t = paramiko.Transport((self._host, self._port or 22))
849
861
            t.set_log_channel('bzr.paramiko')
850
862
            t.start_client()
851
 
        except paramiko.SSHException, e:
 
863
        except (paramiko.SSHException, socket.error), e:
852
864
            raise ConnectionError('Unable to reach SSH host %s:%s: %s' 
853
865
                                  % (self._host, self._port, e))
854
866
            
1117
1129
 
1118
1130
    def get_bogus_url(self):
1119
1131
        """See bzrlib.transport.Server.get_bogus_url."""
1120
 
        # this is chosen to try to prevent trouble with proxies, wierd dns,
1121
 
        # etc
1122
 
        return 'sftp://127.0.0.1:1/'
1123
 
 
 
1132
        # this is chosen to try to prevent trouble with proxies, wierd dns, etc
 
1133
        # we bind a random socket, so that we get a guaranteed unused port
 
1134
        # we just never listen on that port
 
1135
        s = socket.socket()
 
1136
        s.bind(('localhost', 0))
 
1137
        return 'sftp://%s:%s/' % s.getsockname()
1124
1138
 
1125
1139
 
1126
1140
class SFTPFullAbsoluteServer(SFTPServer):