小编use*_*210的帖子

编译器或升级库的错误?

在Windows 7下的vs2008 Release(Win32)模式下编译后,这个程序(它已经从较大的程序缩小)总是崩溃.我不熟悉汇编代码,不知道它是编译器或boost :: ends_with的错误或者boost :: asio :: buffers_iterator.它可以在Ubuntu中使用g ++编译和执行,没有任何问题.

人们说它不太可能成为编译器的错误,但是当在调试模式(或禁用优化)中编译时,问题确实消失了.

我已经坚持这个问题了好几个小时.任何帮助表示赞赏.提前致谢.

#include <iostream>
#include <string>
#include <boost/asio.hpp>
#include <boost/algorithm/string.hpp>

typedef boost::asio::buffers_iterator<boost::asio::const_buffers_1> iterator_t;
typedef boost::iterator_range<iterator_t> range_t;
static const std::string LINE_END_MARK = "\r\n";

int main(int argc, char* argv[])
{
    boost::asio::streambuf _buf;
    std::ostream os(&_buf);
    os<<"END\r\n";

    iterator_t cursor = boost::asio::buffers_begin(_buf.data());
    iterator_t end = boost::asio::buffers_end(_buf.data());

    std::ostream_iterator<char> it(std::cout," ");
    std::copy(LINE_END_MARK.begin(), LINE_END_MARK.end(), it);

    range_t r(cursor, end);
    if(!boost::ends_with(r, LINE_END_MARK))
        return 0;
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-asio visual-c++

9
推荐指数
1
解决办法
593
查看次数

boost :: bind不能用于条件表达式?

当我取消注释条件表达式时,程序将无法在visual c ++ 2008下编译.

#include <iostream>
#include <boost/bind.hpp>
#include <boost/thread.hpp>
typedef boost::function<void(int, int)> vii_t;
typedef boost::function<void(int)> vi_t;

void foo(int a, int b){}
void bar(int a){}
int main(int argc, char* argv[])
{
    //vi_t test= true ? boost::bind(foo, _1, 100) : boost::bind(bar, _1);
    vi_t test1 = boost::bind(foo, _1, 100);
    vi_t test2 = boost::bind(bar, _1);
    //test(1);
    test1(1);
    test2(1);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ boost

6
推荐指数
1
解决办法
271
查看次数

为什么许多库没有检测到死 TCP 连接?

TCP 有一个保持活动的机制来检测死连接,但让我惊讶的是这个选项在默认情况下是关闭的,而且许多库/工具没有使用这个功能。

如果我理解正确的话,如果来自对等方的所有 FIN/RST 数据包都丢失了,那么在 recv 调用中阻塞的 TCP 连接将无法检测到连接是否实际上已被对等方中止。

客户端的超时参数可能会缓解该问题,但许多库也没有设置超时的选项。一个例子是 mysql-python 连接器没有 recv timeout 选项。另一个例子是 Nginx 服务器使用 proxy_pass 与 gunicorn 后端通信,gunicorn 工作人员可能会由于其上的死连接而停止响应,但 gunicorn 工作人员无法检测到它。

如果我错了,任何人都可以解释原因或纠正我吗?

sockets tcp

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

标签 统计

boost ×2

c++ ×2

boost-asio ×1

sockets ×1

tcp ×1

visual-c++ ×1