質問
私は C で Web サーバーを実装しました。しかし、Web サーバーはしばしば sigpipe 信号を受信して停止します。sigpipe エラーが発生する理由を理解したいと思います。クライアントがサーバーよりも早くソケットを閉じると、sigpipeが発生すると言われていることを知りました。しかし、私のサーバーは追加のヘッダー情報を送信しないため、クライアントがソケットを早期に閉じる可能性はないと思います。たとえば、キャッシュ情報、日付情報などです。
そのため、 Web ブラウザーが私の Web サーバーの応答の悪さに関心がない場合があるかどうかが気になります。クライアントはどのようにしてサーバーよりも早くソケットを閉じることができますか?
いくつかのシナリオ
私のサーバーはクライアントのリクエストメッセージを待ちます。次に、ステータス行のみを解析します。
次に、応答メッセージをブラウザー (クライアント) に送信します。
要求されたファイルが HTML ドキュメントの場合、サーバーは次の応答メッセージを送信します。つまり、サーバーは、ハードディスク上の既存のファイルではなく、HTML テキストをソケットに書き込みます。
HTTP/1.1 200 OK
Connection: close
<html file>
要求されたファイルが *.jpg、*.gif、または *.ico の場合、サーバーは次のメッセージを送信します。
HTTP/1.1 200 OK
Connection: close
Accept-Ranges: bytes
Content-length: <file size>
Content-Type:image/jpg, gif or x-icon
<some binary information for image>
どんな助けでも素晴らしいでしょう。ありがとうございました。