close

Perl 函式 - accept

 

■ 功  能

接受傳入的連接上現有的通用SOCKET。

 

 

■ 語  法

accept NEWSOCKET,GENERICSOCKET

 

 

 

■ 用  法

當伺服器想接受來自客戶端的socket連線,會呼叫這個函式。它在執行前必需先等連接建立完成,在這同時開啟NEWSOCKET檔案代碼。並連接到新建立的連線。

GENERICSOCKET必須是一個已經由socket算符開啟,並連接到伺服器的網路位址的檔案代碼。

 

 

■ 回  傳  值

函式呼叫成功,回傳連線的位址。

失敗時,回傳其它值(並將錯誤碼放入 $! )

 

 

■ 範  例

程式碼

unless ($peer = accept NS, S){

    die "Can't accept a connection: $!\n";

}

 

while(1) { accept( NEW_SOCKET, SOCKT ); ....... }

#!/usr/bin/perl -T
use strict;
use warnings;
BEGIN { $ENV{PATH} = "/usr/bin:/bin" }
use Socket;
use Carp;
my $EOL = "\015\012";

sub logmsg { print "$0 $$: @_ at ", scalar localtime(), "\n" }

my $port  = shift || 2345;
die "invalid port" unless $port =~ /^ \d+ $/x;

my $proto = getprotobyname("tcp");

socket(my $server, PF_INET, SOCK_STREAM, $proto) || die "socket: $!";
setsockopt($server, SOL_SOCKET, SO_REUSEADDR, pack("l", 1))
                                              || die "setsockopt: $!";
bind($server, sockaddr_in($port, INADDR_ANY)) || die "bind: $!";
listen($server, SOMAXCONN)                    || die "listen: $!";

logmsg "server started on port $port";

for (my $paddr; $paddr = accept(my $client, $server); close $client) {
    my($port, $iaddr) = sockaddr_in($paddr);
    my $name = gethostbyaddr($iaddr, AF_INET);

    logmsg "connection from $name [",
            inet_ntoa($iaddr), "]
            at port $port";

    print $client "Hello there, $name, it's now ",
                    scalar localtime(), $EOL;
}


#關鍵字 Perl 函式 - accept用法;Perl 函式 - accept語法;Perl 函式 - accept範例;

 

■ Perl  其它函數

▶ Perl 函式|函數|指令集

 


arrow
arrow
    全站熱搜

    News123 發表在 痞客邦 留言(0) 人氣()