- if( send(gSocket, request, requestLen, 0) != requestLen ) {
- fprintf(stderr, "SendRequest: send() failed\n");
- perror("SendRequest - send");
- free( request );
- return -1;
+ SendData(Request, RequestSize);
+
+ // Wait for a response (no timeout)
+ return ReadData(Request, ResponseSize, 0);
+}
+
+void SendData(void *Data, int Length)
+{
+ int len;
+
+ #if USE_TCP
+ len = send(Data, Length, 0);
+ #else
+ len = sendto(gSocket, Data, Length, 0,
+ (struct sockaddr*)&gSyscall_ServerAddr, sizeof(gSyscall_ServerAddr));
+ #endif
+
+ if( len != Length ) {
+ fprintf(stderr, "[ERROR %i] ", giSyscall_ClientID);
+ perror("SendData");
+ exit(-1);
+ }
+}
+
+int ReadData(void *Dest, int MaxLength, int Timeout)
+{
+ int ret;
+ fd_set fds;
+ struct timeval tv;
+ struct timeval *timeoutPtr;
+
+ FD_ZERO(&fds);
+ FD_SET(gSocket, &fds);
+
+ if( Timeout ) {
+ tv.tv_sec = Timeout;
+ tv.tv_usec = 0;
+ timeoutPtr = &tv;
+ }
+ else {
+ timeoutPtr = NULL;