http://www.perlmonks.org?node_id=1017679

Wiggins has asked for the wisdom of the Perl Monks concerning the following question:

Monks; I have been away for some time on a forced excile to the land of Python; but have returned to the fold.

I am in need of guidance for the following. I am trying to use only core packages. I have taken the Msg.pm from "Advanced Perl Programming" (vol 1) and have grafted in a 'workproc' mechanism ala Xwindows. Now I need to be able to handle UDP packetes in the event loop as well as TCP. I am hoping someone has done that and would be willing to share.

There are some portions of the code I don't understand. The use of a data structure 'g-pkg'; and the following

#New Server my ($pkg, $proto, $my_host, $my_port, $login_proc) = @_; and sub set_event_handler { shift unless ref($_[0]); # shift if first arg is package name my ($handle, %args) = @_;
The 1st looks like all new_server call are always OO,
but set_event_handler() may or may not be associated with an Object

====Update:========================
As I continue to look at this (Msg.pm) code, the more I see what seems to be a single connection only functionality.

sub _new_client { my $sock = $main_socket;
That is picking a '$sock' value from a global scalar ($main_socket) that is set only from
$main_socket = IO::Socket::INET->new (
which is the last socket created. I am thinking that this may not be suited for multiple simultanious connections. If you look at 'g_login_proc', it is also a global singleton which is overwritten with each new call to 'new_server'.

So what are the recommendations for a robust communication and event dispatcher? (low learning curve is appreciated.

It is always better to have seen your target for yourself, rather than depend upon someone else's description.

Replies are listed 'Best First'.
Re: Msg.pm + UDP
by kcott (Archbishop) on Feb 07, 2013 at 18:52 UTC

    G'day Wiggins,

    This book was printed about 16 years ago and, as such, is now rather dated. Perl 5.4 was the current version around that time (see perlhist for specifics).

    I had a quick scan through Chapter 13 (I assume that's what you're referring to) but neither g-pkg nor #New Server ... leapt out at me. Could you reference their page numbers and also give some indication of what you're having trouble understanding.

    I did find the code for set_event_handler() (page 214). Most of the examples of its usage (e.g. connect(), disconnect(), send_later()) do not have a package name as the first argument. However, on page 205, you will find the call:

    Msg->set_event_handler(\*STDIN, "read" => \&kbd_input);

    I'm not sure if that helps. Again, some indication of what you're having trouble understanding would help in providing a better answer.

    -- Ken

      Pieces of the code are in chapter 12 (Networking with Sockets), but the entire module that I am working with is in:
      ftp://ftp.oreilly.com/published/orielly/nutshell/advanved_perl/examples.tar.gz

      It is always better to have seen your target for yourself, rather than depend upon someone else's description.