/* Posluša na TCP vratih 6969, prejme eno povezavo, vsako sekundo nanjo izpiše LF in piše statistiko, dobljeno iz jedrnega modula tcp_times. */ #include #include "tcp_times.h" #include #include #include #include #include #include #include #include #include int main (void) { int tcp_socket = socket(AF_INET6, SOCK_STREAM, 0); if (tcp_socket == -1) { perror("socket"); return 1; } struct sockaddr_in6 sa6 = { .sin6_family = AF_INET6, .sin6_port = htons(6969), .sin6_addr = IN6ADDR_ANY_INIT, }; if (bind(tcp_socket, (struct sockaddr *) &sa6, sizeof sa6) == -1) { perror("bind"); return 1; } if (listen(tcp_socket, 1 /* only one client is handled*/) == -1) { perror("listen"); return 1; } int flow = accept(tcp_socket, NULL, NULL); if (flow == -1) { perror("accept"); return 1; } int tcp_times = open("/proc/tcp_times", O_RDWR); struct tcp_times tt = { .fd = flow, }; char buf = '\n'; while (true) { if (ioctl(tcp_times, 0, &tt) == -1) { perror("ioctl"); return 1; } printf(TCP_TIMES_PRINTF_FORMAT "\n", TCP_TIMES_PRINTF_VARIABLES(tt.)); if (send(flow, &buf, 1, MSG_NOSIGNAL) == -1) { perror("write"); return 1; } sleep(1); } }