The last time I answered this question, it was for a COBOL application running an HP3000 Image database application, but the principle for a pre-forking server is the same. Here was my response.

My approach is this

Have the application start, and open a listen socket

The application forks to create N children. They thus inherit the listening socket.

The children run like this:

initialize--open files, databases send message to parent that we initialized correctly while (1) { (optional) inform parent we are available accept on listen sock (optional) inform parent we are busy read data process transaction send response }
The parent just monitors the children for unexpected death. It can start a new server if one dies or if the number of available servers falls below some threshold.

There are a few little details, like how to shut down, making sure you don't get into a loop of restarting a crashing server, etc.

Your initialization would consist of opening the Telnet connection. The "process transaction" would consist of sending the query to the process's open Telnet session, getting the response and sending data back to the connection.


In reply to Re: Passing client information between multiple sockets... by Thelonius
in thread Passing client information between multiple sockets... by rlb3

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.