• ベストアンサー

HTTPレスポンスの終端はどうわかる?

MacOSX、C言語でsocket(),writeなどを使ってサーバにリクエストを送り レスポンスを標準出力しようとしています。 とりあえずレスポンスをbuf[BUFSIZ]にreadさせようとしているのですが、 レスポンスの内容のサイズがBUFSIZ以上だった場合、繰り返しreadさせる 必要があります。 なので(かなり簡潔に書きますが) while(1) if(buf[i]==EOF){break;} n=read(socket,buf,sizeof(buf)-1); みたいなことを考えました。がこれだとループが止まってくれません。 延々と読み込んでは表示してくれます。。。 たぶんHTTPレスポンスの終端がEOFだと思ったのが違うのだと思います。 HTTPレスポンスの終端というのはどう判断したらよいのでしょうか。 よろしくお願いいたします。

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

  • ベストアンサー
  • marklet
  • ベストアンサー率21% (4/19)
回答No.2

EOFは付加されないと思ったのですが、「延々と読み込んでは表示」という現象は、何か同じ文字列の繰り返し または 文字化けのような期待していないものでしょうか? > n=read(socket,buf,sizeof(buf)-1); readの戻り値nが正数の間はデータがありますのでループ、という判断をしては如何でしょうか? do {  n = read(...); } while (n>0) 連続でリクエストを発行するプログラムというのでしたら、どのようなリクエストをされたか分かりませんが、逐一接続を完了したいという点との矛盾が生じて、Connection: Keep-Alive を指定しているなんて事はないでしょうか? 的外れな回答でしたら、すみません。

その他の回答 (1)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

socketでの送受信にはsend( ), recv( )関数を使われたほうが while (recv(socket, buf, BUFSIZ, 0)) { /*処理*/ }

関連するQ&A

専門家に質問してみよう