我在服务器程序中遇到了奇怪的行为。在简单的示例中,它可以正常工作(我在pion和asio中添加了跟踪)。
#include <pion/http/server.hpp>
#include <pion/http/response_writer.hpp>
#include <pion/http/response_reader.hpp>
#include <pion/http/request_writer.hpp>
#include <pion/logger.hpp>
#include <pion/scheduler.hpp>
int main()
{
pion::single_service_scheduler shed;
shed.set_num_threads(1);
boost::shared_ptr<pion::http::server> server
(new pion::http::server(shed, 5000));
server->add_resource("/", handlerFunction);
server->start();
sleep(5);
}
输出如下。构造接收器套接字,为客户端构造套接字,创建TCP连接,一切正常运行。
basic io object constructor
after service construct
basic io object constructor
after service construct
basic io object constructor
Address of socket is: 0x9855fa4 value: -1
after service construct
1422519945 INFO pion.http.server Added request handler for HTTP resource:
1422519945 INFO pion.http.server Starting server on port 5000
before connection create
before connection constructor called
basic io object constructor
basic_stream_socket::construct
Address of socket is: 0x9857514 value: -1
after impl.construct
after service construct
basic io object constructor
after service construct
basic io object constructor
after service construct
ssl socket constructed
connection constructor, is_ssl: 0
after connection create: 0x98574f8
before accept
after accept
在使用 Oracle 和许多其他库的更复杂的程序中,相同的代码输出如下。
basic io object constructor
after service construct
basic io object constructor
after service construct
basic io object constructor
Address of socket is: 0xbfe47a64 value: -1
after service construct
1422525476 INFO pion.http.server Added request handler for HTTP resource:
before connection create
basic io object constructor
after service construct
basic io object constructor
after service construct
after connection create: 0x8fe8b88
before accept
in connection::async_accept
after accept
实际上,并没有创建第二个socket,也没有调用connection::create
函数,但是您可以看到连接已经有地址。我的想法是,某个地方可能会将函数connection::create
的地址写入(或类似的操作)。请问如何捕获这种情况?
clang
或gcc
拥有sanitizer
,在这里和在这里。 - Shafik Yaghmour