2 #include "platform_adpt.h"
9 void sig_handler(int sig)
11 if(sig == SIGINT || sig == SIGTERM)
17 int sendData(RUDPSOCKET s)
21 memset(line, '1' + i%36, 3000);
24 unsigned long nTotal = 0, nByt = 0;
25 t0 = t_prev = time(NULL);
26 for(i=0; 0<50000 && !g_quit; i++)
29 PA_IoVecSetPtr(&v[0], line);
30 PA_IoVecSetPtr(&v[1], line);
31 PA_IoVecSetPtr(&v[2], line);
32 PA_IoVecSetLen(&v[0], 230);
33 PA_IoVecSetLen(&v[1], 1100);
34 PA_IoVecSetLen(&v[2], 100);
38 rlt = RUDPSendV(s, 0, v, 3, 0);
41 rlt = RUDPSendV(s, 0/*1*/, v, 3, 0);
44 if(rlt == ERUDP_AGAIN)
49 printf("RUDPSend error: %d\n", rlt);
53 int onesent = PA_IoVecGetLen(&v[0]) + PA_IoVecGetLen(&v[1]) + PA_IoVecGetLen(&v[2]);
60 fprintf(stderr, "rate: Avg.: %d B/s, Rt. %d B/s \r", nTotal/(t-t0), nByt);
67 printf("***************************************\n");
71 RUDPSend(s, 0, line, 1, 0);
72 printf("all data sent.\n");
77 void recvData(RUDPSOCKET a)
84 struct timeval tv = { 0, 500000 };
85 int flag = RUDPSELECT_READABLE, rlt;
86 if( (rlt = RUDPSelectSock(a, -1, flag, &tv)) > 0)
88 if((len = RUDPRecv(a, &chno, line, 2000, 0)) > 0)
92 //fprintf(stderr, "Packet %d from chn 0\n", cnt);
96 //printf("%s\n", line);
97 if(line[0] == '\0') break;
101 if(len == ERUDP_AGAIN)
106 fprintf(stderr, "RUDPRecv: %d\n", len);
112 if(rlt == ERUDP_AGAIN)
117 printf("ERROR: RUDPSelectSock: %d\n", rlt);
121 printf("receiving finished.\n");
123 void *threadSend(void *p)
125 RUDPSOCKET a = (RUDPSOCKET*)p;
126 pthread_detach(pthread_self());
136 void* threadRecv(void *p)
138 RUDPSOCKET a = (RUDPSOCKET*)p;
139 pthread_detach(pthread_self());
150 //Usage: rudpclt [-a] [server] [port]
151 // ------- -a: asynchronous
152 // ------- server: default is 127.0.0.1,
153 // ------- port: 5001 by default
154 #define SERVER_SEND 0x01
155 #define SERVER_RECV 0x02
156 int main(int argc, char *argv[])
158 struct sockaddr_in sai;
170 memset(&sai, 0, sizeof(sai));
171 sai.sin_family = AF_INET;
172 sai.sin_addr.s_addr = inet_addr("127.0.0.1");
173 sai.sin_port = htons(5001);
174 sa_len = sizeof(sai);
176 for(i=1; i<argc; i++)
178 if(argv[i][0] == '-')
180 if(strcmp("-a", argv[i]) == 0)
184 else if(strcmp("--recvonly", argv[i]) == 0)
186 else if(strcmp("--sendonly", argv[i]) == 0)
188 else if(strcmp("-?", argv[i]) == 0)
190 printf("Usage: rudpclt [-a] [server] [port]\n"
191 "\t-a: asynchronous\n"
192 "\tserver: default is 127.0.0.1\n"
193 "\tport: 5001 by default\n");
198 else if(strchr(argv[i], '.'))
199 sai.sin_addr.s_addr = inet_addr(argv[i]);
201 sai.sin_port = htons(atoi(argv[i]));
205 //opt = 256; RUDPSetSockOpt(s, OPT_RUDP_RCVBUF, &opt, sizeof(int));
206 if( (rlt = RUDPConnect(s, (struct sockaddr*)&sai, sizeof(sai))) == 0)
208 opt = 256; RUDPSetSockOpt(s, OPT_RUDP_SNDBUF, &opt, sizeof(int));
209 if(async) RUDPSetSockOpt(s, OPT_NBLK, &async, sizeof(async));
211 RUDPSend(s, 0, &cmd, 1, 0);
213 if(cmd & SERVER_RECV) pthread_create(&thd, NULL, threadSend, (void*)s);
216 else if(rlt == -ERUDP_AGAIN)