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

Hi All, I wrote a perl script using SoapTransport.pm. When executed, the script listens to to a specific port and process any requests that comes there in. In linux, this script could not be executed in multiple instances as it throws an error as "Port Address already in use", which is the expected feature. But , in windows no such validations are done and multiple instances could be run simultaneously . Is this a feature/bug of Windows or SoapTransport module? Thanks, Bala.

Replies are listed 'Best First'.
Re: SoapTransport multiple instances
by BrowserUk (Patriarch) on Feb 19, 2013 at 06:09 UTC

    It looks like a problem with the module, because Windows detects and rejects attempts to bind to the same port twice.

    To try it for yourself, run a copy of the below in one console and then try to run it again in a second session with the same port number:

    #! perl -slw use strict; use IO::Socket; my $lsn = IO::Socket::INET->new( Listen => 1, LocalPort => $ARGV[0] ) or die $^E; while( my $client = $lsn->accept ) { close $client; }

    The second attempt will die with:

    C:\test>lsn 1025 Only one usage of each socket address (protocol/network address/port) +is normally permitted at C:\test\lsn.pl line 5.

    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      I am getting the error as "IO::Socket: Unknown error propagated in line4"; I ran the script as "perl socket.pl 25000". Does this notify the same ?
        I am getting the error as "IO::Socket: Unknown error propagated in line4";

        That error message did not come from the script I posted. (Line 4 is a blank line!)

        I ran the script as "perl socket.pl 25000". Does this notify the same ?;

        The port number will make no difference:

        C:\test>start /b lsn.pl 25000 C:\test>Running with pid:12100 C:\test>lsn.pl 25000 Running with pid:11664 Only one usage of each socket address (protocol/network address/port) +is normally permitted at C:\test\lsn.pl line 7. C:\test>taskkill /f /pid 12100 SUCCESS: The process with PID 12100 has been terminated.

        Code with line added to print pid:

        #! perl -slw use strict; use IO::Socket; print "Running with pid:$$"; my $lsn = IO::Socket::INET->new( Listen => 1, LocalPort => $ARGV[0] ) or die $^E; while( my $client = $lsn->accept ) { close $client; }

        With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.