Yes, SIGPIPE doesn't just occur asynchronously; the process that receives it usually has to try to use the broken pipe before getting it. (Exceptions are sockets with SO_KEEPALIVE set and explicit kills by other processes.)
Think of it as libc's way of generating a fatal error.
Comment on Re: Re: How to end a process started with open "cmd |" before it has output