Added support for processEvents to Transport and Face.  Removed tempReceive.
diff --git a/ndn-cpp/transport/tcp-transport.cpp b/ndn-cpp/transport/tcp-transport.cpp
index 3742c97..4552cfe 100644
--- a/ndn-cpp/transport/tcp-transport.cpp
+++ b/ndn-cpp/transport/tcp-transport.cpp
@@ -35,20 +35,21 @@
     throw std::runtime_error(ndn_getErrorString(error));  
 }
 
-void TcpTransport::tempReceive()
+void TcpTransport::processEvents()
 {
-  try {   
-    ndn_Error error;
-    unsigned char buffer[8000];
-    unsigned int nBytes;
-    if ((error = ndn_TcpTransport_receive(&transport_, buffer, sizeof(buffer), &nBytes)))
-      throw std::runtime_error(ndn_getErrorString(error));  
+  int receiveIsReady;
+  ndn_Error error;
+  if ((error = ndn_TcpTransport_receiveIsReady(&transport_, &receiveIsReady)))
+    throw std::runtime_error(ndn_getErrorString(error));  
+  if (!receiveIsReady)
+    return;
 
-    ndn_BinaryXmlElementReader_onReceivedData(&elementReader_, buffer, nBytes);
-  } catch (...) {
-    // This function is called by the socket callback, so don't send an exception back to it.
-    // TODO: Log the exception?
-  }
+  unsigned char buffer[8000];
+  unsigned int nBytes;
+  if ((error = ndn_TcpTransport_receive(&transport_, buffer, sizeof(buffer), &nBytes)))
+    throw std::runtime_error(ndn_getErrorString(error));  
+
+  ndn_BinaryXmlElementReader_onReceivedData(&elementReader_, buffer, nBytes);
 }
 
 void TcpTransport::close()
diff --git a/ndn-cpp/transport/tcp-transport.hpp b/ndn-cpp/transport/tcp-transport.hpp
index 6cc5fc9..9167beb 100644
--- a/ndn-cpp/transport/tcp-transport.hpp
+++ b/ndn-cpp/transport/tcp-transport.hpp
@@ -21,15 +21,30 @@
   }
   
   /**
-   * 
+   * Connect to the host specified in face.
    * @param face Not a shared_ptr because we assume that it will remain valid during the life of this Transport object.
    */
   virtual void connect(Face &face);
   
+  /**
+   * Set data to the host
+   * @param data A pointer to the buffer of data to send.
+   * @param dataLength The number of bytes in data.
+   */
   virtual void send(const unsigned char *data, unsigned int dataLength);
 
-  virtual void tempReceive();
+  /**
+   * Process any data to receive.  For each element received, call face.onReceivedElement.
+   * This is non-blocking and will silently time out after a brief period if there is no data to receive.
+   * You should repeatedly call this from an event loop.
+   * @throw This may throw an exception for reading data or in the callback for processing the data.  If you
+   * call this from an main event loop, you may want to catch and log/disregard all exceptions.
+   */
+  virtual void processEvents();
 
+  /**
+   * Close the connection to the host.
+   */
   virtual void close();
   
 private:
diff --git a/ndn-cpp/transport/transport.cpp b/ndn-cpp/transport/transport.cpp
index 0b3c7f3..f15e2ea 100644
--- a/ndn-cpp/transport/transport.cpp
+++ b/ndn-cpp/transport/transport.cpp
@@ -19,7 +19,12 @@
 {
   throw logic_error("unimplemented");
 }
- 
+
+void Transport::processEvents()
+{
+  throw logic_error("unimplemented");
+}
+
 void Transport::close()
 {
 }
