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 函式|函數|指令集
留言列表