use non-blocking recv() function from libnetconf
diff --git a/src/mod_netconf.c b/src/mod_netconf.c
index f2e8a03..22d213d 100644
--- a/src/mod_netconf.c
+++ b/src/mod_netconf.c
@@ -357,6 +357,29 @@
  */
 
 /**
+ * \brief Send RPC and wait for reply with timeout.
+ *
+ * \param[in] session libnetconf session
+ * \param[in] rpc     prepared RPC message
+ * \param[in] timeout timeout in miliseconds, -1 for blocking, 0 for non-blocking
+ * \param[out] reply  reply from the server
+ * \return Value from nc_session_recv_reply() or NC_MSG_UNKNOWN when send_rpc() fails.
+ * On success, it returns NC_MSG_REPLY.
+ */
+NC_MSG_TYPE netconf_send_recv_timed(struct nc_session *session, nc_rpc *rpc,
+					   int timeout, nc_reply **reply)
+{
+	const nc_msgid msgid = NULL;
+	NC_MSG_TYPE ret = NC_MSG_UNKNOWN;
+	msgid = nc_session_send_rpc(session, rpc);
+	if (msgid == NULL) {
+		return ret;
+	}
+	ret = nc_session_recv_reply(session, timeout, reply);
+	return ret;
+}
+
+/**
  * \brief Connect to NETCONF server
  *
  * \warning Session_key hash is not bound with caller identification. This could be potential security risk.
@@ -599,7 +622,7 @@
 
 	if (session != NULL) {
 		/* send the request and get the reply */
-		msgt = nc_session_send_recv(session, rpc, &reply);
+		msgt = netconf_send_recv_timed(session, rpc, 5000, &reply);
 		/* process the result of the operation */
 		return netconf_test_reply(session, NULL, msgt, reply, NULL);
 	} else {
@@ -670,7 +693,7 @@
 		locked_session->last_activity = apr_time_now();
 
 		/* send the request and get the reply */
-		msgt = nc_session_send_recv(session, rpc, &reply);
+		msgt = netconf_send_recv_timed(session, rpc, 5000, &reply);
 
 		/* first release exclusive lock for this session */
 		DEBUG("UNLOCK mutex %s", __func__);