私は単純な HTTP Web サーバーを作成しています。これはコードの関連部分です。
179 stat(path, &rd_perm); /* path contains the full path to the original file request */
180 if(errno == EACCES){ /* We don't have permissions to view the file... */
181 printf("======> NO READ PERMISSIONS FOR FILE!\n"); /* sanity check */
182 /* Send the client a 403 Forbidden */
183
184 send(clients[n], "HTTP/1.0 403 Forbidden\r\n\r\n", 26, 0);
185 strcpy(path, home_dir);
186 strcpy(&path[strlen(home_dir)], FORBIDDEN);
187
188 /* After changing the pathname to the "forbidden" page, write that page to the client socket. */
189
190 if( (fd = open(path, O_RDONLY)) != -1){
191 while( (bytes_read = read(fd, data_to_send, 1024)) > 0){
192 write(clients[n], data_to_send, bytes_read);
193 }
194 }
195 }
これで十分かと思いましたが、そうではありません。ここで 2 つのことが間違っていることがわかります。
- 私のエントリー条件は、
errno == EACCES
. これはマルチプロセス Web サーバーであるため、errno の値をチェックする「安全な」正しい方法でしょうか? より良い方法はありますか? - 「301 Moved Permanently\nLocation:」を send() する必要はありますか? これは間違っているようです。私が望んでいたものがまったく動かされていないのを見ると、アクセスできませんでした。
私のエラーが最初のものであることに賭けたいと思いますif
。任意の提案をいただければ幸いです。