]> git.stg.codes - stg.git/blobdiff - stglibs/common.lib/common.cpp
Fix raw ip tests
[stg.git] / stglibs / common.lib / common.cpp
index 606f057afe457346beb6dd28fd9348759c326d3a..3361adb31af12f7dd632ace0d0b68c390a2da5f9 100644 (file)
@@ -64,6 +64,7 @@
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
+#include <sys/select.h>
 #endif
 
 #include <iconv.h>
 #endif
 
 #include <iconv.h>
@@ -996,7 +997,6 @@ if (0 == strncasecmp(str.c_str(), "no", 2))
 return -1;
 }
 
 return -1;
 }
 
-inline
 int ParseInt(const std::string & str, int * val)
 {
 if (str2x<int>(str, *val))
 int ParseInt(const std::string & str, int * val)
 {
 if (str2x<int>(str, *val))
@@ -1004,7 +1004,6 @@ if (str2x<int>(str, *val))
 return 0;
 }
 
 return 0;
 }
 
-inline
 int ParseUnsigned(const string & str, unsigned * val)
 {
 if (str2x<unsigned>(str, *val))
 int ParseUnsigned(const string & str, unsigned * val)
 {
 if (str2x<unsigned>(str, *val))
@@ -1034,3 +1033,27 @@ if (*val < min || *val > max)
 
 return 0;
 }
 
 return 0;
 }
+
+bool WaitPackets(int sd)
+{
+fd_set rfds;
+FD_ZERO(&rfds);
+FD_SET(sd, &rfds);
+
+struct timeval tv;
+tv.tv_sec = 0;
+tv.tv_usec = 500000;
+
+int res = select(sd + 1, &rfds, NULL, NULL, &tv);
+if (res == -1) // Error
+    {
+    if (errno != EINTR)
+        printfd(__FILE__, "Error on select: '%s'\n", strerror(errno));
+    return false;
+    }
+
+if (res == 0) // Timeout
+    return false;
+
+return true;
+}