X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=lib%2Fsocket-util.c;h=16a321c201804343bd285b56d41232422fefafe7;hb=ba18611;hp=4965b63af4d1cce7e5b62e38579efe26834fb68f;hpb=26efd2563bf76547cf38da49ec83997e091b2517;p=openvswitch diff --git a/lib/socket-util.c b/lib/socket-util.c index 4965b63a..16a321c2 100644 --- a/lib/socket-util.c +++ b/lib/socket-util.c @@ -26,13 +26,15 @@ #include #include #include +#include +#include #include #include #include "fatal-signal.h" #include "util.h" - #include "vlog.h" -#define THIS_MODULE VLM_socket_util + +VLOG_DEFINE_THIS_MODULE(socket_util) /* Sets 'fd' to non-blocking mode. Returns 0 if successful, otherwise a * positive errno value. */ @@ -53,6 +55,28 @@ set_nonblocking(int fd) } } +static bool +rlim_is_finite(rlim_t limit) +{ + if (limit == RLIM_INFINITY) { + return false; + } + +#ifdef RLIM_SAVED_CUR /* FreeBSD 8.0 lacks RLIM_SAVED_CUR. */ + if (limit == RLIM_SAVED_CUR) { + return false; + } +#endif + +#ifdef RLIM_SAVED_MAX /* FreeBSD 8.0 lacks RLIM_SAVED_MAX. */ + if (limit == RLIM_SAVED_MAX) { + return false; + } +#endif + + return true; +} + /* Returns the maximum valid FD value, plus 1. */ int get_max_fds(void) @@ -60,10 +84,7 @@ get_max_fds(void) static int max_fds = -1; if (max_fds < 0) { struct rlimit r; - if (!getrlimit(RLIMIT_NOFILE, &r) - && r.rlim_cur != RLIM_INFINITY - && r.rlim_cur != RLIM_SAVED_MAX - && r.rlim_cur != RLIM_SAVED_CUR) { + if (!getrlimit(RLIMIT_NOFILE, &r) && rlim_is_finite(r.rlim_cur)) { max_fds = r.rlim_cur; } else { VLOG_WARN("failed to obtain fd limit, defaulting to 1024");