We know a socket fd can be partially closed by "shutdown()" function. My question is, is there an API to reopen either read peer or write peer?
No, this is not possible. The shutdown as per standard initiates a FIN request to the peer. Thus, the communication will be shut down at both sides of the connection. Also, even if you manipulate so, that the FSM of the local TCP stack is switched back to the state where respective communication is allowed/supported, the peer will not handle this.
Look here: http://tcpipguide.com/free/t_TCPOperationalOverviewandtheTCPFiniteStateMachineF-2.htm