• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Perlのorのソケット接続での利用法について)

Perlのソケット接続での利用法について

このQ&Aのポイント
  • Perlのソケット接続での利用法について質問しています。現在、connect関数を使用して接続先に接続しているのですが、接続が失敗した場合に別の接続先に接続する方法を知りたいです。
  • また、接続が失敗した場合にdie関数ではなく、別の接続先に接続する方法を模索しています。試しにconnect関数を連続して使用する方法を試してみましたが、うまく動作しませんでした。
  • この書き方はどこがまずかったのでしょうか。また、接続が失敗した場合に別の接続先に接続させるためにはどのような書き方をすれば良いのでしょうか。Perl初心者ですので、わかりやすく教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

connect() || connect() || die という書き方が良いかはともかく、 少なくとも2つ目の接続が成功すればdieはしないと思います。 use strict; use warnings; use Socket; my $host1 = 'localhost'; my $port1 = '1234'; my $iaddr1 = inet_aton($host1); my $sock_addr1 = pack_sockaddr_in( $port1, $iaddr1 ); my $host2 = 'localhost'; my $port2 = '80'; my $iaddr2 = inet_aton($host2); my $sock_addr2 = pack_sockaddr_in( $port2, $iaddr2 ); socket( my $sock, PF_INET, SOCK_STREAM, 0 ) || die "$!"; connect( $sock, $sock_addr1 ) || connect( $sock, $sock_addr2 ) || die "$!"; close($sock);

inshin
質問者

お礼

ご回答いただき、ありがとうございます。 その後、何度か試してみましたが、5.12.4 built for darwin-thread-multi-2levelのPerlではいくら試しても同じ結果となり、5.8.8のLinuxで動いているPerlでは想定通りの動きになりました。 何でしょうね、この動きの違い… バグ…?

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

一つ目のconnectでソケットが汚れた状態になる? ソケットを2つ用意(以下の例だとsock1とsock2)して、それぞれconnectに渡すといい(かもしれない) connect( $sock1, $sock_addr1 ) || connect( $sock2, $sock_addr2 ) || die "$!";

すると、全ての回答が全文表示されます。