+diff -Naur forte-0.3.orig/src/arch/netos/txsocha.cpp forte-0.3/src/arch/netos/txsocha.cpp
+--- forte-0.3.orig/src/arch/netos/txsocha.cpp 2008-07-10 07:33:44.000000000 +0000
++++ forte-0.3/src/arch/netos/txsocha.cpp 2008-09-24 13:29:32.000000000 +0000
+@@ -167,7 +167,7 @@
+ strcpy(ip, pa_stConnectionInformation.m_pcConnectionID);\r
+ sock_addr.sin_family = AF_INET;\r
+ sock_addr.sin_port = htons(atoi(splitString(ip)));\r
+- memset(&(sock_addr.sin_zero), '\0', 8);\r
++ memset(&(sock_addr.sin_zero), '\0', sizeof(sock_addr.sin_zero));\r
+ fprintf(stderr,"CTXSocketHandler:: Opening TCP-Connection at IP: %s\n",pa_stConnectionInformation.m_pcConnectionID);\r
+ \r
+ if ((sock_id = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) {\r
+diff -Naur forte-0.3.orig/src/arch/pc/pcsochan.cpp forte-0.3/src/arch/pc/pcsochan.cpp
+--- forte-0.3.orig/src/arch/pc/pcsochan.cpp 2008-07-10 07:33:44.000000000 +0000
++++ forte-0.3/src/arch/pc/pcsochan.cpp 2008-09-30 10:23:36.000000000 +0000
+@@ -116,9 +116,9 @@
+ strcpy(ip, pa_stConnectionInformation.m_pcConnectionID);\r
+ sock_addr.sin_family = AF_INET;\r
+ sock_addr.sin_port = htons(atoi(splitString(ip)));\r
+- memset(&(sock_addr.sin_zero), '\0', 8);\r
++ memset(&(sock_addr.sin_zero), '\0', sizeof(sock_addr.sin_zero));\r
+ \r
+- char acInfo[64] = { "CPCSocketHandler:: Opening TCP-Connection at IP: " };\r
++ char acInfo[128] = { "CPCSocketHandler:: Opening TCP-Connection at IP: " };\r
+ strcat(acInfo, pa_stConnectionInformation.m_pcConnectionID);\r
+ DEVLOG_INFO(cg_nID_CSocketHandler, 0x10, acInfo);\r
+ \r
+@@ -130,6 +130,16 @@
+ }\r
+ // switch between client/server:\r
+ if (pa_stConnectionInformation.m_enServiceType == e_Server) {\r
++ unsigned int opt = 1;\r
++\r
++ if (setsockopt(sock_id, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) != 0)\r
++ {\r
++ char acError[80] = { "TCP-Socket setsockopt() failed: " };\r
++ strcat(acError, strerror(errno));\r
++ DEVLOG_ERROR(cg_nID_CSocketHandler, 0x10, acError);\r
++ return -1;\r
++ }\r
++\r
+ sock_addr.sin_addr.s_addr = htonl(INADDR_ANY);\r
+ if (bind(sock_id, (struct sockaddr *)&sock_addr, sizeof(struct sockaddr))\r
+ != 0) {\r
+@@ -191,8 +201,15 @@
+ int CPCSocketHandler::receiveDataOnTCP(SSocketHandlerListEntry &pa_stData) {\r
+ DEVLOG_INFO(cg_nID_CSocketHandler, 0x10, "CPCSocketHandler:: Entering ReceiveDataOnTCP\n");\r
+ \r
++ int sock_id;\r
++\r
++ if (pa_stData.m_bAcceptedConnection)\r
++ sock_id = pa_stData.m_nAcceptID;\r
++ else\r
++ sock_id = pa_stData.m_nSocketID;\r
++\r
+ receveagain: pa_stData.m_stConnectionInformation.m_pstRecvBuffer->m_nFilledSize\r
+- =recv(pa_stData.m_nAcceptID, pa_stData.m_stConnectionInformation.m_pstRecvBuffer->m_pcData, pa_stData.m_stConnectionInformation.m_pstRecvBuffer->m_nMaxSize, 0);\r
++ =recv(sock_id, pa_stData.m_stConnectionInformation.m_pstRecvBuffer->m_pcData, pa_stData.m_stConnectionInformation.m_pstRecvBuffer->m_nMaxSize, 0);\r
+ \r
+ if (pa_stData.m_stConnectionInformation.m_pstRecvBuffer->m_nFilledSize == -1) {\r
+ if (errno == EINTR) {\r
+diff -Naur forte-0.3.orig/src/arch/pc/pctimeha.cpp forte-0.3/src/arch/pc/pctimeha.cpp
+--- forte-0.3.orig/src/arch/pc/pctimeha.cpp 2008-04-22 13:31:52.000000000 +0000
++++ forte-0.3/src/arch/pc/pctimeha.cpp 2008-10-08 12:27:09.000000000 +0000
+@@ -11,6 +11,7 @@
+ #include "pctimeha.h"\r
+ #include "../../core/devexec.h"\r
+ #include <time.h>\r
++#include <sys/time.h>\r
+ \r
+ const TINT32 CPCTimerHandler::csm_nTicksPerSecond = 1000;\r
+ \r
+@@ -28,14 +29,34 @@
+ disableHandler();\r
+ }\r
+ \r
++static inline unsigned long long GetTicks(struct timeval* stTmVal, TINT32 ticksPerSecond)\r
++{\r
++ unsigned long long ret = stTmVal->tv_sec * 1000LL;// sec -> ms\r
++ ret += stTmVal->tv_usec/1000;// + us -> ms\r
++ ret /= 1000/ticksPerSecond; // ms -> ticks\r
++ return ret;\r
++}\r
++\r
+ bool CPCTimerHandler::run(){\r
+ struct timespec stReq;\r
++ struct timeval stTmNow;\r
++ unsigned long long tickStart;\r
++ unsigned long long tickNow;\r
++ unsigned long long tickCalled = 0;\r
+ stReq.tv_sec = 0;\r
+- stReq.tv_nsec = 1000000 / (csm_nTicksPerSecond / 1000);\r
++ stReq.tv_nsec = 1000000000 / (csm_nTicksPerSecond);\r
++\r
++ gettimeofday(&stTmNow, NULL);\r
++ tickNow = tickStart = GetTicks(&stTmNow, csm_nTicksPerSecond);\r
+ \r
+ while(m_bAlive){\r
+- nanosleep(&stReq, NULL);\r
++ if( (tickNow-tickStart) <= (tickCalled+1) ) {\r
++ nanosleep(&stReq, NULL);\r
++ }\r
+ nextTick(); \r
++ ++tickCalled;\r
++ gettimeofday(&stTmNow, NULL);\r
++ tickNow = GetTicks(&stTmNow, csm_nTicksPerSecond);\r
+ } \r
+ return true;\r
+ }\r