This is the mail archive of the
ecos-discuss@sources.redhat.com
mailing list for the eCos project.
Re: TCP close(...) action
Hi,
try to set the SO_LINGER option with setsockopt, e.g:
struct linger ling = { 1, 0 };
if ( setsockopt( sockfd, SOL_SOCKET, SO_LINGER, &ling, sizeof ( ling ) ) < 0)
{
// something went wrong, clean up
}
regards, Christoph
On Mon, Oct 20, 2003 at 08:25:43AM -0700, Matt Jerdonek wrote:
> > > Hi Folks,
> > >
> > > I have a simple program with two threads that send
> > /
> > > recv from a single TCP socket. One thread blocks
> > on a
> > > recv call while the other thread sends data on the
> > > same socket.
> > >
> > > I put a close call in the send thread. The
> > expected
> > > behavior was for the recv thread to wake (with 0
> > bytes
> > > of data) and a FIN to be sent on the ethernet.
> > The
> > > actual behavior was that the recv thread never
> > woke
> > > and the FIN was not sent. (Is this intended or a
> > > bug?). I found the soclose function would not be
> > > invoked because the recv was still using the file
> > > handle. Once the recv released the file handle,
> > the
> > > FIN flowed on the ethernet.
> > >
> > > I worked around this issue by calling
> > > cyg_thread_release from my application, which woke
> > up
> > > the recv thread. But I wonder if there is better
> > > solution? Could (or should) the close call be
> > made to
> > > wake up blocked threads? If so, any suggestions?
> > >
--
--
Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos
and search the list archive: http://sources.redhat.com/ml/ecos-discuss