client.cc
#include <sys/types.h>
#include <time.h>
#include "TCPSocket.h"
#include "client.h"
int client::query(const char *hostName, const char *serviceName,
time_t timeOut,
const void *pParam, long lParamSize,
void **ppResult, long *plResultSize)
{
time_t maxTime, timeNow;
int timeRemaining = 0;
timeNow = time();
maxTime = time() + timeout;
while (TRUE) {
timeRemaining = maxTime - time(NULL);
if (timeRemaining <= 0)
break;
TCPSocket conn;
if (conn.init(hostName, serviceName) == FALSE) {
cerr << conn.ErrorMessage() << endl;
sleep(1);
continue;
}
if (conn.Connect() == FALSE) {
cerr << conn.ErrorMessage() << endl;
sleep(1);
continue;
}
if (conn.Send((const char *)pParam, lParamSize) == FALSE) {
cerr << conn.ErrorMessage() << endl;
conn.Close();
sleep(1);
continue;
}
timeRemaining = maxTime - time(NULL);
timeRemaining = timeRemaining > 0 ? timeRemaining : 0;
if (conn.Poll(timeRemaining, TRUE) == FALSE) {
cerr << conn.ErrorMessage() << endl;
conn.Close();
sleep(1);
continue;
}
if (conn.RecvAll(ppResult, plResultSize) == FALSE) {
cerr << conn.ErrorMessage() << endl;
conn.Close();
sleep(1);
continue;
}
return TRUE;
}
}