@@ -33,7 +33,7 @@ struct file_cache {
33
33
explicit file_cache (std::string doc_root) : doc_root_(std::move(doc_root)) {}
34
34
35
35
~file_cache () throw () {
36
- BOOST_FOREACH (region_map::value_type const & region, regions) {
36
+ for ( auto & region : regions) {
37
37
munmap (region.second .first , region.second .second );
38
38
}
39
39
}
@@ -53,7 +53,11 @@ struct file_cache {
53
53
int fd = open (real_filename.c_str (), O_RDONLY | O_NONBLOCK);
54
54
#endif
55
55
if (fd == -1 ) return false ;
56
- std::size_t size = lseek (fd, 0 , SEEK_END);
56
+ off_t size = lseek (fd, 0 , SEEK_END);
57
+ if (size == -1 ) {
58
+ close (fd);
59
+ return false ;
60
+ }
57
61
void *region = mmap (0 , size, PROT_READ, MAP_PRIVATE, fd, 0 );
58
62
if (region == MAP_FAILED) {
59
63
close (fd);
@@ -68,6 +72,7 @@ struct file_cache {
68
72
common_headers + 3 );
69
73
headers[2 ].value = std::to_string (size);
70
74
file_headers.insert (std::make_pair (real_filename, headers));
75
+ close (fd);
71
76
return true ;
72
77
}
73
78
@@ -174,11 +179,16 @@ struct file_server {
174
179
};
175
180
176
181
int main (int , char *[]) {
177
- file_cache cache (" ." );
178
- file_server handler (cache);
179
- server::options options (handler);
180
- server instance (options.thread_pool (std::make_shared<utils::thread_pool>(4 ))
181
- .address (" 0.0.0.0" )
182
- .port (" 8000" ));
183
- instance.run ();
182
+ try {
183
+ file_cache cache (" ." );
184
+ file_server handler (cache);
185
+ server::options options (handler);
186
+ server instance (options.thread_pool (std::make_shared<utils::thread_pool>(4 ))
187
+ .address (" 0.0.0.0" )
188
+ .port (" 8000" ));
189
+ instance.run ();
190
+ }
191
+ catch (std::exception &e) {
192
+ std::cerr << e.what () << std::endl;
193
+ }
184
194
}
0 commit comments