Когда вы звоните accept(2)
, вы можете выбрать получение адреса клиента.
int accept(int socket, struct sockaddr *restrict address,
socklen_t *restrict address_len);
Вам нужно сохранить эти адреса, а затем send(2)
для каждого, что вам нужно отправить.
Так что рабочий процесс должен быть примерно таким:
- Вести список подключенных клиентов. Изначально список пуст, конечно
- Когда вы принимаете соединение, вставьте его данные в этот список (адрес и сокет, возвращаемый
accept(2)
).
- Когда вам нужно отправить что-то каждому клиенту, просто просмотрите список и отправьте его (используя сохраненный сокет)
Единственная сложность заключается в том, что socklen_t *restrict address_len
является аргументом значение-результат, поэтому с этим нужно быть осторожным.