Как идентифицировать (или подключить) идентификатор пользователя с помощью входящего сокета? - PullRequest
0 голосов
/ 26 января 2011

Мне нужно идентифицировать уникальный идентификатор Socket.Это правильный способ использовать дескриптор сокета?Является ли дескриптор сокета уникальным?

Например

QTcpSocket* pClientSocket = nextPendingConnection();
int id = pClientSocket->socketDescriptor();
User user(id);

/*...*/

void slotReadClient(){
socket = (QTcpSocket*)sender();
user = users.find(socket->socketDescriptor());
user->doAny();
}

1 Ответ

2 голосов
/ 26 января 2011

Идентификаторы сокетов (которые на самом деле являются файловыми дескрипторами) мгновенно уникальны в течение всего срока их службы. Это означает следующее:

int my_fd socket(...);

/* during this time no calls to socket will ever return my_fd */

close(my_fd);

Я не уверен, что конкретно вы подразумеваете под идентификатором пользователя, я думаю, что это не сработает, потому что, если один и тот же пользователь подключится дважды, у них будут разные fds (вероятно). Однако, если вы просто хотите определить текущие соединения и не поддерживать постоянство идентификаторов в сеансах, то это именно то, что нужно сделать.

...