Thread dual stack modell (12 answers)
Opened by enzo at 2011-07-16 16:24

MatthiasW
 2011-07-17 12:29
#150477 #150477
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
Nun, du musst auf den beiden unterschiedlichen Adressen ::1 für IPv6 und 127.0.0.1 für IPv4 lauschen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/usr/bin/perl

use 5.010;
use strict;
use warnings;
use IO::Socket::INET6;

my $pid = fork;

die "error: cannot fork!\n" unless defined $pid; # edit

my $server = IO::Socket::INET6->new(
    LocalAddr => $pid ? '127.0.0.1' : '::1',
    LocalPort => 20_000,
    Listen    => 5,
    Proto     => 'tcp',
    ReuseAddr => 1,
) or die "error creating socket: $@\n";

while (my $client = $server->accept) {
    chomp(my $request = <$client>);

    if ($request =~ /^quit|exit|bye/) {
        print $client "exiting\n";
        close $client;
        exit; # es wird nur der beendet, mit dem verbunden wurde. nicht beide
    }

    print $client (scalar reverse $request), "\n";
    close $client;
}

Und man kann es wohl auch noch so machen (wie der sshd in deinem Beispiel):
Code (perl): (dl )
1
2
3
4
5
6
7
my $server = IO::Socket::INET6->new(
    LocalAddr => '::', # <--
    LocalPort => 20_000,
    Listen    => 5,
    Proto     => 'tcp',
    ReuseAddr => 1,
) or die "error creating socket: $@\n";

Hat das eigentlich irgendwelche Nachteile?

MfG
Last edited: 2011-07-17 14:01:34 +0200 (CEST)
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'

View full thread dual stack modell