首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

阻塞socket的recv,有没有办法退出循环解决方案

2012-05-21 
阻塞socket的recv,有没有办法退出循环服务端:C/C++ codefcmd popen(./test,r)if(fcmd 0){bail(

阻塞socket的recv,有没有办法退出循环
服务端:

C/C++ code
        fcmd = popen("./test","r");        if(fcmd == 0)        {            bail("popen() failed");            close(detect_sock);            return false;        }        memset(databuf, 0, PIPE_BUF - 1);        int bytes = 0;        while((bytes = read(fileno(fcmd), databuf, PIPE_BUF)) > 0)        {            replace(databuf, "\n", "\r\n", PIPE_BUF-1);            write(detect_sock, databuf, strlen(databuf));            memset(databuf, 0, PIPE_BUF - 1);        }        memset(databuf, 0, PIPE_BUF - 1);        if(pclose(fcmd) != 0)        {            printf("Non-zero return value from DIY command,error no is %d\r\n",errno);        }    close(detect_sock);


客户端:
C/C++ code
    while ((bytes = recv(detect_sock, databuf, sizeof(databuf),0) > 0)) {        memset(databuf,0,sizeof(databuf));        bytesread += bytes;    }    closesocket(detect_sock);


现在发现服务端运行完了close(detect_sock);但是客户端还是是阻塞在recv这个函数中,有没有办法,当服务端关闭了端口之后,客户端退出循环????



[解决办法]
先peek一下,有数据才recv
[解决办法]
肿么会呢,客户端应该读到EOF的,就是recv返回值为0.
[解决办法]
用异步事件通知的

wsaayaselect:

如果服务段关闭,客户端会收到通知。


客户端收到通知以后,就可以退出循环了

热点排行