/* Create UDP socket */
int s = socket(PF_INET, SOCK_DGRAM, 0);
struct hostent *host;
host = gethostbyname(SERVER_NAME);
if(!host) { /* No such host? */ }
struct sockaddr_in server;
memset(&(server),0,sizeof(server));
server.sin_len = sizeof(server);
server.sin_family = AF_INET;
memcpy(&server.sin_addr, host->h_addr, host->h_length);
server.sin_port = htons(SERVER_PORT);
/* Construct request here */
RETRY:
sent = sendto(s,request,req_len,0,
(struct sockaddr *)(&server),sizeof(server));
FD_ZERO(&exceptfds);
FD_ZERO(&readfds);
FD_ZERO(&writefds);
FD_SET(s,&readfds);
struct timeval timeout;
timeout.tv_sec = 0;
timeout.tv_usec = 100000; /* 0.1 sec */
ready = select(s+1,&readfds,&writefds,&exceptfds,&timeout);
if(ready > 0 && !FD_ISSET(s,&readfds)) { ready = 0; }
if(!ready) goto RETRY;
socklen_t addr_len;
resp_len = recvfrom(s,response,sizeof(response),0,
(struct sockaddr *)(&server),&addr_len);
if(resp_len < 0) { /* Error */ }
/* Process response here */
End of Listing