View topic - sendto timeout time

sendto timeout time

Discussion about the general applications that run on QNX6

sendto timeout time

Postby milk_2000kimo » Fri Jul 18, 2008 2:25 am

1. Can the sendto timeout be set the time for me?
2. normal the sendto timeout time is 4~5 sec,but I want set the timeout for 10 msec
3.Where the program error?

follow is my program:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <pthread.h>
#include <sched.h>
#include <sys/neutrino.h>
#include <sys/time.h>
#include <sys/timeb.h>


#define MYSENPORT 6001 // the port users will be connecting to
#define RECVPORT 6001
#define MAXBUFLEN 1000


int sockfd;
struct sockaddr_in their_addr; // connector's address information
struct hostent *he;
int numbytes;
int argc;
char *argv[2];
int sockrecv;
struct sockaddr_in my_addr; // my address information
struct sockaddr_in talker_addr; // connector's address information
int addr_len;
char buf[MAXBUFLEN];
char word1[13] = "192.168.0.3";
char word2[10]= "abcdefghij";
char word3[10];

struct timeval tv;
socklen_t cmsg_len;
struct timeb timebuf;
char *now;
int r_inf, len, f_len ;
struct sockaddr_in from ;
struct sockaddr_in recv_test; // connector's address information

#define settimeout_debug 1

int main()
{

/////////////set scheduleing type//////////////////////////////
int err;
int policy;
int i=0;
struct sched_param param;

policy=SchedGet(0, 0, &param);
err = SchedSet( 0, 0, SCHED_FIFO, &param );
if (err == -1){
printf("Set error");
return 0;
}
word1[13] = '\0';

printf("Send to address %s\n", word1);

if ((he=gethostbyname(word1)) == NULL) { // get the host info
perror("gethostbyname");
exit(1);
}

if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
perror("socket");
exit(1);
}

their_addr.sin_family = AF_INET; // host byte order
their_addr.sin_port = htons(MYSENPORT); // short, network byte order
their_addr.sin_addr = *((struct in_addr *)he->h_addr);

#if settimeout_debug
tv.tv_sec = 2;
tv.tv_usec = 10000;
cmsg_len =sizeof(struct timeval);
setsockopt( sockfd, SOL_SOCKET, SO_SNDTIMEO , &tv, cmsg_len );
#endif

/*Read system time*/
ftime( &timebuf );
now = ctime( &timebuf.time );
printf( "\n1.The time is %.19s.%hu\n",now, timebuf.millitm );


while(1)
{


if ((numbytes=sendto(sockfd, word2, 78, 0,
(struct sockaddr *)&their_addr, sizeof(struct sockaddr))) == -1)

{
perror("\nsocket sendto");
fprintf( stderr,"sendto: %s\n", strerror( errno ) );

/*Read system time*/
ftime( &timebuf );
now = ctime( &timebuf.time );
printf( "2.The time is %.19s.%hu\n",now, timebuf.millitm );

i++;
if(i>5) goto end;

}
}

end:
close(sockfd);

return(0);

}


The program's result following

Send to address 192.168.0.3

1.The time is Fri Jul 18 18:05:42.805


socket sendto: Host is down
sendto: Host is down
2.The time is Fri Jul 18 18:05:52.228

socket sendto: Host is down
sendto: Host is down
2.The time is Fri Jul 18 18:05:52.228

socket sendto: Host is down
sendto: Host is down
2.The time is Fri Jul 18 18:05:52.229

socket sendto: Host is down
sendto: Host is down
2.The time is Fri Jul 18 18:05:52.229

socket sendto: Host is down
sendto: Host is down
2.The time is Fri Jul 18 18:05:52.230

socket sendto: Host is down
sendto: Host is down
2.The time is Fri Jul 18 18:05:52.231
milk_2000kimo
Active Member
 
Posts: 77
Joined: Fri May 19, 2006 9:29 am

Return to QNX6 - Applications

Who is online

Users browsing this forum: No registered users and 1 guest