0

以下のコードを使用すると、ハンドラーはファイル以外の要求を認識しません (たとえば、要求には www フォルダーにファイルが含まれている必要があります)。他のすべてのリクエストでは、メインが呼び出されることさえありません。これがなぜなのかわかりません。

int init(int argc, char *argv[])

{
   printf("init\n");

   *(u32 *)get_env(argv, US_HANDLER_STATES) = (1L << HDL_AFTER_ACCEPT) | (1L << HDL_AFTER_READ) | (1L << HDL_BEFORE_WRITE);

   return 0;
}

void clean(int argc, char *argv[])
{
   printf("clean\n");
}

int main(int argc, char *argv[])
{
   printf("%s\n", (char *)get_env(argv, REQUEST));

   return 255;
}

リクエスト:127.0.0.1/index.html
プリント:GET /index.html

リクエスト:127.0.0.1/favicon.ico
プリント:GET /favicon.ico

リクエスト:127.0.0.1/index
プリント:N/A

ご協力ありがとうございます。

4

1 に答える 1

0

ハンドラーは、有効かどうかに関係なく、ファイルなどに関するあらゆる要求を受け取ります。

ハンドラーが正しくありません。BEFORE HTTPHTML解析が行われる前に通知を要求するため:

   *(u32*)get_env(argv, US_HANDLER_STATES) = 
      (1L << HDL_AFTER_ACCEPT) 
    | (1L << HDL_AFTER_READ) 
    | (1L << HDL_BEFORE_WRITE);

...次のREQUESTように表示する前に、が利用可能であることを絶対に確認する必要がありprintf()ます。

   const char *req = (char*)get_env(argv, REQUEST);
   printf("%s\n", req ? req : "not parsed yet");

上に投稿したコードは毎回クラッシュします。これは、HTTPREQUEST値がNULL(まだ利用できない) で接続がACCEPTED、または要求が であるためですREAD

于 2013-01-13T15:24:07.297 に答える