Да, вы не можете взять адрес чего-то, что не является lvalue , то есть объектом с адресом.Результат оператора sizeof
- это просто значение, это не объект с адресом.
Вам нужно создать локальную переменную, чтобы вы могли взять ее адрес.
Например,
socklen_t addrlen = sizeof client[i];
newsock = accept(fd_skt, (struct sockaddr *)&client[i], &addrlen));
Кроме того, struct sockaddr_in* client;
объявляет указатель, а не массив.Чтобы использовать client
в качестве массива, вам нужно назначить его динамически распределенному массиву в некоторый момент перед вызовом accept
.Я предполагаю, что это то, что вы делаете, когда говорите: «Я создаю, используя malloc».
В качестве альтернативы вы можете фактически объявить client
как массив.
struct sockaddr_in client[MAX_CLIENTS];