小编ric*_*rim的帖子

选择时的套接字阻塞和超时

我目前正在创建一个回显服务器,它在空闲的 maxWaitTime 之后断开客户端。

我希望程序会阻塞套接字,直到客户端发送数据,但是当我在 gdb 中运行该程序时,它会通过选择并在 Readline 上阻塞。

我知道 retval = 0 每当它通过选择并且 fd_set 袜子转到 [256, (31 个零)] 并且选择之后,袜子转到 [32 个零]。

连接的接受发生在另一个函数中,并且连接描述符被传递给 echo 函数。

如果您能够帮助我指明正确的方向,或者让我知道如何在一段时间后断开客户端连接,请告诉我。

如果您需要任何进一步的信息,请告诉我。

提前致谢!

    FD_ZERO(&sock);
    FD_SET(sockfd,&sock);

    int opt = 3;

    setsockopt(sockfd, SOL_SOCKET, SO_RCVLOWAT,&opt,sizeof(opt));

    timeout.tv_sec = maxWaitTime;
    timeout.tv_usec = 0;

    for ( ; ; ) {
            FD_SET(sockfd,&sock);

            printf("Set is %d\n",FD_ISSET(sockfd,&sock));

            int retval;
            retval = select(1, &sock, NULL, NULL, &timeout);

            if(retval)
            {
                    quitProgram(number);
            }
            else
            {
            printf("n is %d\n",retval);

            if ( (n = Readline(sockfd, line, MAXLINE)) == 0)
            { …
Run Code Online (Sandbox Code Playgroud)

c sockets select

2
推荐指数
1
解决办法
3万
查看次数

标签 统计

c ×1

select ×1

sockets ×1