1 // Utils.h 2 3 #ifndef UTILS_H 4 #define UTILS_H 5 6 #ifdef HAIKU_TARGET_PLATFORM_BEOS 7 # include <socket.h> 8 #else 9 # include <sys/socket.h> 10 # include <unistd.h> 11 #endif 12 13 #include <SupportDefs.h> 14 15 #include "Compatibility.h" 16 17 template<typename T> T max(const T& a, const T& b) { return (a > b ? a : b); } 18 template<typename T> T min(const T& a, const T& b) { return (a < b ? a : b); } 19 20 // safe_closesocket 21 /*! There seems to be race condition on a net_server system, if two threads 22 try to close the same socket at the same time. This is work-around. The 23 variable which stores the socket ID must be a vint32. 24 */ 25 static inline 26 void 27 safe_closesocket(vint32& socketVar) 28 { 29 int32 socket = atomic_or(&socketVar, -1); 30 #ifdef __HAIKU__ 31 close(socket); 32 #else 33 if (socket >= 0) { 34 # ifndef HAIKU_TARGET_PLATFORM_BEOS 35 shutdown(socket, SHUTDOWN_BOTH); 36 # endif 37 closesocket(socket); 38 } 39 #endif 40 } 41 42 #endif // UTILS_H 43