#include #include #include #include #include #include #include #include static char buffer[1024 * 1024]; int main(void) { struct sockaddr_in sa; size_t count = 0; int listen_s; size_t size; int rv; int s; listen_s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (listen_s < 0) return 1; memset(&sa, 0, sizeof(sa)); sa.sin_family = AF_INET; sa.sin_addr.s_addr = inet_addr("127.0.0.1"); sa.sin_port = htons(8806); rv = 1; if (setsockopt(listen_s, SOL_SOCKET, SO_REUSEADDR, (void *)&rv, sizeof(rv)) < 0) { return 1; } if (bind(listen_s, (struct sockaddr *)&sa, sizeof(sa)) < 0) { fprintf(stderr, "bind() failed: %s\n", strerror(errno)); return 1; } if (listen(listen_s, 1) != 0) return 1; s = accept(listen_s, NULL, NULL); if (s < 0) return 1; if (read(s, &size, sizeof(size)) != sizeof(size)) return 1; if (size >= sizeof(buffer)) size = sizeof(buffer) - 1; while (count < size) { rv = read(s, buffer + count, size - count); if (rv <= 0) return 1; count += rv; } /* set "received" uprobe here */ printf("recv (%d): received message: %s\n", getpid(), buffer); close(s); close(listen_s); return 0; }