ASIO で既に接続されているソケットを使用できるようにする方法はありますか?
1 つの要求を送信しようとしています。ip::tcp::socket::assign
2 つの異なる場所で 2 つの異なるセグメンテーション違反をランダムに発生させます。1 つはコールバックを呼び出す前 ( on op_queue_acess::next
) で、もう 1 つはコールバックの後 ( on boost::asio::detail::task_io_service_operation::complete
(func_ が 0 に等しく、実行を試みる)) です。したがって、接続されたソケットでは機能しないと思います。
編集:
場合は、接続されたネイティブ記述子 (実際には別のライブラリの下にあるソケット) があり、それを新しい空の ip::tcp::socket に割り当てて、ソケットのread
準備ができたときに通知されるようにしたい (を使用してnull バッファを使用) 、socket::async_read_some
ライブラリをブロックしない方法で使用します。
サンプル コードは次のとおりです。
class C
{
ip::tcp::socket socket_;
const char connection_info_[] = "...";
TPLibrary tp_;
void start()
{
.
.
tp_.connect(connection_info);
socket_.assign(ip::tcp::v4(), tp_.nativeSocket());
}
}
次に、このソケットで async_read を使用すると、コールバックを呼び出した後、場合によっては前に、前述のセグ エラーが発生します。
編集: 今、私はすべてを削除しました。io_service が動的にロードされたライブラリにあり、ソケットが別の動的にロードされたライブラリにあり、メイン ライブラリの io_service を参照しているためですか?