0

使用下面的代码时,处理程序将无法识别非文件请求(例如,请求必须包含 www 文件夹中的文件)。对于所有其他请求, main 甚至都没有被调用,我不知道为什么会这样。

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

处理程序获得关于文件或其他方面的任何请求,无论是否有效。

您的处理程序不正确。由于您在进行解析之前 询问通知: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");

您在上面发布的代码每次都会崩溃,因为 HTTPREQUESTNULL在连接为 时为(尚不可用)ACCEPTED,或者请求为READ

于 2013-01-13T15:24:07.297 回答