I've looked through the code you (finally) posted. I think at least part of the problem is that $Sock is not declared as shared and you will thus have problems with potential race conditions, at least as far as I understand the Perl threading model. I would restrict all communication within your program to Thread::Queues and have one (and only one) thread specialized to talking to the server and listening to replies. That is, I would turn your send_msg function into one that stuffs the message into a queue, and at the other end of that queue have a thread that does nothing but listen to that queue and forward the things to the server.

Ideally, no background process would do direct communication with the irc server, they would all deliver their results to the server thread which then handles the communication. You will need send rate limiting anyway so your bot does not get kicked off the server for flooding it.

Personally, I would look towards AnyEvent::IRC or any of the other IRC frameworks though.


In reply to Re^5: Thread weirdness by Corion
in thread Thread weirdness by j0nny

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.