int main(int argc, char **argv) { int sock; ssize_t ret = 0; struct sockaddr_sv sv; unsigned long sid = atoi(argv[1]); sock = socket_sv(AF_SERVAL, SOCK_DGRAM, 0); if (sock == -1) { fprintf(stderr, "could not create SERVAL socket: %s\n", strerror(errno)); return -1; } memset(&sv, 0, sizeof(sv)); sv.sv_family = AF_SERVAL; sv.sv_srvid.s_sid32[0] = htonl(sid); payload p; while (1) { ret = sendto_sv(sock, &p, sizeof(payload), 0, (struct sockaddr *)&sv, sizeof(sv)); if (ret == -1) { fprintf(stderr, "sendto: %s\n", strerror_sv(errno)); close(sock); return -1; } } close(sock); return ret; }
int main(int argc, char **argv) { int sock; unsigned long data = 8; ssize_t ret; struct sockaddr_sv addr; sock = socket_sv(AF_SERVAL, SOCK_DGRAM, 0); if (sock == -1) { fprintf(stderr, "could not create SERVAL socket: %s\n", strerror(errno)); return -1; } addr.sv_family = AF_SERVAL; addr.sv_srvid.s_sid16[0] = htons(7); ret = bind_sv(sock, (struct sockaddr *)&addr, sizeof(addr)); if (ret == -1) { fprintf(stderr, "bind: %s\n", strerror_sv(errno)); close_sv(sock); return -1; } addr.sv_srvid.s_sid16[0] = htons(8); ret = sendto_sv(sock, &data, sizeof(data), 0, (struct sockaddr *)&addr, sizeof(addr)); if (ret == -1) { fprintf(stderr, "sendto: %s\n", strerror_sv(errno)); } close_sv(sock); return ret; }
int main(int argc, char **argv) { int sock; const char *ipdst = "192.168.56.102"; unsigned long data = 8; ssize_t ret = 0; struct { struct sockaddr_sv sv; struct sockaddr_in in; } addr; if (argc > 1) { ipdst = argv[1]; } sock = socket_sv(AF_SERVAL, SOCK_DGRAM, 0); if (sock == -1) { fprintf(stderr, "could not create SERVAL socket: %s\n", strerror(errno)); goto out; } memset(&addr, 0, sizeof(addr)); addr.sv.sv_family = AF_SERVAL; addr.sv.sv_srvid.s_sid16[0] = htons(6); addr.in.sin_family = AF_INET; if (inet_pton(AF_INET, ipdst, &addr.in.sin_addr) != 1) { fprintf(stderr, "Bad advisory IP address %s\n", ipdst); goto out; } printf("My serviceID is \'%s\'\n", service_id_to_str(&addr.sv.sv_srvid)); ret = bind(sock, (struct sockaddr *)&addr, sizeof(addr.sv)); if (ret == -1) { fprintf(stderr, "bind: %s\n", strerror_sv(errno)); goto out; } addr.sv.sv_srvid.s_sid16[0] = htons(7); printf("Sending to \'%s\' %s\n", service_id_to_str(&addr.sv.sv_srvid), ipdst); ret = sendto_sv(sock, &data, sizeof(data), 0, (struct sockaddr *)&addr, sizeof(addr)); if (ret == -1) { fprintf(stderr, "sendto: %s\n", strerror_sv(errno)); } out: close(sock); return ret; }
int main(int argc, char **argv) { int sock; const char *ipdst = "192.168.56.102"; unsigned long data = 10; ssize_t ret = 0; struct { struct sockaddr_sv sv; struct sockaddr_in in; } addr; if (argc > 1) { ipdst = argv[1]; } sock = socket_sv(AF_SERVAL, SOCK_DGRAM, 0); if (sock == -1) { fprintf(stderr, "could not create SERVAL socket: %s\n", strerror(errno)); goto out; } /* struct addrinfo* a = NULL; struct addrinfo hints; memset(&hints, 0, sizeof(struct addrinfo)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_PASSIVE; getaddrinfo(NULL, "3900", &hints, &a); struct addrinfo *res; for(res = a; res != NULL; res = res->ai_next) { struct sockaddr_in* saddr = (struct sockaddr_in*)res->ai_addr; printf("hostname: %s\n", inet_ntoa(saddr->sin_addr)); } */ memset(&addr, 0, sizeof(addr)); addr.sv.sv_family = AF_SERVAL; addr.sv.sv_srvid.s_sid16[0] = htons(6); addr.in.sin_family = AF_INET; if (inet_pton(AF_INET, ipdst, &addr.in.sin_addr) != 1) { fprintf(stderr, "Bad advisory IP address %s\n", ipdst); goto out; } printf("My serviceID is \'%s\'\n", service_id_to_str(&addr.sv.sv_srvid)); ret = bind(sock, (struct sockaddr *)&addr, sizeof(addr.sv)); if (ret == -1) { fprintf(stderr, "bind: %s\n", strerror_sv(errno)); goto out; } addr.sv.sv_srvid.s_sid32[0] = htonl(10); printf("Sending to \'%s\' %s\n", service_id_to_str(&addr.sv.sv_srvid), ipdst); ret = sendto_sv(sock, &data, sizeof(data), 0, (struct sockaddr *)&addr, sizeof(addr.sv)); if (ret == -1) { fprintf(stderr, "sendto: %s\n", strerror_sv(errno)); } out: close(sock); return ret; }
int client(char *ip) { struct sockaddr_sv srvaddr; struct sockaddr_sv cliaddr; struct sockaddr_in myaddr; struct sockaddr_in dummyaddr; int dummysize; int ret = 0; unsigned N = 2000; char sbuf[N]; char rbuf[N+1]; sock_backchannel = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (sock_backchannel == -1) { fprintf(stderr, "socket: %s\n", strerror_sv(errno)); return -1; } set_reuse_ok(sock_backchannel); memset((char *)&myaddr, 0, sizeof(myaddr)); myaddr.sin_family = AF_INET; inet_aton(ip, &myaddr.sin_addr); myaddr.sin_port = htons(BACKCHANNEL_PORT); bind(sock_backchannel, (struct sockaddr *)&myaddr, sizeof(myaddr)); bzero(&srvaddr, sizeof(srvaddr)); srvaddr.sv_family = AF_SERVAL; srvaddr.sv_srvid.s_sid32[0] = htonl(ECHO_SERVICE_ID); sock = socket_sv(AF_SERVAL, SOCK_DGRAM, SERVAL_PROTO_UDP); if (sock == -1) { fprintf(stderr, "socket: %s\n", strerror_sv(errno)); return -1; } set_reuse_ok(sock); bzero(&cliaddr, sizeof(cliaddr)); cliaddr.sv_family = AF_SERVAL; cliaddr.sv_srvid.s_sid32[0] = htonl(CLIENT_SERVICE_ID); ret = bind_sv(sock, (struct sockaddr *) &cliaddr, sizeof(cliaddr)); if (ret < 0) { fprintf(stderr, "bind: %s\n", strerror_sv(errno)); return -1; } ret = connect_sv(sock, (struct sockaddr *)&srvaddr, sizeof(srvaddr)); if (ret < 0) { fprintf(stderr, "connect: %s\n", strerror_sv(errno)); return -1; } printf("connected\n"); while (1) { sprintf(sbuf, "ping %s %d", ip, BACKCHANNEL_PORT); printf("client: sending \"%s\" to service ID %s\n", sbuf, service_id_to_str(&srvaddr.sv_srvid)); ret = sendto_sv(sock, sbuf, strlen(sbuf), 0, (struct sockaddr *)&srvaddr, sizeof(srvaddr)); if (ret < 0) { fprintf(stderr, "send failed (%s)\n", strerror_sv(errno)); break; } ret = recvfrom(sock_backchannel, rbuf, N, 0, (struct sockaddr *)&dummyaddr, &dummysize); rbuf[ret] = 0; if (ret == 0) { printf("server closed\n"); break; } else { printf("Response from server: %s\n", rbuf); if (strcmp(sbuf, "quit") == 0) break; } sleep(1); } if (close_sv(sock) < 0) fprintf(stderr, "close: %s\n", strerror_sv(errno)); return ret; }