2 * In this demo, two peers create(does not listen)
3 * a rudp socket and connect to each other, simultaneously.
9 #include "platform_adpt.h"
14 PA_THREAD_RETTYPE __STDCALL recv_thread(void *p)
16 struct timeval tv = { 1, 0 };
24 RUDP_FD_SET(udp_sock, rset, nr);
25 RUDP_SET(s, 0, rset, nr);
26 if((rlt = RUDPSelect(rset, &nr, NULL, NULL, NULL, NULL, &tv)) > 0)
30 if(RUDP_ISSET(s, rset, nr))
32 len = RUDPRecv(s, &chno, line, 1000, 0);
35 else if(RUDP_FD_ISSET(udp_sock, rset, nr))
38 int sa_len = sizeof(sa);
39 len = recvfrom(udp_sock, line, 1000, 0, &sa, &sa_len);
45 printf("%s: %s\n", rudp?"rudp":"udp", line);
49 printf("Recv Error %d\n", len);
60 printf("RUDPSelect: %d\n", rlt);
64 return (PA_THREAD_RETTYPE)0;
67 int main(int argc, char *argv[])
69 struct sockaddr_in sai;
73 if(argc < 2) { printf("simulconn remotehost [localport remoteport]\n"); return -1; }
80 memset(&sai, 0, sizeof(sai));
81 sai.sin_family = AF_INET;
82 sai.sin_port = htons(argc>2?atoi(argv[2]):5001);
83 if(RUDPBind(s, (struct sockaddr*)&sai, sizeof(sai)) < 0)
85 printf("bind to local port %d failed\n", ntohs(sai.sin_port));
90 //RUDPSetSockOpt(s, OPT_ADHOC, &i, sizeof(i));
92 sai.sin_port = htons(ntohs(sai.sin_port)+1);
93 udp_sock = socket(AF_INET, SOCK_DGRAM, 0);
94 if(bind(udp_sock, (struct sockaddr*)&sai, sizeof(sai)) < 0)
102 if(argc > 3) sai.sin_port = htons(atoi(argv[3]));
103 sai.sin_addr.s_addr = inet_addr(argv[1]);
105 printf("begin connection....\n");
108 if(RUDPConnect(s, (struct sockaddr*)&sai, sizeof(sai)) == 0)
115 printf("connection trying %d\n", i);
120 sai.sin_port = htons(ntohs(sai.sin_port)+1);
125 thd = PA_ThreadCreate(recv_thread, NULL);
127 while(fgets(line, 1000, stdin))
129 int rlt, flag = RUDPSELECT_WRITABLE;
130 struct timeval tv = { 0, 0 };
131 rlt = RUDPSelectSock(s, 0, flag, &tv);
136 if( (rlt = RUDPSend(s, 0, line, strlen(line), 0)) < 0)
138 printf("RUDPSend: %d\n", rlt);
143 sendto(udp_sock, line, strlen(line), 0, (struct sockaddr*)&sai, sizeof(sai));
151 printf("connect to %s failed\n", argv[1]);
155 printf("press Enter to terminate.");
156 fgets(line, 1000, stdin);