thanks hammer, but i've gone for the alarm signal approach.
its pretty simple (as i know signals) and seems less of a hack.
Code:
struct sigaction action;
void timed_out(){}
.....
s = socket(PF_INET,SOCK_STREAM,0); //create socket
if(s == -1)
return
//initialise server struct
memset(&adr_srvr,0,sizeof adr_srvr);
adr_srvr.sin_family = AF_INET;
adr_srvr.sin_port = htons(atoi(srvr_port));
adr_srvr.sin_addr.s_addr = inet_addr(srvr_addr);
//verify staright ip address or resolved ip address
if(adr_srvr.sin_addr.s_addr == INADDR_NONE)
{
hp = gethostbyname(ip);
if(!hp)
return "0 - Hostname does not exist.";
if(hp->h_addrtype == AF_INET)
adr_srvr.sin_addr.s_addr = inet_addr(inet_ntoa(*(struct in_addr *) hp->h_addr_list[0]));
if(adr_srvr.sin_addr.s_addr == INADDR_NONE)
return "0 - Bad IP address";
}
len_inet = sizeof adr_srvr;
//initialise signal handler
bzero(&action, sizeof(action));
action.sa_handler = timed_out;
action.sa_flags = 0;
sigaction(SIGALRM, &action, 0);
alarm(5); //start alarm count - 5 secs
z = connect(s,&adr_srvr, len_inet); //attempt to connect
alarm(0); //turn off alarm
if(z == -1)
return "0 - Cannot connect to host.";