• ベストアンサー

パイプが切断されました

Linux上のサーバプログラムとWindows上のクライアントプログラムをLAN上で通信させているのですが、 クライアントから切断すると必ずサーバ側で「パイプが切断されました」と表示され強制終了してしまいます。 原因や解析方法をご教授ください。

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

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

 そのサーバーソフトは自作ですか?  サーバーからクライアントに向けて、そのパイプ(ソケット)を通してデータを送っていますか。閉じたパイプに書き込むと、シグナル SIG_PIPE が発生し、プロセスが終了してしまいます。SIG_PIPE を無視するかキャプチャするようにプログラムしてください。(「パイプが切断されました」と表示されるのだから SIG_PIPE はキャプチャしているようにも思えますが…)  シグナルを無視/キャプチャするには signal(2) などのシステムコールを使ってください。

tanimaru
質問者

お礼

その後自分でも調べ、signal(SIGPIPE, SIG_IGN); をcallすることにより事象は発生しなくなりました。 ご指摘のとおり自作サーバーソフトからソケットで sendto/recvfromしていますのでビンゴです! ありがとうございました。

関連するQ&A

  • Javaで名前付きパイプ通信

    プラットフォームWindows 2003サーバー。 C++のexeプログラムとJavaプログラム。 名前付きパイプでのプロセス間通信をしたいと考えています。 C++側は問題ないと思いますが、Java側で対応できますか? java.ioパッケージ内にpipedWriter/pipedReaderクラスがあるようですが、名前指定等がないようです。 どうぞご教授ください。

  • Windowsのタスクにあるアプリケーション切断方法

    いつもお世話になります。 現在、クライアント側で独自のツールを使用して処理命令を発行し、サーバ側でその処理を実行します。 今問題になっているのが、そのツールのアプリケーションが処理を終了してもサーバのWindowsのタスク上にゴミ(?)として残りっぱなしというものです。 そこで、PGにてWindowsのタスクにある固定のアプリケーションを切断したいのですが、それは可能なのでしょうか? また、クライアント側はAdministrator権限ではない(サーバ側がAdministrator権限です)のですが、この場合でも可能なのでしょうか? 尚、環境は、OSはWindows NT、VB5.0です。 どなたかご教授をお願い致します。

  • リモートデスクトップが突然切断される

    現在家庭内lanでサーバ側をXPpro(sp2) クライアント側をXPhome(sp1a)でリモートデスクトップをしているのですが急に切断されます。 30分で切断されるときもあれば何時間も切断されないこともあります。 つなぎなおそうとすると「指定されたリモートコンピュータが見つかりませんでした。コンピュータ名またはIPアドレスが正しく入力されていることを確認してから接続し直してください。」 となります。 サーバ側を再起動させるとまた繋がるようになります。 これは何が原因なのでしょうか。もし何かご存知の方がいらっしゃいましたらご教示願います。

  • ネットワークの切断方法について

    ネットワークの切断方法について Windows Server 2008 R2 Foundation を導入し四苦八苦しております。 クライアント側からアクセスすると 「同一ユーザーのアクセスがありました」 という趣旨のエラーが出る場合があります。 この時は、クライアント側の電源を切り、5分ほどおいて起動すると繋がるのですが、仕事が停まってしまうので、以前起動したままで一旦ネットワークを切断する方法を見つけたのですが失念してしまいました・・・。 コマンドプロンプトの画面から、あるコマンドを打ち込むと強制的にネットワークが切断されたのですが・・・どなたか心当たりのある方いらっしゃいませんでしょうか? ※切断ではなくて、接続のクリア・・・だったかもしれません。 よろしくお願い致します。

  • Oracle8i(8.1.7)forLinuxのDB サーバにリスナーを強制切断するには

    恐れ入ります、oracleのDBサーバにクライアントがWindowsでMSアクセスを使用 しているユーザがODBC経由で接続しています。 このリスナーをoracleのDBサーバ側で強制切断するoracleのコマンドと いったものはないのでしょうか? よろしくお願い致します。

  • パイプを用いたプロセス間通信について

    VC++2005にて下記サイトを参考にパイプを用いたプロセス間通信を行うプログラムを作成しています。 猫でもわかるプログラミング (1)第242章 匿名パイプ(サーバー側) http://www.kumei.ne.jp/c_lang/sdk3/sdk_242.htm (2)第243章 匿名パイプ(クライアント側) http://www.kumei.ne.jp/c_lang/sdk3/sdk_243.htm サーバー側からWriteFileでデータを送信する際に、 char型配列に入ったバッファデータ「szBuf」を送信し、 クライアント側のReadFileで同じく「szBuf」で受信していますが、 構造体Data ================== typedef TypeData{ int a; int b; char c[10]; }Data; ================== のオブジェクトdataを送信するには、WriteFile及びReadFileの箇所は どのように実装すれば良いのでしょうか? MSDNにはWriteFileの引数の型はLPCVOIDとあるため、 可能だと思うのですが。。。 もし解決策をご存知の方おられましたら、ご教示お願い致します。

  • VB6.0 Winsockについての質問です。

    VB6.0 Winsockについての質問です。 はじめまして。 現在、VB6.0を使用してTCP通信にてテキストデータを送るプログラムを作成しています。 機能としては全て完成しているのですが、現在再接続ができないじょうたいです。 PC上にサーバプログラムとクライアントプログラムを立ち上げます。 localport は 0 として設定しており、 host は、localhostとしています。 remortportは5000を設定しております。 現段階で発生している問題として、 クライアント側にてConnectイベントをさせ、 サーバ側にて、ConnectionRequestイベントが発生します。 クライアント側にて、Closeイベントは発生させ、 サーバー側も切断を確認します。 この状態でクライアント側から再度Connectイベントを発生させても サーバ側にてConnectionRequestイベントが発生しません。 サーバ側のプログラム一度終了させ、もう一度起動させると また、接続が可能になります。 もう、2日以上悩んでいるのですが、、、解決できません。 どなたか、詳しい方がいらっしゃいましたらご教授お願いします。

  • ssh(telnet)強制切断方法について

    クライアントからサーバに対しssh(telnet)接続をしているセッションを 時間帯にて強制切断させたいと考えております。 イメージ的には、クライアントからssh(telnet)にて サーバに接続しているターミナルソフト(TeraTerm等)の画面が、「消える」、 もしくは「タイムアウトにより動作不能」になるという状態を 描いています。 ご教授のほどよろしくお願いします。

  • ネットワーク接続が切断される

    現在、Win2000ServerでLANを組んでいるのですが、 たまにクライアントのWin98マシンからネットワーク接続しているサーバの共有フォルダが接続不可になってしまうことがあります。 接続不可になる状況はクライアントを一週間ほど連続稼働した時とかに翌日の朝、共有フォルダへの接続が切断されていることがあるみたいです。 ほかのWin2000Proクライアントではそのようなことは 起きていません。 原因が特定できなくて困っています。 LANの構成はWin2000ServerをDomainサーバに クライアントにはWin95,Win98,Win98SE,Win2000Pro が混在しています。

  • ジョブの切り離し

    クライアント(Windows)とサーバ(Unix)の通信アプリを作っています。 ソケットプログラムはクライアント側はVBで、サーバ側はCです。 データの送受信はうまくいきました。ところが、データを送信後サーバ側でデータを解析し、その結果を印刷するというしくみなのですがこの全処理が終わらないとクライアント側に送信終了のイベントが発生しません。 クライアント側がデータを送信したら、あとはサーバ側で処理をする、というふうにしたいのです。 そこでサーバ側のアプリは次のような構造になっています。 App1(ソケットアプリ) exec でApp2 を起動 App2(データの送受信) wait あり exec でApp3 を起動 App3(データ解析)              wait なし exec でApp4,App5 を起動 wait あり、sleep あり App3以降で時間がとてもかかります。wait,sleep が入っているからですが、これはデータ解析する上で必要な手順です。データの送受信はApp2までで終わっているので、App3のプロセスを発行したらソケット切断にしたいのですが、App3が全て終わるまで待ってしまいます。 起動のさせ方でなんとかならないものかと思うのですが、どうぞアドバイスを宜しくお願いいたします。