SIGPIPE happens normally because you attempt to write to a socket that has
closed.

There are a couple of things you can do...

1.  You can disable SIGPIPE notification.  Something like:


struct sigaction sa;
sa.sa_handler = SIG_IGN;
sa.sa_flags = 0;
if (sigemptyset(&sa.sa_mask) == -1 || sigaction(SIGPIPE, &sa, 0) == -1) {
  perror("failed to ignore SIGPIPE; sigaction");
  exit(EXIT_FAILURE);

}

2.  You can check the status of the socket before you write to it.

socklen_t err_len;
int error;
err_len = sizeof(error);
getsockopt(handle, SOL_SOCKET, SO_ERROR, &error, &err_len);
if (error != ESHUTDOWN) {
  // actually, I cant remember what E code to check,
  // ESHUTDOWN might not be it... you can look that up yourself.
}


As an aside, most people dont get this error under 'normal' conditions
because as part of their process they tend to always do a read before
attempting a write.   A read would detect the closed socket, and you
wouldn't bother doing the write.   You are probably doing something like
that, but when doing it rapidly, connection is closing in-between the read
and write.... hence getting the sigpipe.



On Fri, Jun 26, 2009 at 3:01 PM, Rauan Maemirov <ra...@maemirov.com> wrote:

> Hi, all.
> I'm having issues with libevent.
>
> When I use siege or something like that, everything's ok. But when I
> open link in browser, and start to push F5 like a crazy, daemon exits.
> Valgrind shows:
>
> ...
> Process terminating with default action of signal 13 (SIGPIPE)
> ==5635==    at 0x5B2BF90: write (in /lib/libc-2.9.so)
> ==5635==    by 0x4E335BF: evbuffer_write (buffer.c:414)
> ==5635==    by 0x4E38819: evhttp_write (http.c:685)
> ==5635==    by 0x4E33297: event_base_loop (event.c:392)
> ==5635==    by 0x402E5F: main (myapp.c:283) // here goes event_dispatch()
> --5879-- Discarding syms at 0x91db2e0-0x91e0498 in
> /lib/libnss_compat-2.9.so due to munmap()
> --5879-- Discarding syms at 0x93e5040-0x93eb408 in
> /lib/libnss_nis-2.9.so due to munmap()
> --5879-- Discarding syms at 0x95f0020-0x95f7c48 in
> /lib/libnss_files-2.9.so due to munmap()
> ...
>
> I deem, it's because of interrupted connections. How should I handle it?
> _______________________________________________
> Libevent-users mailing list
> Libevent-users@monkey.org
> http://monkeymail.org/mailman/listinfo/libevent-users
>



-- 
"Be excellent to each other"
_______________________________________________
Libevent-users mailing list
Libevent-users@monkey.org
http://monkeymail.org/mailman/listinfo/libevent-users

Reply via email to