[AGENT++] Broken pipe error with subagent

Claus Klein claus.klein at arcormail.de
Sun Nov 25 10:32:07 CET 2012


Hi Frank,

We have also an embedded OS with no SIGPIPE,
In case of a closed peer, there is too no error while write to the  
socked.

This ends with a closed session by the Master agent (net-snmp), but  
the subagent
does not reregister the MIB.

     do {
         while((run) && (!mib->get_agentx()->quit())) {
             req = reqList->receive(4 * 1000);  // ms (4 sec)
             if(req) {
                 mib->process_request(req);
             } else {
                 mib->cleanup();
             }
         }

         mib->save_all();
         loopCount = 0;
         // Make sure that all pending set requests which may
         // have locked any resources are terminated and resources
         // are freed before connection to master is reestablished.
         reqList->terminate_set_requests();
         while((run) && (!mib->init())) {
#ifdef _WIN32
             Sleep(2 * 1000); // ms
#else
             sleep(2);  // sec (posix)
#endif
             if(loopCount++ > 10) {
                 loopCount = 0;
                 // ping the master every 20 sec
                 mib->ping_master();
             }
         }
     } while((run));

What can I do? quit() (does not break the 1. while rule)

It is not an option to restart the system in this case.


Thanks in advance
Best Regards
Claus

On 19.11.2012, at 20:15, Frank Fock wrote:

> Hi Claus,
>
> The signal SIGPIPE does not exists on Windows. So here it has not  
> the be
> handled.
>
> Best regards,
> Frank
>
> Am 18.09.2012 06:36, schrieb Claus Klein:
>> Hi,
>>
>> I have found that the SIGPIPE signal can also happens at an agentx
>> subagent when the response is delayed and the master agent (net-snmp
>> in this case) close the session after timeout:
>>
>> agentx/master: close transport
>> agentx/master: response too late on session 0x39e660
>> ...
>>
>> The subagent examples do not handle this signal?
>>
>> So I added the following code to the main:
>>
>> // catch SIGPIPE and ignore it this can occur when the master agent  
>> dies
>> // and we are trying to send a delayed responce
>> #ifndef _WIN32
>> 	signal(SIGPIPE, SIG_IGN);
>> #endif
>>
>>
>> But how can it handled right under Windows?
>>
>> Can anyone please help?
>>
>> Thanks in advance
>> Best Regards
>> Claus
>>
>>
>> _______________________________________________
>> AGENTPP mailing list
>> AGENTPP at agentpp.org
>> http://lists.agentpp.org/mailman/listinfo/agentpp
>
> -- 
> ---
> AGENT++
> Maximilian-Kolbe-Str. 10
> 73257 Koengen, Germany
> https://agentpp.com
> Phone: +49 7024 8688230
> Fax:   +49 7024 8688231
>
> _______________________________________________
> AGENTPP mailing list
> AGENTPP at agentpp.org
> http://lists.agentpp.org/mailman/listinfo/agentpp



More information about the AGENTPP mailing list