Perl Any Event::Ping 코드 분석

3072 단어
아버지를 괴롭히는 코로.협정으로 아버지를 괴롭히려면 스스로 고쳐야 한다.순식간에 미치다.
다음과 같이 모듈 코드를 연구했습니다.
sub tcp_ping_syn {
    my $host = shift;
    my $port = shift;
    my $timeout = shift || 5;

    if ((++$PingQueue{$host}{$port}{Requests}) > 1) {
        # Ping already underway...
        return;
    }    
    
    my $cv = AnyEvent->condvar;
    my $startTime;
    my $endTime;
    
    $PingQueue{$host}{$port}{CondVar} = $cv;
    
    tcp_connect $host, $port, sub {
         $endTime = time;
        my ($fh) = @_;
         
        $cv->send(( $fh ? (($endTime - $startTime) * 1000) : undef ));
    },
    sub {
        $startTime = time;
        $timeout;
    };
        
    return undef;
}

니 사이즈.되돌아오는 값이 아예 없다.그럼 얘는 뭐하는거야...==#순간 놀라 멍해졌다.
앞에 니트 깔개가 있는데 어쩔 수 없으니 계속 괴롭혀야 한다.보아하니 ACK만 되돌아오는 값이 있습니다.구체적으로 다음과 같다.
sub tcp_ping_ack {
    my $host = shift;
    my $port = shift;
            
    if ($PingQueue{$host}{$port}{Requests} < 1) {
        # No outstanding requests...
        return undef;
    }    

    my $latency = $PingQueue{$host}{$port}{CondVar}->recv;
    
    if ((--$PingQueue{$host}{$port}{Requests}) < 1) {
        # Responded to last request.
        $PingQueue{$host}{$port}{CondVar} = undef;    
    }
    
    return $latency;    
}

근데 왜 써? 아직 안 나왔어.PY가 뭐라고 하는지 봐..라푸타 73이 코로:핑...SOCKET로 바꿔야 될 것 같습니다.

좋은 웹페이지 즐겨찾기