2

ASIO で既に接続されているソケットを使用できるようにする方法はありますか?

1 つの要求を送信しようとしています。ip::tcp::socket::assign2 つの異なる場所で 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 を参照しているためですか?

4

2 に答える 2