Boost Users :
Subject: Re: [Boost-users] asio ip::tcp::socket::read(), always returns end of file
From: Lloyd (lloydkl.tech_at_[hidden])
Date: 2011-06-06 06:32:46
This code reproduces the problem. I am not able to find why exception
is thrown. I have removed error checking to make the code to read
class Connection:public boost::enable_shared_from_this<Connection>
cout<<e.what()<<endl; //"This exception is thrown always-> "End of file"
On Mon, Jun 6, 2011 at 2:31 PM, Lloyd <lloydkl.tech_at_[hidden]> wrote:
> Thanks Martin. The server sends back the data, I have checked it with
> wireshark. I am able to sniff and see the data.
> This program is not using any complex protocol, it is simple "tcp"
> based text protocol. first of all am not able to read anything from
> the server.
> One more thing I would like to add is the async_connect() is called
> from a thread, the io_service is also inside the thread. there are
> multiple treads like this. But I have tried removing the thread, that
> too does not mak any difference. I have also tried blocking
> connect(),write(), and read(), now also the read fails!
> If this post is not clear, I am ready to post my code...
> On Mon, Jun 6, 2011 at 2:21 PM, Martin Dyring-Andersen
> <mda_at_[hidden]> wrote:
>> Hi Lloyd,
>>> I have an asio::ip::tcp::socket. Whenever I try to read from it, it
>>> throws an exception "end of file". But it is possible to write to the
>>> socket at any time! This is a client side application, it connects to
>>> the server using asio::async_connect(). The server is sending back the
>>> data, I checked it with wireshark. I tried using the both async_read()
>>> and read(), in both cases it fails with the same error. But both
>>> async_write(), and write() works perfectly. What could be the reason?
>> You don't provide a lot of information about the protocol, but the behavior you are seeing might be the server shutting down the servers' sending side of the connection, like
>> sock.shutdown(boost::asio::ip::tcp::socket::shutdown_send, error);
>> which still will leave the client able to write() data to the socket. The client should be able to read the data sent from the server before the shutdown() though.
>> Just an idea.
>> Best regards,
>> Martin Dyring-Andersen
>> Boost-users mailing list
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net