#endif
}
+void hb_clock_gettime( struct timespec *tp )
+{
+ struct timeval tv;
+ time_t sec;
+
+ sec = time( NULL );
+ gettimeofday( &tv, NULL );
+ tp->tv_sec = tv.tv_sec;
+ tp->tv_nsec = tv.tv_usec * 1000;
+}
+
+void hb_cond_timedwait( hb_cond_t * c, hb_lock_t * lock, int msec )
+{
+#if defined( SYS_BEOS )
+ c->thread = find_thread( NULL );
+ release_sem( lock->sem );
+ suspend_thread( c->thread );
+ acquire_sem( lock->sem );
+ c->thread = -1;
+#elif USE_PTHREAD
+ struct timespec ts;
+ hb_clock_gettime(&ts);
+ ts.tv_nsec += (msec % 1000) * 1000000;
+ ts.tv_sec += msec / 1000 + (ts.tv_nsec / 1000000000);
+ ts.tv_nsec %= 1000000000;
+ pthread_cond_timedwait( &c->cond, &lock->mutex, &ts );
+#endif
+}
+
void hb_cond_signal( hb_cond_t * c )
{
#if defined( SYS_BEOS )
#endif
}
+void hb_cond_broadcast( hb_cond_t * c )
+{
+#if USE_PTHREAD
+ pthread_cond_broadcast( &c->cond );
+#endif
+}
+
/************************************************************************
* Network
***********************************************************************/
struct sockaddr_in sock;
struct hostent * host;
+#ifdef SYS_MINGW
+ WSADATA wsaData;
+ int iResult, winsock_init = 0;
+
+ // Initialize Winsock
+ if (!winsock_init)
+ {
+ iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
+ if (iResult != 0)
+ {
+ hb_log("WSAStartup failed: %d", iResult);
+ return NULL;
+ }
+ winsock_init = 1;
+ }
+#endif
+
/* TODO: find out why this doesn't work on Win32 */
if( !( host = gethostbyname( address ) ) )
{