# How to maintain a single network connection? (newbie)

**URL:** <https://www.ruby-forum.com/t/how-to-maintain-a-single-network-connection-newbie/123217>\
**Category:** Ruby\
**Created:** [December 14, 2007, 11:52pm UTC](https://www.ruby-forum.com/t/how-to-maintain-a-single-network-connection-newbie/123217 "2007-12-14T23:52:20Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![curious\_george](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/b487fb/32.png) [@curious\_george](https://www.ruby-forum.com/u/curious_george)\
**Post date:** [December 14, 2007, 11:52pm UTC](https://www.ruby-forum.com/t/how-to-maintain-a-single-network-connection-newbie/123217/1 "2007-12-14T23:52:20Z")

</div>

Hi, I am a beginner to Ruby, having come over from the Java side of  
things. I am writing a simple script to familiarize myself with the  
Net-SSH and Net-SFTP libraries. I want to split my script into several  
different functions to improve readability and organization.

However, I’m having difficulty doing this. When I create an SSH  
connection, the connection automatically dies after I exit the function.  
How can I keep this connection alive? I tried storing the connection as  
a global variable but it did not work - the connection still closed.

## Here is a portion of my script. When I run it, I call “testAll”. It fails on the first line of sftpTest1A:

$session = nil

def sftpTest1  
puts “Testing sftp…”  
$session= Net::SSH.start( ‘127.0.0.1’, :username=\>‘user’,  
:password=\>‘password’ )  
sftp = $session.sftp.connect  
handle = sftp.opendir( “.” )  
items = sftp.readdir(handle)  
puts items  
sftp.close\_handle( handle )  
sftp.close  
#At this point, session should still be open, correct?  
end

def sftpTest1A  
shell = $session.shell.open #FAILS at this line!

shell.pwd

print shell.stdout while shell.stdout?  
$stderr.puts “-- stderr: --”  
$stderr.print shell.stderr while shell.stderr?

$session.close

end

def testAll  
sftpTest1  
sftpTest1A  
end

---

<div class="post-metadata">

**Author:** ![curious\_george](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/b487fb/32.png) [@curious\_george](https://www.ruby-forum.com/u/curious_george)\
**Post date:** [December 15, 2007, 12:10am UTC](https://www.ruby-forum.com/t/how-to-maintain-a-single-network-connection-newbie/123217/2 "2007-12-15T00:10:47Z")

</div>

Hi Fenster,

I suspect it is the sftp.close stanza that is causing the problem. Try  
removing that, what happens?

Also, I would recommend using the block form of Net::SSH.start if you  
can. That is

Net::SSH.start(…) do |session|  
#do all your work here, pass the session to your methods  
end

Johnny P

---

<div class="post-metadata">

**Author:** ![curious\_george](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/b487fb/32.png) [@curious\_george](https://www.ruby-forum.com/u/curious_george)\
**Post date:** [December 15, 2007, 4:31am UTC](https://www.ruby-forum.com/t/how-to-maintain-a-single-network-connection-newbie/123217/3 "2007-12-15T04:31:12Z")

</div>

Thanks for the reply. Unfortunately, that didn’t work.

However, I did end up solving the issue - after taking a break and  
thinking about it away from the computer. The proper way to approach the  
issue was to utilize a class.

I should have created an instance variable for the connection in a  
separate Server class. In this way, I can keep a connection alive as  
long as a Server object is alive.

I ran into difficulties when I approached the problem like a Visual  
Basic script… all’s better now!

John P. wrote:

> Hi Fenster,
> 
> I suspect it is the sftp.close stanza that is causing the problem. Try  
> removing that, what happens?
> 
> Also, I would recommend using the block form of Net::SSH.start if you  
> can. That is
> 
> Net::SSH.start(…) do |session|  
> #do all your work here, pass the session to your methods  
> end
> 
> Johnny P
