int main(int argc, char **argv) { su_peer_t sar; char ip[256], errinfo[256]; signal(SIGINT, sigint); /* Targer address domain parse */ if (domain_parse(argv[1], ip, sizeof(ip), errinfo, sizeof(errinfo)) < 0) err_quit("Destination parse failed %s", errinfo); log_msg("Destination %s", ip); if (argc != 2 && argc != 3) err_quit("usage: udpcli <Destination> [Port Default 7]"); #if 0 struct sockaddr_in servaddr; bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = PF_INET; servaddr.sin_port = htons(argc == 2 ? 7 : atoi(argv[2])); Inet_pton(AF_INET, ip, &servaddr.sin_addr); #else struct sockaddr_in6 servaddr; char ip6[INET6_ADDRSTRLEN]; bzero(&servaddr, sizeof(servaddr)); servaddr.sin6_family = PF_INET6; servaddr.sin6_port = htons(argc == 2 ? 7 : atoi(argv[2])); // IPv4 to IPv6 snprintf(ip6, sizeof(ip6),"::ffff:%s", ip); log_msg("Target IPv6 %s", ip6); Inet_pton(AF_INET6, ip6, &servaddr.sin6_addr.s6_addr); #endif #if 1 /* Using random free port */ if (su_peer_create(&sar, (SA*)&servaddr, sizeof(servaddr)) < 0) err_quit("su_peer_create error"); #else /* Using bind configure port */ if (su_peer_create_bind(&sar, 10000, (SA*)&servaddr, sizeof(servaddr)) < 0) err_sys("su_peer_create_bind error"); #endif /* Install the reliable request handler */ su_peer_reliable_request_handle_install(&sar, udpin_reliable); /* Install the ordinary request handler */ su_peer_ordinary_request_handle_install(&sar, udpin_ordinary); #if 1 // send reliable data to target //cli_su_peer_request(stdin, &sar); cli_su_peer_request_random(&sar); #else // send ordinary data to target cli_su_peer_send(stdin, &sar); #endif return 0; exit(0); }
int su_peer_create(su_peer_t *psar, const SA *ptoaddr, socklen_t servlen) { return su_peer_create_bind(psar, 0, ptoaddr, servlen); }