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 <[email protected]> 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
> [email protected]
> http://monkeymail.org/mailman/listinfo/libevent-users
>
--
"Be excellent to each other"
_______________________________________________
Libevent-users mailing list
[email protected]
http://monkeymail.org/mailman/listinfo/libevent-users