いいづか
[E-Mail]
[HomePage]
1999/03/30(火) 00:33:59
Win95+Perl5+An httpdでは、socketへの\r\n は \r\nとして
送出されるような感じでした。
Perlのソケットって、どうもマシンにより
同じスクリプトでもうまく動く場合とそうでない場合が
あるみたいです(もちろん両方ともPerl5の場合で)。
とほほページの例はちょっと動かないケースが若干ある
かもしれません(Solaris5 on Sparcではうまくいかなかった
です)。
参考までに、「比較的いろいろなマシンで動作確認をした
connect用のプロシジャ」を記載しておきます(Perl5 Manual
のパクリ)のでご利用ください。なお、コピーしたら
2バイト文字スペースを全部1バイト文字スペースに置換えて
ください。
#
# usage:
# &connect_to_remote_host($target_host_name,$port_number)
# Global variables : S(file handle of socket)
# return values:1=succeeded,0=error
sub connect_to_remote_host {
local($them) = $_[0];
local($port) = $_[1];
local($sockaddr) = 'S n a4 x8';
$hostname = 'localhost';
($name, $aliases, $proto) = getprotobyname('tcp');
($name, $aliases, $port) = getservbyname($port, 'tcp') unless $port =~ /^\d+$/;
($name, $aliases, $type, $len, $thisaddr) = gethostbyname($hostname);
($name, $aliases, $type, $len, $thataddr) = gethostbyname($them);
$this = pack($sockaddr, &AF_INET, 0, $thisaddr);
$that = pack($sockaddr, &AF_INET, $port, $thataddr);
socket(S, &PF_INET, &SOCK_STREAM, $proto) || do { return (0);};
bind(S, $this) || do { return ( 0 ); };
connect(S, $that) || do {close ( S ); return ( 0 ); };
# change S to non-brocking mode
select(S); $| = 1; select(stdout);
return ( 1 );
}