Это реальная проблема?
Да. Это не безопасный способ сделать это.
Вы можете передать значение напрямую вместо передачи его адреса.
pthread_create(&client_thread, NULL, echo_data, (void*) incoming_client_socket);`
и функция потока должна быть как
void* echo_data(void* client_socket) {
int socket = (int)client_socket;
/* your code */
}
Если вы хотите передать более одного элемента в поток, то вы можете обернуть его внутри структуры, создать для него указатель на структуру, выделить память, заполнить значения и передать указатель на потоки.
struct X {
int socket;
/* other members here*/
};
и
while (1) {
int incoming_client_socket = wait_for_connection(server_socket);
fprintf(stdout, "new connection accepted...\n");
struct X *ptr = malloc (sizeof(struct X));
ptr->socket = incoming_client_socket;
/* other assignment here */
pthread_create(&client_thread, NULL, echo_data, (void*)ptr);
}
А твой функционал должен выглядеть как
void* echo_data(void* client_socket) {
// for the sake of argument - suppose there's a lot of code here before we copy the socket to local variable:
struct X *ptr = (struct X *)client_socket;
// send back whatever is coming from client
return (void*)0;
}
Не забудьте освободить память.