Skip to content

Socket is closed raised on Connection.put() after Connection.close() Connection.open() called #1981

Description

@AlexanderBodnya

Might be related to Connection.sftp():

If called more than one time, memorizes the first result;

Code to reproduce

import fabric


conn = fabric.Connection(host="{}@{}".format('root', ''), connect_kwargs={"password": ''})
conn.put('./1.txt')
conn.close()
conn.open()
conn.put('./1.txt')

Traceback:

---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
<ipython-input-6-64e29c4aa4e9> in <module>
----> 1 conn.put('./1.txt')

~/venv36/lib/python3.6/site-packages/fabric/connection.py in put(self, *args, **kwargs)
    765         .. versionadded:: 2.0
    766         """
--> 767         return Transfer(self).put(*args, **kwargs)
    768
    769     # TODO: yield the socket for advanced users? Other advanced use cases

~/venv36/lib/python3.6/site-packages/fabric/transfer.py in put(self, local, remote, preserve_mode)
    231         prejoined_remote = remote
    232         remote = posixpath.join(
--> 233             self.sftp.getcwd() or self.sftp.normalize("."), remote
    234         )
    235         if remote != prejoined_remote:

~/venv36/lib/python3.6/site-packages/paramiko/sftp_client.py in normalize(self, path)
    630         path = self._adjust_cwd(path)
    631         self._log(DEBUG, "normalize({!r})".format(path))
--> 632         t, msg = self._request(CMD_REALPATH, path)
    633         if t != CMD_NAME:
    634             raise SFTPError("Expected name response")

~/venv36/lib/python3.6/site-packages/paramiko/sftp_client.py in _request(self, t, *arg)
    810
    811     def _request(self, t, *arg):
--> 812         num = self._async_request(type(None), t, *arg)
    813         return self._read_response(num)
    814

~/venv36/lib/python3.6/site-packages/paramiko/sftp_client.py in _async_request(self, fileobj, t, *arg)
    835         finally:
    836             self._lock.release()
--> 837         self._send_packet(t, msg)
    838         return num
    839

~/venv36/lib/python3.6/site-packages/paramiko/sftp.py in _send_packet(self, t, packet)
    196         if self.ultra_debug:
    197             self._log(DEBUG, util.format_binary(out, "OUT: "))
--> 198         self._write_all(out)
    199
    200     def _read_packet(self):

~/venv36/lib/python3.6/site-packages/paramiko/sftp.py in _write_all(self, out)
    160     def _write_all(self, out):
    161         while len(out) > 0:
--> 162             n = self.sock.send(out)
    163             if n <= 0:
    164                 raise EOFError()

~/venv36/lib/python3.6/site-packages/paramiko/channel.py in send(self, s)
    799         m.add_byte(cMSG_CHANNEL_DATA)
    800         m.add_int(self.remote_chanid)
--> 801         return self._send(s, m)
    802
    803     def send_stderr(self, s):

~/venv36/lib/python3.6/site-packages/paramiko/channel.py in _send(self, s, m)
   1178                 # this doesn't seem useful, but it is the documented behavior
   1179                 # of Socket
-> 1180                 raise socket.error("Socket is closed")
   1181             size = self._wait_for_send_window(size)
   1182             if size == 0:

OSError: Socket is closed

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions