私はサーバからの受信データを常に必要とするブーストasync tcpクライアントを持っています。 n秒間サーバーとの接続を切断して接続しようとすると、データが失われてしまったときにタイムアウトしてもらいたいです。 私はvC++を使用しています。TCPデータのタイムアウトが私のために働いていない
void tcpclient::Connect(){
.....
socket_.async_connect(*iterator,boost::bind(&tcpclient::AfterConnection,shared_from_this(),boost::asio::placeholders::error));
}
void tcpclient::AfterConnection(const boost::system::error_code& error){
if (!error)
{
SetTimeout();
}
}
void tcpclient::SetTimeout(int sec = 1)
{
SOCKET native_sock = socket_.native();
int result = SOCKET_ERROR;
if (INVALID_SOCKET != native_sock)
{
struct timeval tv;
tv.tv_sec = sec;
tv.tv_usec = 0;
result = setsockopt(native_sock, SOL_SOCKET, SO_RCVTIMEO,(char *)&tv,sizeof(struct timeval));
i = GetLastError();
}
}
と私は打撃のように読める:
socket_.async_receive(boost::asio::buffer(buffer, 1024),
boost::bind(&tcpClient::handleReceive,
shared_from_this(),
boost::asio::placeholders::error,
buffer,
boost::asio::placeholders::bytes_transferred)
);
が、私は、データ接続の滞在をariveていないケースをシミュレートしてみetablished:
$ netstatの-ao
TCPを192.168.0.6:62836 192.168.0.5:telnet ESTABLISHED 2840
なぜt彼の出来事?
テレビが私に初期化されていないようです。残りのメンバーを0に設定する –
iquasionが表示されているように修正するが、まだ問題は残っている –