@@ -143,20 +143,22 @@ int kHttpdClient::run() {
143143 if (0 == size) {// 说明socket关闭
144144 _logger->w (TAG, __LINE__, " read size is %ld for socket: %d" , size, fd);
145145#ifdef WIN32
146- shutdown (fd, SD_BOTH);
146+ // shutdown(fd, SD_BOTH);
147+ closesocket (fd);
147148#else
148149 shutdown (fd, SHUT_RDWR);
149- #endif
150150 close (fd);
151+ #endif
151152 return 0 ;
152153 } else if (0 > size && (errno != EINTR && errno != EWOULDBLOCK && errno != EAGAIN)) {
153154 _logger->w (TAG, __LINE__, " read size is %ld for socket: %d is errno:" , size, fd, errno);
154155#ifdef WIN32
155- shutdown (fd, SD_BOTH);
156+ // shutdown(fd, SD_BOTH);
157+ closesocket (fd);
156158#else
157159 shutdown (fd, SHUT_RDWR);
158- #endif
159160 close (fd);
161+ #endif
160162 return 0 ;
161163 }
162164 if (!data.empty ()) {
@@ -173,7 +175,7 @@ int kHttpdClient::run() {
173175 }
174176 }
175177 if (split_index == 0 ) {
176- for (long int i = 0 ; i < size; i++) {
178+ for (long int i = 0 ; i < size - 3 ; i++) {
177179 if (buffer[i] == ' \r ' && buffer[i + 1 ] == ' \n ' ) {
178180 if (buffer[i + 2 ] == ' \r ' && buffer[i + 3 ] == ' \n ' ) {
179181 split_index = data.size () + i + 4 ;
@@ -187,7 +189,7 @@ int kHttpdClient::run() {
187189 }
188190 }
189191 }
190- data.insert (data.end (), & buffer[ 0 ], & buffer[size] );
192+ data.insert (data.end (), buffer. begin (), buffer. end () );
191193
192194 } while (split_index == 0 );
193195 /* ******** 初始化http头 *********/
@@ -217,22 +219,24 @@ int kHttpdClient::run() {
217219 if (0 == size) {// 说明socket关闭
218220 _logger->w (TAG, __LINE__, " read size is %ld for socket: %d" , size, fd);
219221#ifdef WIN32
220- shutdown (fd, SD_BOTH);
222+ // shutdown(fd, SD_BOTH);
223+ closesocket (fd);
221224#else
222225 shutdown (fd, SHUT_RDWR);
223- #endif
224226 close (fd);
227+ #endif
225228 fd = 0 ;
226229 return fd;
227230 break ;
228231 } else if (0 > size && (errno != EINTR && errno != EWOULDBLOCK && errno != EAGAIN)) {
229232 _logger->w (TAG, __LINE__, " read size is %ld for socket: %d is errno:" , size, fd, errno);
230233#ifdef WIN32
231- shutdown (fd, SD_BOTH);
234+ // shutdown(fd, SD_BOTH);
235+ closesocket (fd);
232236#else
233237 shutdown (fd, SHUT_RDWR);
234- #endif
235238 close (fd);
239+ #endif
236240 fd = 0 ;
237241 return fd;
238242 break ;
@@ -306,7 +310,12 @@ int kHttpdClient::run() {
306310 }
307311 inFile.close ();
308312 string type = " *" ;
309- type = (char *) filepath.extension ().c_str ();
313+ #ifdef WIN32
314+ auto _ = filepath.extension ();
315+ type = _.string ();
316+ #else
317+ type = filepath.extension ();
318+ #endif
310319 if (kHttpdClient_HTTP_Content_Type .find (type) == kHttpdClient_HTTP_Content_Type .end ())
311320 type = " *" ;
312321 this ->ContentType = kHttpdClient_HTTP_Content_Type [type];
@@ -317,7 +326,7 @@ int kHttpdClient::run() {
317326 } catch (std::exception &e) {
318327 this ->response_code = HttpResponseCode::ResponseCode::NotFound;
319328 if (this ->ResponseContent .empty ()) {
320- string body = " 未找到页面: " + url_path;
329+ string body = string ( " cann't found " ) + url_path;
321330 this ->ResponseContent .insert (ResponseContent.begin (), &body.c_str ()[0 ], &body.c_str ()[body.size ()]);
322331 }
323332 }
@@ -345,7 +354,9 @@ string kHttpdClient::get_localtime(time_t now) {
345354 time (&now); // time函数读取现在的时间(国际标准时间非北京时间),然后传值给now
346355
347356#ifdef WIN32
348- char *daytime = ctime (&now);
357+ struct tm tmnow = { 0 };
358+ localtime_s (&tmnow, &now);
359+ char *daytime = asctime (&tmnow);
349360#else
350361 timenow = localtime (&now);
351362 char daytime[100 ];
@@ -360,31 +371,35 @@ string kHttpdClient::get_localtime(time_t now) {
360371void kHttpdClient::init_header (const char *data, unsigned long int size, bool is_split_n) {
361372 unsigned long int offset = 0 ;
362373 int space_index = 0 ;
363- for (; offset < size; offset++) {
364- if (data[offset] == ' \r ' && data[offset + 1 ] == ' \n ' ) {
365- offset += 2 ;
366- break ;
367- } else if (data[offset] == ' \n ' ) {
368- offset++;
369- break ;
370- } else if (data[offset] == ' ' ) {
371- space_index++;
372- }
373- switch (space_index) {
374- case 0 :
375- if (!method.empty () || data[offset] != ' ' )
376- method.push_back (data[offset]);
377- break ;
378- case 1 :
379- if (!url_path.empty () || data[offset] != ' ' )
380- url_path.push_back (data[offset]);
381- break ;
382- default :
383- if (!http_version.empty () || data[offset] != ' ' )
384- http_version.push_back (data[offset]);
385- break ;
386- }
387- }
374+ if (method.empty ()) {
375+ for (; offset < size; offset++) {
376+ if (data[offset] == ' \r ' && data[offset + 1 ] == ' \n ' ) {
377+ offset += 2 ;
378+ break ;
379+ }
380+ else if (data[offset] == ' \n ' ) {
381+ offset++;
382+ break ;
383+ }
384+ else if (data[offset] == ' ' ) {
385+ space_index++;
386+ }
387+ switch (space_index) {
388+ case 0 :
389+ if (!method.empty () || data[offset] != ' ' )
390+ method.push_back (data[offset]);
391+ break ;
392+ case 1 :
393+ if (!url_path.empty () || data[offset] != ' ' )
394+ url_path.push_back (data[offset]);
395+ break ;
396+ default :
397+ if (!http_version.empty () || data[offset] != ' ' )
398+ http_version.push_back (data[offset]);
399+ break ;
400+ }
401+ }
402+ }
388403 if (method.empty ())method = " GET" ;
389404 if (url_path.empty ())url_path = " /" ;
390405 if (http_version.empty ())http_version = " HTTP/1.0" ;
0 commit comments