win版Perlでソケットを使うには?

[上に] [前に] [次に]
フィニム 1999/03/29(月) 01:35:45
最近Perl始めたフィニムと申します。
windowsでPerlを動かしてるのですが、
ソケットのライブラリィを読み込んでも、
ソケット作成及びファイルのDL等が出来ません。
何か、設定などが必要なのでしょうか?
(unixの某無料サーバーでは動きましたけれども?)

匿名希望 1999/03/29(月) 02:04:58
別にないと思います。
Perl for Win32,Active Perlでは問題無くソケット通信しています。
JPERLは・・・・知りません。

匿名希望 1999/03/29(月) 02:07:01
あ、勿論Socketは、自分でsocketして、connectして、..etc
やってますので、一纏めになったライブラリとか使っての
設定は知りません。

フィニム 1999/03/29(月) 03:02:51
> ソケットのライブラリィを読み込んでも、
っていうのは、「use Socket;」の事です。
もちろん、socketしてconnectして、使っています。

コルン [E-Mail] [HomePage] 1999/03/29(月) 03:41:15
 それたぶんね、UNIXでは\r\nでメッセージを送ってるのを、Winでもそのままにしてるからじゃ無いの?
 Winだと、\r\r\nに展開されちゃうんだけど...?

追伸: ここで会ったが百年目。後でGAIAおいで。>フィニム

いいづか [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 );
}

いいづか [E-Mail] [HomePage] 1999/03/30(火) 00:39:08
補足&宣伝です。
私のホームページに「SMTPサーバと会話をするPerl製CGI」が
あり、Win95では動作確認をしてあります。もしかすると
参考になる部分もあるかもしれません。
あと、一旦開いたソケットに対しては

$variable = <FILE_HANDLE_OF_SOCKET>;

とか

print FILE_HANDLE_OF_SOCKET "data to write into socket\r\n";

で大丈夫です。また、shutdown()は腐っているかも知れません
(もしくは僕のスクリプトが腐っているのかな?)

[上に] [前に] [次に]