Subject | NEED HELP: possible bug in packet_receive() method. |
---|---|
Author | nitaligavino <Dan.Crea@apropos.com> |
Post date | 2002-12-20T15:59:18Z |
Hello All:
I posted this yesterday but did not hear anything so...I really need
to get to the bottom of this as it's a serious stability issue with
our product.
I need some help understanding what is going on here? I seem to have
found a bug in the method packet_receive(...) in file inet.c. There
are some comments about an "error-detection protocol" and sending a
dummy packet to see if the client is still active.
Anyway, what I'm seeing is the following:
Within the packet_receive(...) function there is a loop for(;;) that
is
waiting on a socket select call. What ends up happing however is the
select call is timing out after 60 seconds and the following code is
executed:
packet.p_operation = op_dummy;
if (!send_full (port, &packet))
return FALSE;
continue;
the continue forces a retry which calls select and again waits 60
seconds unit it times out. This loop is never ending so the client
that made the original call is blocked indefinitely. I don't know if
this is a problem in the client code or if the server is not
responding to this dummy packet.
Can someone explain what is supposed to happen here? Is there a
configuration flag that can be changed to prevent this end-less
looping?
Best regards,
Dan
I posted this yesterday but did not hear anything so...I really need
to get to the bottom of this as it's a serious stability issue with
our product.
I need some help understanding what is going on here? I seem to have
found a bug in the method packet_receive(...) in file inet.c. There
are some comments about an "error-detection protocol" and sending a
dummy packet to see if the client is still active.
Anyway, what I'm seeing is the following:
Within the packet_receive(...) function there is a loop for(;;) that
is
waiting on a socket select call. What ends up happing however is the
select call is timing out after 60 seconds and the following code is
executed:
packet.p_operation = op_dummy;
if (!send_full (port, &packet))
return FALSE;
continue;
the continue forces a retry which calls select and again waits 60
seconds unit it times out. This loop is never ending so the client
that made the original call is blocked indefinitely. I don't know if
this is a problem in the client code or if the server is not
responding to this dummy packet.
Can someone explain what is supposed to happen here? Is there a
configuration flag that can be changed to prevent this end-less
looping?
Best regards,
Dan