小编Rya*_*yan的帖子

select()总是返回1; TCP连接套接字在c ++中出现问题

我正在做一个c ++项目,它需要服务器创建一个新线程来处理连接每次accept()返回一个新的套接字描述符.我使用select来决定何时发生连接尝试以及客户端通过新创建的客户端套接字(接受创建的客户端套接字)发送数据的时间.所以有两个函数和两个选择 - 一个用于轮询专用于侦听连接的套接字,一个用于轮询在新连接成功时创建的套接字.

第一种情况的行为是我所期望的 - FD_ISSET仅在请求连接时为我的侦听套接字的id返回true,并且在下次连接尝试之前为false.第二种情况不起作用,即使代码与不同的fd_set和套接字对象完全相同.我想知道这是否源于TCP套接字?由于它们的流动特性,这些套接字在被select选中时总是返回true吗?

//working snippet

struct timeval tv;
tv.tv_sec = 0;
tv.tv_usec = 500000;
fd_set readfds;
FD_ZERO(&readfds);
FD_SET(sid,&readfds);

//start server loop
for(;;){

    //check if listening socket has any client requrests, timeout at 500 ms
    int numsockets = select(sid+1,&readfds,NULL,NULL,&tv);
    if(numsockets == -1){
        if(errno == 4){
            printf("SIGINT recieved in select\n");
            FD_ZERO(&readfds);
            myhandler(SIGINT);
        }else{
            perror("server select");
            exit(1);
        }
    }

    //check if listening socket is ready to be read after select returns
    if(FD_ISSET(sid, &readfds)){
        int newsocketfd = accept(sid, (struct sockaddr*)&client_addr, …
Run Code Online (Sandbox Code Playgroud)

c++ sockets select pthreads

4
推荐指数
1
解决办法
5187
查看次数

标签 统计

c++ ×1

pthreads ×1

select ×1

sockets ×1