我正在制作一个简单的 HTTP 网络服务器,这是代码的相关部分:
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 }
我以为这就足够了,但事实并非如此。我可以在这里看到两件事是错误的:
- 我的进入条件,
errno == EACCES
。由于这是一个多进程网络服务器,这是否是检查 errno 值的“安全”且正确的方法?有没有更好的办法? - 我还需要发送()“301 永久移动\n位置:”吗?这似乎是错误的,看到我想要的东西根本没有被移动——我只是无法访问它。
我敢打赌我的错误是第一个错误,因为它似乎根本没有涉及if
。任何建议,将不胜感激。