Hello, why doesn't write() return EPIPE ? If the peer has closed its socket connection the second write to this socket should return -1 and errno should be set to EPIPE (if SIGPIPE is set to be ignored). Why does the second write to the socket never go into the error detection? with best regards, Oliver (writen() is a member function of my socket C++-class) ssize_t sock::writen( const void * vptr, size_t n) { size_t nleft; ssize_t nwritten; const char *ptr; ptr = static_cast< char * >( vptr); nleft = n; struct sigaction new_sa; struct sigaction old_sa; new_sa.sa_handler = SIG_IGN; ::sigemptyset( & new_sa.sa_mask); new_sa.sa_flags = 0; ::sigaction( SIGPIPE, & new_sa, & old_sa); while ( nleft > 0) { if ( ( nwritten = ::write( m_handle, ptr, nleft) ) <= 0) { if ( errno == EINTR) nwritten = 0; /* and call write() again */ else if ( errno == EPIPE) return EOF; /* write to socket with no readers */ else throw net_io_ex( ::strerror( errno), "writen()", __FILE__); /* error */ } nleft -= nwritten; ptr += nwritten; } /* set to its previous action */ ::sigaction( SIGPIPE, & old_sa, 0); return n; } - : send the line "unsubscribe linux-net" in the body of a message to majordomo@vger.kernel.org