Идентификаторы сокетов (которые на самом деле являются файловыми дескрипторами) мгновенно уникальны в течение всего срока их службы. Это означает следующее:
int my_fd socket(...);
/* during this time no calls to socket will ever return my_fd */
close(my_fd);
Я не уверен, что конкретно вы подразумеваете под идентификатором пользователя, я думаю, что это не сработает, потому что, если один и тот же пользователь подключится дважды, у них будут разные fds (вероятно). Однако, если вы просто хотите определить текущие соединения и не поддерживать постоянство идентификаторов в сеансах, то это именно то, что нужно сделать.