Here’s an explanation from the archive:
=========================
Original Message
From: Rob Abbott
Sent: Thursday, June 17, 2004 1:52 PM
To: Technical Issues
Subject: [clovertech] Re: broken pipe
Here’s the explanation:
hcicmd connects to the command thread via a TCP/IP loopback connection.
hcicmd does a “resend” or other expensive operation that keeps a thread busy
for over 30 seconds.
hcicmd waits for acknowledgement from the engine that the command has
completed.
hcicmd times out waiting for ack (30 seconds)
Engine operation completes. Command thread gets control.
Command thread attempts to send acknowledgement back on socket.
hcicmd has gone away. O/S returns “broken pipe” on the socket due to the
client disconnect.
This is a non-fatal error. It’s simply that hcicmd has disconnected before
the engine has had a chance to ACK. When the engine tries to ACK the error
occurs.
You often see this error when starting an engine with a lot of threads. The
reason for this is when each thread starts, it sends a message to each
engine process letting the engine know “I’m alive, if you have any pending
messages for me, please release them” – the command is “xrel_post”.
Since engines with a lot of threads may take a while to start, the “hcicmd
xrel_post” processes will time out, and you’ll see a load of broken pipe
errors once the engine fully starts and is able to ack all the xrel_post
commands it’s receiving.
I hope this helps clear things up. The bottom line is that these broken
pipe errors are non-fatal and should not require an engine bounce or
anything of the sort.
Regards — Rob
================
Also:
================
Date: Thu, 17 Jun 2004 14:04:43 -0500
Author: Rob Abbott <Rob.Abbott@quovadx.com>
Subject: Re: broken pipe
Body: I neglected to mention that hcicmd is a perl script. If you want (at your
own risk 🙂) to change the 30-second timeout, look for “my $time=30;” at
around line 254. Change 30 to whatever integer you wish. 0 (zero) means
wait forever.
— Rob