From: blackh <gra...@li...> - 2003-03-01 12:46:31
|
blackh Sat Mar 1 04:46:30 2003 EDT Modified files: /grapevine/cpp IOLoop.cpp Log: Treat error statuses returned by accept() as being non-fatal. Index: grapevine/cpp/IOLoop.cpp diff -u grapevine/cpp/IOLoop.cpp:1.39 grapevine/cpp/IOLoop.cpp:1.40 --- grapevine/cpp/IOLoop.cpp:1.39 Sat Mar 1 03:23:42 2003 +++ grapevine/cpp/IOLoop.cpp Sat Mar 1 04:46:29 2003 @@ -1,4 +1,4 @@ -// $Id: IOLoop.cpp,v 1.39 2003/03/01 11:23:42 blackh Exp $ +// $Id: IOLoop.cpp,v 1.40 2003/03/01 12:46:29 blackh Exp $ #include "config.h" @@ -400,28 +400,29 @@ socklen_t addrlen = sizeof(addr); int newSocket = accept(i, (struct sockaddr*)&addr, &addrlen); if (newSocket < 0) - return String("accept() failed: ")+String(lastSocketErrorMessage()); - - int port = (*found1).second.first; - String domainName = (*found1).second.second; - - int ret = setNonBlocking(newSocket); - if (ret < 0) - return String("fcntl() failed: ")+String(lastSocketErrorMessage()); - - FD_SET(newSocket, &readfds); - if (newSocket >maxFD) - maxFD = newSocket; - openSockets[newSocket] = domainName; - Domain& domain = ruleBase->getDomain(domainName, true); - Fact fact(domain, "accept_"); - fact.set(String("fd"), String(newSocket)); - fact.set(String("port"), Integer(port)); - char* remoteAddr = inet_ntoa(addr.sin_addr); - fact.set(String("remoteAddr"), String(remoteAddr)); - int remotePort = ntohs(addr.sin_port); - fact.set(String("remotePort"), Integer(remotePort)); - reportError(fact.remember()); + Print::println(String("accept() failed: ")+String(lastSocketErrorMessage())); + else { + int port = (*found1).second.first; + String domainName = (*found1).second.second; + + int ret = setNonBlocking(newSocket); + if (ret < 0) + return String("fcntl() failed: ")+String(lastSocketErrorMessage()); + + FD_SET(newSocket, &readfds); + if (newSocket >maxFD) + maxFD = newSocket; + openSockets[newSocket] = domainName; + Domain& domain = ruleBase->getDomain(domainName, true); + Fact fact(domain, "accept_"); + fact.set(String("fd"), String(newSocket)); + fact.set(String("port"), Integer(port)); + char* remoteAddr = inet_ntoa(addr.sin_addr); + fact.set(String("remoteAddr"), String(remoteAddr)); + int remotePort = ntohs(addr.sin_port); + fact.set(String("remotePort"), Integer(remotePort)); + reportError(fact.remember()); + } } else { map<int, String>::iterator found = openSockets.find(i); |