@Prateek Raghuvanshi @MiNiPanda What your are talking about forouzan is in wrong context. In forouzan, it's written that error messages will be generated for both TCP and UDP( which is true, because error can be at routers too, and in that case it will be for TCP also, as routers don't have transport layer, so TCP itself can't report error, so ICMP comes to rescue at that time), but it has never been written that port unreachable message will be generated for TCP, because it's not, as port unreachable message generated at the destination, and destination has transport layer, hence TCP can itself generate error message.
and yes destination unreachable message can be generated for both TCP as well as UDP as because it can be generated at router as well as host.