如何在c++中设置登录超时

How to set a timeout for a login in C++?

本文关键字:设置 登录 超时 c++      更新时间:2023-10-16

我在用c++编写的服务器上编写一个简单的登录超时。代码是这样的:

char username[this->BUFSIZE];
    clean(username);
    char password[this->BUFSIZE];
    clean(password);
    send(client_fd, "USER", 4, 0);
    //Start timer
    time_t end,start;
    double dif;
    time (&start);
    recv(client_fd,username,BUFSIZE,0);
    send(client_fd, "PASS", 4, 0);
    recv(client_fd,password,BUFSIZE,0);
    //End timer
    time (&end);
    dif = difftime (end,start);
            //If dif>10 seconds disconnect the client.
    if(dif>10)
        close(client_fd);

Ok,它工作得很好,但有一个问题:只有当客户端输入用户+密码时才会断开连接。我的目标是定时器必须在10秒内关闭连接,无论客户端是否登录。

有可能吗?谢谢你!

可以使用select()等待client_fd上的数据。select支持超时值,超时后返回0。如果数据准备好了,select将返回有数据挂起的描述符的数目。

您还可以使用timeval结构设置套接字选项SO_RCVTIMEO。这将导致recv在超时发生后返回。

使用信号- SIGALRM,在进入recv之前设置,当它触发时关闭连接。

或者使用一个完整的框架,如asio,它将提供计时器等