On Fri, Oct 7, 2011 at 7:31 PM, Paul M. <pmacdonald / gmail.com> wrote: > I will obviously mail the ruby list as well, but on the off chance > someone here might be able to help, > > (I'm a ruby newbie) > > i have a simple ruby mgmt program listening on a network port, ¨Âèéãè > accepts commands and does appropriate stuff, > > however restarted services weirdly seem to hold the port of the process, > > One of the things it does is to restart system services > <ruby code> > system "/usr/local/etc/rc.d/proftpd start" > > sockstat -4 -l then shows that the proftpd process is tied to the > listening port of the ruby program/daemon. > (It does the same when not running daemonised). > > > nobody proftpd 0996 1 ¨Âã𪺲± ºª > nobody proftpd 0885 3 ¨ÂãðÛèïóôÉÐݺ¸´´ ºª > root ruby 30826 3 ¨ÂãðÛèïóôÉÐݺ¸´´ ºª > > This doesn't affect the running of the ftp server or the ruby daemon, > but it means that i need to restart the various other daemons to release > the 844 socket. > > can anyone help? Basically the solution is to close all file handles that you do not want the child process to inherit. One way to achieve that is to fork either for every accepted connection or immediately before invoking other programs. Example server = TcpServer.new 1234 while (child = server.accept) fork do # close fds server.close # do whatever child.puts "I do not hold on to the server port any more!" system "echo", "me neither" end end The daemons gem might also help. http://daemons.rubyforge.org/ With that you can daemonize the current process: http://daemons.rubyforge.org/classes/Daemons.html#M000007 Although, when I look at the source code contained in the docs it seems like it will close your socket connection... Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/