Hi all. I read kernel's source, there is sk_err_soft and sk_err in struct sock. this is their comment: * @sk_err: last error * @sk_err_soft: errors that don't cause failure but are the cause of a * persistent failure not just 'timed out' this make me confuse, why need sk_err_soft? I search linux kernel tree, and find use sk_err_soft in ICMP module. after that in man 2 connect : EINPROGRESS The socket is nonblocking and the connection cannot be completed immediately. It is possible to select(2) or poll(2) for completion by selecting the socket for writing. After select(2) indicates writability, use getsockopt(2) to read the SO_ERROR option at level SOL_SOCKET to determine whether connect() completed successfully (SO_ERROR is zero) or unsuccessfully (SO_ERROR is one of the usual error codes listed here, explaining the reason for the failure). i know SO_ERROR will detect sk_err_soft and sk_err, further more there is not detect sk_err_soft in tcp_poll. my question is why not return EPOLLERR in tcp_poll( detect sk_err_soft). Thank! -- 博观约取 豆瓣:www.douban.com/people/mustang/ blog: www.pagefault.info twitter: www.twitter.com/minibobo