Merge branch 'master' of ssh.ucc.asn.au:tpg/acess2
authorJohn Hodge <[email protected]>
Sun, 7 Oct 2012 08:57:42 +0000 (16:57 +0800)
committerJohn Hodge <[email protected]>
Sun, 7 Oct 2012 08:57:42 +0000 (16:57 +0800)
1  2 
AcessNative/ld-acess_src/request.c

@@@ -190,7 -190,6 +190,7 @@@ int SendRequest(tRequestHeader *Request
                printf("\n");
        }
        #endif
 +      #if DEBUG
        {
                 int    i;
                char    *data = (char*)&Request->Params[Request->NParams];
                }
                DEBUG_S("\n");
        }
 +      #endif
        
        // Send it off
        SendData(Request, RequestSize);
        if( Request->CallID == SYS_EXIT )       return 0;
  
        // Wait for a response (no timeout)
 -      return ReadData(Request, ResponseSize, 0);
 +      ReadData(Request, sizeof(*Request), 0);
 +      // TODO: Sanity
 +      size_t  recvbytes = sizeof(*Request), expbytes = Request->MessageLength;
 +      char    *ptr = (void*)Request->Params;
 +      while( recvbytes < expbytes )
 +      {
 +              size_t  len = ReadData(ptr, expbytes - recvbytes, 1000);
 +              if( len == -1 ) {
 +                      return -1;
 +              }
 +              recvbytes += len;
 +              ptr += len;
 +      }
 +      if( recvbytes > expbytes ) {
 +              // TODO: Warning
 +      }
 +      return recvbytes;
  }
  
  void SendData(void *Data, int Length)
@@@ -293,7 -275,7 +293,7 @@@ int ReadData(void *Dest, int MaxLength
        
        if( !ret ) {
                printf("[ERROR %i] Timeout reading from socket\n", giSyscall_ClientID);
-               return 0;       // Timeout
+               return -2;      // Timeout
        }
        
        #if USE_TCP
                perror("ReadData");
                exit(-1);
        }
+       if( ret == 0 ) {
+               fprintf(stderr, "[ERROR %i] Connection closed.\n", giSyscall_ClientID);
+               exit(0);
+       }
        
        DEBUG_S("%i bytes read from socket\n", ret);
        

UCC git Repository :: git.ucc.asn.au