diff --git a/ndn-cpp/transport/transport.hpp b/ndn-cpp/transport/transport.hpp
index c465aa4..4be901f 100644
--- a/ndn-cpp/transport/transport.hpp
+++ b/ndn-cpp/transport/transport.hpp
@@ -14,11 +14,16 @@
 class Transport {
 public:
   /**
-   * 
+   * Connect to the host specified in face.
    * @param face Not a shared_ptr because we assume that it will remain valid during the life of this Transport object.
    */
   virtual void connect(Face &face);
   
+  /**
+   * Set data to the host
+   * @param data A pointer to the buffer of data to send.
+   * @param dataLength The number of bytes in data.
+   */
   virtual void send(const unsigned char *data, unsigned int dataLength);
   
   void send(const std::vector<unsigned char> &data)
@@ -27,10 +32,13 @@
   }
   
   /**
-   * Make one pass to receive any data waiting on the connection.
-   * @deprecated
+   * Process any data to receive.  For each element received, call face.onReceivedElement.
+   * This is non-blocking and will silently time out after a brief period if there is no data to receive.
+   * You should repeatedly call this from an event loop.
+   * @throw This may throw an exception for reading data or in the callback for processing the data.  If you
+   * call this from an main event loop, you may want to catch and log/disregard all exceptions.
    */
-  virtual void tempReceive() = 0;
+  virtual void processEvents() = 0;
 
   /**
    * Close the connection.  This base class implementation does nothing, but your derived class can override.
diff --git a/ndn-cpp/transport/udp-transport.cpp b/ndn-cpp/transport/udp-transport.cpp
index fcef683..6d6f304 100644
--- a/ndn-cpp/transport/udp-transport.cpp
+++ b/ndn-cpp/transport/udp-transport.cpp
@@ -35,20 +35,21 @@
     throw std::runtime_error(ndn_getErrorString(error));  
 }
 
-void UdpTransport::tempReceive()
+void UdpTransport::processEvents()
 {
-  try {   
-    ndn_Error error;
-    unsigned char buffer[8000];
-    unsigned int nBytes;
-    if ((error = ndn_UdpTransport_receive(&transport_, buffer, sizeof(buffer), &nBytes)))
-      throw std::runtime_error(ndn_getErrorString(error));  
+  int receiveIsReady;
+  ndn_Error error;
+  if ((error = ndn_UdpTransport_receiveIsReady(&transport_, &receiveIsReady)))
+    throw std::runtime_error(ndn_getErrorString(error));  
+  if (!receiveIsReady)
+    return;
 
-    ndn_BinaryXmlElementReader_onReceivedData(&elementReader_, buffer, nBytes);
-  } catch (...) {
-    // This function is called by the socket callback, so don't send an exception back to it.
-    // TODO: Log the exception?
-  }
+  unsigned char buffer[8000];
+  unsigned int nBytes;
+  if ((error = ndn_UdpTransport_receive(&transport_, buffer, sizeof(buffer), &nBytes)))
+    throw std::runtime_error(ndn_getErrorString(error));  
+
+  ndn_BinaryXmlElementReader_onReceivedData(&elementReader_, buffer, nBytes);
 }
 
 void UdpTransport::close()
diff --git a/ndn-cpp/transport/udp-transport.hpp b/ndn-cpp/transport/udp-transport.hpp
index 0aaa2f4..a54839f 100644
--- a/ndn-cpp/transport/udp-transport.hpp
+++ b/ndn-cpp/transport/udp-transport.hpp
@@ -21,15 +21,30 @@
   }
   
   /**
-   * 
+   * Connect to the host specified in face.
    * @param face Not a shared_ptr because we assume that it will remain valid during the life of this Transport object.
    */
   virtual void connect(Face &face);
   
+  /**
+   * Set data to the host
+   * @param data A pointer to the buffer of data to send.
+   * @param dataLength The number of bytes in data.
+   */
   virtual void send(const unsigned char *data, unsigned int dataLength);
 
-  virtual void tempReceive();
+  /**
+   * Process any data to receive.  For each element received, call face.onReceivedElement.
+   * This is non-blocking and will silently time out after a brief period if there is no data to receive.
+   * You should repeatedly call this from an event loop.
+   * @throw This may throw an exception for reading data or in the callback for processing the data.  If you
+   * call this from an main event loop, you may want to catch and log/disregard all exceptions.
+   */
+  virtual void processEvents();
   
+  /**
+   * Close the connection to the host.
+   */
   virtual void close();
 
 private: