Tasks cannot be reordered. Lets look at something like this
  1. Start processing/new transaction
  2. Get message from spool(requires contacting remote spool)
  3. verify signature (requires contacting remote keyservers)
  4. uncompress/convert/split
  5. Send required files(remote...)
  6. Request additional parts(remote..)
  7. End transaction

Or, better yet, think of pop3 client,

  1. Authenticate
  2. Get list of new mails
  3. Get mail body (repeat) ...

Imagine what happens when you implement it like this:

auth(); @uidls=getuidls(); foreach $uidl (@uidls) { fork || getmail($uidl); };

getting back to my original problem, you can easily put timeout protection inside getuidl and getmail, but what you created is either instant DOS against your provider, and yourself (try that code with 1000s of mails to download..).

Not to mention that now you have to devise a clever way for generating for example unique filename for every mail you're downloading and few similar headaches.

Of course if you're trying to write reasonable code, and use just one connection for downloading those mails, you need to devise a clever scheme of locking and passing socket fd around to your children etc...


In reply to Re^2: Splitting one large timeout into few smaller ones.. by Eyck
in thread Splitting one large timeout into few smaller ones.. by Eyck

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.