ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/proj/trunk/Search/HttpHandler.cpp
(Generate patch)

Comparing trunk/Search/HttpHandler.cpp (file contents):
Revision 25 by douglas, 2002-12-22T23:32:58-08:00 vs.
Revision 179 by douglas, 2003-07-05T19:47:23-07:00

# Line 1 | Line 1
1   /* ============================================================================
2   * Douglas Thrift's Search Engine License
3   *
4 < * Copyright (C) 2002, Douglas Thrift. All Rights Reserved.
4 > * Copyright (C) 2002-2003, Douglas Thrift. All Rights Reserved.
5   * Redistribution and use in source and binary forms, with or without
6   * modification, are permitted provided that the following conditions are met:
7   *
# Line 50 | Line 50
50  
51   #include "HttpHandler.h"
52  
53 + // Lovely C Sockets!
54 + #ifndef _WIN32
55 + // BSD Sockets
56 + #include <unistd.h>
57 + #include <sys/types.h>
58 + #include <sys/socket.h>
59 + #include <netinet/in.h>
60 + #include <netdb.h>
61 +
62 + #define INVALID_SOCKET -1
63 + #define SOCKET_ERROR -1
64 +
65 + inline int closesocket(SOCKET s) { return close(s); }
66 + #endif
67 +
68   HttpHandler::HttpHandler()
69   {
70          buffer = new char[BUFSIZ + 1];
# Line 281 | Line 296 | void HttpHandler::populate()
296                          unsigned bytes = left > BUFSIZ ? BUFSIZ : left;
297                          unsigned received;
298  
299 <                        if ((received = recv(http, buffer, bytes, 0)) == SOCKET_ERROR)
299 >                        while (true)
300                          {
301 <                                error(program + ": Recv");
287 <                                exit(1);
288 <                        }
289 <                        else if (received != bytes)
290 <                        {
291 <                                left -= received;
292 <                                page += buffer;
293 <
294 <                                memset(buffer, 0, BUFSIZ + 1);
295 <
296 <                                bytes -= received;
297 <                                if (recv(http, buffer, bytes, 0) == SOCKET_ERROR)
301 >                                if ((received = recv(http, buffer, bytes, 0)) == SOCKET_ERROR)
302                                  {
303                                          error(program + ": Recv");
304                                          exit(1);
305                                  }
306 +                                else if (received != bytes)
307 +                                {
308 +                                        left -= received;
309 +                                        page += buffer;
310 +
311 +                                        memset(buffer, 0, BUFSIZ + 1);
312 +
313 +                                        bytes -= received;
314 +                                }
315 +                                else
316 +                                {
317 +                                        break;
318 +                                }
319                          }
320  
321                          page += buffer;
# Line 322 | Line 339 | void HttpHandler::populate()
339                                  unsigned bytes = left > BUFSIZ ? BUFSIZ : left;
340                                  unsigned received;
341  
342 <                                if ((received = recv(http, buffer, bytes, 0)) == SOCKET_ERROR)
342 >                                while (true)
343                                  {
344 <                                        error(program + ": Recv");
345 <                                        exit(1);
329 <                                }
330 <                                else if (received != bytes)
331 <                                {
332 <                                        left -= received;
333 <                                        page += buffer;
334 <
335 <                                        memset(buffer, 0, BUFSIZ + 1);
336 <
337 <                                        bytes -= received;
338 <                                        if (recv(http, buffer, bytes, 0) == SOCKET_ERROR)
344 >                                        if ((received = recv(http, buffer, bytes, 0)) ==
345 >                                                SOCKET_ERROR)
346                                          {
347                                                  error(program + ": Recv");
348                                                  exit(1);
349                                          }
350 +                                        else if (received != bytes)
351 +                                        {
352 +                                                left -= received;
353 +                                                page += buffer;
354 +
355 +                                                memset(buffer, 0, BUFSIZ + 1);
356 +
357 +                                                bytes -= received;
358 +                                        }
359 +                                        else
360 +                                        {
361 +                                                break;
362 +                                        }
363                                  }
364  
365                                  page += buffer;
# Line 573 | Line 593 | void HttpHandler::error(const string& pr
593   #else
594          if (host)
595          {
596 <                herror(prefix.c_str());
596 >                string error;
597 >
598 >                switch (h_errno)
599 >                {
600 >                case HOST_NOT_FOUND:
601 >                        error = "Unknown host";
602 >                        break;
603 >                case TRY_AGAIN:
604 >                        error = "Host name lookup failure";
605 >                        break;
606 >                case NO_RECOVERY:
607 >                        error = "Unknown server error";
608 >                        break;
609 >                case NO_DATA:
610 >                        error = "No address associated with name";
611 >                        break;
612 >                default:
613 >                        error = "Unknown error";
614 >                        break;
615 >                }
616 >
617 >                cerr << prefix << ": " << error << "\n";
618          }
619          else
620          {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines