Hi Daniel,
in theory you need not share the $SOCK, you can just use it in your threads, if 
you have declared it before starting them. However, this does not work on 
windows (at least in my experiments) with IO::Socket. You have to dig out the 
plain sockets, which work (with some caveats) in a threaded env.
 
If this is the way you would go, I may give you some further hints. If you need 
to stick to IO::Socket, this will not help you.
 
Dietmar

        -----Ursprüngliche Nachricht----- 
        Von: Daniel McBrearty [mailto:[EMAIL PROTECTED] 
        Gesendet: Fr 27.10.2006 11:59 
        An: perl-win32-users@listserv.activestate.com 
        Cc: 
        Betreff: sharing access to a socket
        
        

        Hi
        
        I have an app I'm writing which runs as a background process,
        communicating with the main app over a localhost socket. It's a little
        server.
        
        the basic code looks like this:
        
        <SNIP>
        my $SOCK;
        
        my $sock = new IO::Socket::INET ....
        
        $SOCK = $sock.accept();
        
        while (1) {
          my $line;
        
          while ($line = <$SOCK>) {
            # process line ...
        
            sockout($response);
          }
        }
        
        sub sockout{ print $SOCK shift.$CRLF; }
        <?SNIP>
        
        and this works fine.
        
        Now I want to run a thread inside this app that sends back info
        regularly. It needs to run in a seperate thread, and be startable and
        stoppable, which I have working. I don't care if the responses from
        the main thread and the reporter thread lines are mixed up ... ie
        
        OK
        report : 27
        OK
        Ok
        report : 89
        
        
        is fine.
        
        So I try these changes ... :
        
        my $SOCK :shared;
        .
        .
        .
        sub sockout {
          my $r = shift;
          lock ($SOCK);
          print $SOCK $r.$CRLF;
        }
        
        and just call sockout from the reporter thread. But I get this error:
        "Invalid value for shared scalar"  when it hits $SOCK =
        $sock.accept(); ... and I can see why in the threads::shared docs
        
        so my q is : how do I share access to the socket between threads in
        the simplest way?
        
        thanks perlers!
        
        --
        Daniel McBrearty
        email : danielmcbrearty at gmail.com
        www.engoi.com : the multi - language vocab trainer
        BTW : 0873928131
        _______________________________________________
        Perl-Win32-Users mailing list
        Perl-Win32-Users@listserv.ActiveState.com
        To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs
        

_______________________________________________
Perl-Win32-Users mailing list
Perl-Win32-Users@listserv.ActiveState.com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to