変更: 問題はコーディングとは何の関係もないと判断しました。ただし、IRC が原因であると思われるため、問題は解決していません。現在も原因を調査中です。
接続しているサーバーは、次の 2 種類の PING 要求を使用します。
1 つはサーバーへの接続時に尋ねられ、8 文字の英数字の値の形式です。
例:PING :EA0E9275.
もう 1 つは、サーバーが MOTD を送信し、チャネルに参加し、「/NAMES リストの終わり」を完了した後です。次に、「n delay」後、サーバーは現在接続されているホストを値として ping 要求を送信します。
例:PING :irc.ams.nl.euirc.net
ホストの PING 要求に応答する前に「QUIT :Quit Message」コマンドを送信すると、サーバーは QUIT メッセージを無視し、代わりに、「Client Exited」メッセージに似たサーバー入力のステータス メッセージで終了します。
例:ERROR :Closing Link: Nick[IP.ADD.RE.SS] (Life is too short...)
ただし、ホストの PING 要求に応答した後に同じコマンドを送信すると、QUIT が正常に処理されます。
例:ERROR :Closing Link: Nick[IP.ADD.RE.SS] (Quit: Quit Message)
RFC をチェックインしたところ、QUIT セクションでこれが見つかりました。
何らかの理由で、クライアントが QUIT コマンドを発行せずにクライアント接続が閉じられた場合 (たとえば、クライアントが終了し、ソケットで EOF が発生した場合)、サーバーは終了メッセージに、接続の性質を反映した何らかのメッセージを入力する必要があります。それを引き起こした出来事。
また、これを達成するために使用している部分的なコードをまだ確認する必要がある場合は、ここで確認できます。ただし、これは IRC クライアントである mIRC に共通の問題です。
基本スキーム
- サーバーにつなげる...
- つながった!
- サーバー待機 NICK/ユーザー情報...
- サーバーは NICK/USER 情報を受信しました。英数字の PING 応答を待っています...
- サーバーは英数字の PING 応答を受信し、MOTD を送信しました。
- MOTD の終了、チャネルに参加するために JOIN を送信しています...
- チャンネルに参加しました。チャンネルの NAMES リストがリクエストされました。
- NAMES リストの終わり。
- アクティブなチャネル/サーバー データを受信しています。
- QUIT コマンドが送信された場合、サーバーは通常の QUIT を無視し、サーバーのデフォルトではステータス quit(Life is too short...) として「Closing Link」を送信します。
- サーバーはアライブチェックを行っており、ホスト PING (irc.ams.nl.euirc.net) を受信し、サーバーは応答を待っています...
- サーバーに返信を送信しました。
- QUIT コマンドが送信された場合、サーバーは QUIT コマンドを通常の方法でユーザーレベルで処理し、ユーザー指定のメッセージまたは空のメッセージで「リンクを閉じる」を送信します ((QUIT: User Message) または (QUIT: ))