我需要识别Socket的唯一ID。这是使用套接字描述符的正确方法吗? 套接字描述符是唯一的吗?
例如
QTcpSocket* pClientSocket = nextPendingConnection();
int id = pClientSocket->socketDescriptor();
User user(id);
/*...*/
void slotReadClient(){
socket = (QTcpSocket*)sender();
user = users.find(socket->socketDescriptor());
user->doAny();
}
答案 0 :(得分:2)
套接字ID(实际上是文件描述符)在其生命周期内是即时唯一的。含义如下:
int my_fd socket(...);
/* during this time no calls to socket will ever return my_fd */
close(my_fd);
我不确定用户ID的含义细节,我认为这不起作用,因为如果同一个用户连接两次,他们会有不同的fds(可能)。但是,如果您只是想要一种识别当前连接的方法,并且不会跨会话进行id持久性,那么这正是应该如何完成的。