Use a char buffer instead.
#include <stdint.h> // uint32_t
void func(uint32_t size1, void *arg1, uint32_t size2, void *arg2) {
uint32_t nsize1 = htonl(size1), nsize2 = htonl(size2);
uint32_t size = sizeof(size1) + sizeof(size2) + size1 + size2;
char *buf = malloc(size);
memcpy(buf, &nsize1, sizeof(nsize1));
memcpy(buf + sizeof(size1), arg1, size1);
memcpy(buf + sizeof(size1) + size1, &nsize2, sizeof(nsize2));
memcpy(buf + size - size2, arg2, size2);
// sock and dest_addr need to come from somewhere
sendto(sock, buf, size, 0, dest_addr, sizeof(dest_addr));
free(buf);
}