asioソケットでno_delayオプションを設定する際に問題が発生しています。遅延を除いて、次のコードは正常に実行されます。私のサーバーは、5000ミリ秒が経過した後にのみメッセージを受信します。ASIO no_delayオプションを設定する
#include <boost/asio.hpp>
#include <boost/thread.hpp>
using namespace boost::asio;
struct Client
{
io_service svc;
ip::tcp::socket sock;
Client() : svc(), sock(svc)
{
ip::tcp::resolver resolver(svc);
ip::tcp::resolver::iterator endpoint = resolver.resolve(boost::asio::ip::tcp::resolver::query("127.0.0.1", "32323"));
connect(sock, endpoint);
}
void send(std::string const& message) {
sock.send(buffer(message));
}
};
int main()
{
Client client;
client.send("hello world\n");
client.send("bye world\n");
boost::this_thread::sleep_for(boost::chrono::milliseconds(5000));
}
私はいくつかのオプションがあり遅延を追加しようとしています。接続する前にオプションを追加します)
1:
Client() : svc(), sock(svc)
{
ip::tcp::resolver resolver(svc);
ip::tcp::resolver::iterator endpoint = resolver.resolve(boost::asio::ip::tcp::resolver::query("127.0.0.1", "32323"));
sock.set_option(ip::tcp::no_delay(true));
connect(sock, endpoint);
}
しかしこれはset_option: Bad file descriptor
2をスロー)の後にオプションを追加します。接続:
Client() : svc(), sock(svc)
{
ip::tcp::resolver resolver(svc);
ip::tcp::resolver::iterator endpoint = resolver.resolve(boost::asio::ip::tcp::resolver::query("127.0.0.1", "32323"));
connect(sock, endpoint);
sock.set_option(ip::tcp::no_delay(true));
}
この場合でも、オプションは効果がなく、私はまだ遅延が見えます。 boost::asio with no_delay not possible?によれば、私はソケットを開いた後、ソケットを接続する前にオプションを設定する必要があります。だから私はこれを試しました:
Client() : svc(), sock(svc)
{
ip::tcp::endpoint endpoint(ip::address::from_string("127.0.0.1"), 32323);
sock.open(ip::tcp::v4());
sock.set_option(ip::tcp::no_delay(true));
sock.connect(endpoint);
}
しかし、私はまだ効果を参照してください。このオプションを設定するにはどうしたらいいですか?
編集:サーバー側で正しく設定していない可能性があります。これは完全なサーバーコードです:
#include <boost/asio.hpp>
#include <iostream>
int main() {
boost::asio::io_service io_service;
boost::asio::ip::tcp::acceptor acceptor(io_service, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), 32323));
boost::asio::ip::tcp::socket socket(io_service);
acceptor.accept(socket);
socket.set_option(boost::asio::ip::tcp::no_delay(true));
boost::asio::streambuf sb;
boost::system::error_code ec;
while (boost::asio::read(socket, sb, ec)) {
std::cout << "received:\n" << &sb;
}
}
サーバにも 'no_delay'オプションが設定されていますか? – Arunmu
お返事ありがとうございます。私はサーバー側でそれを設定していませんでした。私は今、私はそれを設定していると思うが、まだ効果を見ていない。元の投稿を編集してサーバーコードを追加しました。 – Stewart