diff --git a/ndn-cpp/c/errors.c b/ndn-cpp/c/errors.c
index af32008..cbe2de1 100644
--- a/ndn-cpp/c/errors.c
+++ b/ndn-cpp/c/errors.c
@@ -52,26 +52,18 @@
     return      "unrecognized ndn_KeyLocatorType";
   case NDN_ERROR_decodeBinaryXMLKeyLocator_unrecognized_key_locator_type:
     return      "decodeBinaryXMLKeyLocator unrecognized key locator type";
-  case NDN_ERROR_TcpTransport_error_in_getaddrinfo:
-    return      "TcpTransport error in getaddrinfo";
-  case NDN_ERROR_TcpTransport_cannot_connect_to_socket:
-    return      "TcpTransport cannot connect to socket";
-  case NDN_ERROR_TcpTransport_socket_is_not_open:
-    return      "TcpTransport socket is not open";
-  case NDN_ERROR_TcpTransport_error_in_send:
-    return      "TcpTransport error in send";
-  case NDN_ERROR_TcpTransport_error_in_recv:
-    return      "TcpTransport error in recv";
-  case NDN_ERROR_UdpTransport_error_in_getaddrinfo:
-    return      "UdpTransport error in getaddrinfo";
-  case NDN_ERROR_UdpTransport_cannot_connect_to_socket:
-    return      "UdpTransport cannot connect to socket";
-  case NDN_ERROR_UdpTransport_socket_is_not_open:
-    return      "UdpTransport socket is not open";
-  case NDN_ERROR_UdpTransport_error_in_send:
-    return      "UdpTransport error in send";
-  case NDN_ERROR_UdpTransport_error_in_recv:
-    return      "UdpTransport error in recv";
+  case NDN_ERROR_unrecognized_ndn_SocketTransport:
+    return      "unrecognized ndn_SocketTransport";
+  case NDN_ERROR_SocketTransport_error_in_getaddrinfo:
+    return      "SocketTransport error in getaddrinfo";
+  case NDN_ERROR_SocketTransport_cannot_connect_to_socket:
+    return      "SocketTransport cannot connect to socket";
+  case NDN_ERROR_SocketTransport_socket_is_not_open:
+    return      "SocketTransport socket is not open";
+  case NDN_ERROR_SocketTransport_error_in_send:
+    return      "SocketTransport error in send";
+  case NDN_ERROR_SocketTransport_error_in_recv:
+    return      "SocketTransport error in recv";
   default:
     return "unrecognized ndn_Error code";  
   }
diff --git a/ndn-cpp/c/errors.h b/ndn-cpp/c/errors.h
index f574b6a..6a3daf4 100644
--- a/ndn-cpp/c/errors.h
+++ b/ndn-cpp/c/errors.h
@@ -34,16 +34,12 @@
   NDN_ERROR_unrecognized_ndn_ExcludeType,
   NDN_ERROR_unrecognized_ndn_KeyLocatorType,
   NDN_ERROR_decodeBinaryXMLKeyLocator_unrecognized_key_locator_type,
-  NDN_ERROR_TcpTransport_error_in_getaddrinfo,
-  NDN_ERROR_TcpTransport_cannot_connect_to_socket,
-  NDN_ERROR_TcpTransport_socket_is_not_open,
-  NDN_ERROR_TcpTransport_error_in_send,
-  NDN_ERROR_TcpTransport_error_in_recv,
-  NDN_ERROR_UdpTransport_error_in_getaddrinfo,
-  NDN_ERROR_UdpTransport_cannot_connect_to_socket,
-  NDN_ERROR_UdpTransport_socket_is_not_open,
-  NDN_ERROR_UdpTransport_error_in_send,
-  NDN_ERROR_UdpTransport_error_in_recv
+  NDN_ERROR_unrecognized_ndn_SocketTransport,
+  NDN_ERROR_SocketTransport_error_in_getaddrinfo,
+  NDN_ERROR_SocketTransport_cannot_connect_to_socket,
+  NDN_ERROR_SocketTransport_socket_is_not_open,
+  NDN_ERROR_SocketTransport_error_in_send,
+  NDN_ERROR_SocketTransport_error_in_recv
 } ndn_Error;
   
 /**
diff --git a/ndn-cpp/c/transport/UdpTransport.c b/ndn-cpp/c/transport/SocketTransport.c
similarity index 63%
rename from ndn-cpp/c/transport/UdpTransport.c
rename to ndn-cpp/c/transport/SocketTransport.c
index 0dc5d8e..187f0da 100644
--- a/ndn-cpp/c/transport/UdpTransport.c
+++ b/ndn-cpp/c/transport/SocketTransport.c
@@ -3,7 +3,7 @@
  * See COPYING for copyright and distribution information.
  */
 
-#include "UdpTransport.h"
+#include "SocketTransport.h"
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -15,7 +15,7 @@
 #include <arpa/inet.h>
 #include "../util/ndn_memory.h"
 
-ndn_Error ndn_UdpTransport_connect(struct ndn_UdpTransport *self, char *host, unsigned short port)
+ndn_Error ndn_SocketTransport_connect(struct ndn_SocketTransport *self, ndn_SocketType socketType, char *host, unsigned short port)
 {
   if (self->socketDescriptor >= 0) {
     close(self->socketDescriptor);
@@ -25,14 +25,19 @@
 	struct addrinfo hints;
 	ndn_memset((unsigned char *)&hints, 0, sizeof(hints));
 	hints.ai_family = AF_UNSPEC;
-	hints.ai_socktype = SOCK_DGRAM;
+  if (socketType == SOCKET_TCP)
+    hints.ai_socktype = SOCK_STREAM;
+  else if (socketType == SOCKET_UDP)
+    hints.ai_socktype = SOCK_DGRAM;
+  else
+    return NDN_ERROR_unrecognized_ndn_SocketTransport;
 
   char portString[10];
   sprintf(portString, "%d", port);
   
 	struct addrinfo *serverInfo;
 	if (getaddrinfo(host, portString, &hints, &serverInfo) != 0)
-		return NDN_ERROR_UdpTransport_error_in_getaddrinfo;
+		return NDN_ERROR_SocketTransport_error_in_getaddrinfo;
 
 	// loop through all the results and connect to the first we can
 	struct addrinfo *p;
@@ -51,7 +56,7 @@
 
 	if (p == NULL) {
     freeaddrinfo(serverInfo);
-		return NDN_ERROR_UdpTransport_cannot_connect_to_socket;
+		return NDN_ERROR_SocketTransport_cannot_connect_to_socket;
   }
 
 	freeaddrinfo(serverInfo);
@@ -60,15 +65,15 @@
   return 0;
 }
 
-ndn_Error ndn_UdpTransport_send(struct ndn_UdpTransport *self, unsigned char *data, unsigned int dataLength)
+ndn_Error ndn_SocketTransport_send(struct ndn_SocketTransport *self, unsigned char *data, unsigned int dataLength)
 {
   if (self->socketDescriptor < 0)
-    return NDN_ERROR_UdpTransport_socket_is_not_open;
+    return NDN_ERROR_SocketTransport_socket_is_not_open;
   
   int nBytes;
   while (1) {
     if ((nBytes = send(self->socketDescriptor, data, dataLength, 0)) < 0)
-      return NDN_ERROR_UdpTransport_error_in_send;
+      return NDN_ERROR_SocketTransport_error_in_send;
     if (nBytes >= dataLength)
       break;
     
@@ -79,15 +84,15 @@
   return 0;  
 }
 
-ndn_Error ndn_UdpTransport_receive
-(struct ndn_UdpTransport *self, unsigned char *buffer, unsigned int bufferLength, unsigned int *nBytesOut)
+ndn_Error ndn_SocketTransport_receive
+(struct ndn_SocketTransport *self, unsigned char *buffer, unsigned int bufferLength, unsigned int *nBytesOut)
 {
   if (self->socketDescriptor < 0)
-    return NDN_ERROR_UdpTransport_socket_is_not_open;
+    return NDN_ERROR_SocketTransport_socket_is_not_open;
 
   int nBytes;  
 	if ((nBytes = recv(self->socketDescriptor, buffer, bufferLength, 0)) == -1)
-    return NDN_ERROR_UdpTransport_error_in_recv;
+    return NDN_ERROR_SocketTransport_error_in_recv;
 
   *nBytesOut = (unsigned int)nBytes;
   
diff --git a/ndn-cpp/c/transport/SocketTransport.h b/ndn-cpp/c/transport/SocketTransport.h
new file mode 100644
index 0000000..a5e89f7
--- /dev/null
+++ b/ndn-cpp/c/transport/SocketTransport.h
@@ -0,0 +1,41 @@
+/**
+ * @author: Jeff Thompson
+ * See COPYING for copyright and distribution information.
+ */
+
+#ifndef NDN_SOCKETTRANSPORT_H
+#define	NDN_SOCKETTRANSPORT_H
+
+#include <sys/socket.h>
+#include "../errors.h"
+
+#ifdef	__cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+  SOCKET_TCP,
+  SOCKET_UDP
+} ndn_SocketType;
+  
+struct ndn_SocketTransport {
+  int socketDescriptor; /**< -1 if not connected */
+};
+  
+static inline void ndn_SocketTransport_init(struct ndn_SocketTransport *self)
+{
+  self->socketDescriptor = -1;
+}
+
+ndn_Error ndn_SocketTransport_connect(struct ndn_SocketTransport *self, ndn_SocketType socketType, char *host, unsigned short port);
+
+ndn_Error ndn_SocketTransport_send(struct ndn_SocketTransport *self, unsigned char *data, unsigned int dataLength);
+
+ndn_Error ndn_SocketTransport_receive
+  (struct ndn_SocketTransport *self, unsigned char *buffer, unsigned int bufferLength, unsigned int *nBytes);
+
+#ifdef	__cplusplus
+}
+#endif
+
+#endif
diff --git a/ndn-cpp/c/transport/TcpTransport.c b/ndn-cpp/c/transport/TcpTransport.c
deleted file mode 100644
index ea44d86..0000000
--- a/ndn-cpp/c/transport/TcpTransport.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/**
- * @author: Jeff Thompson
- * See COPYING for copyright and distribution information.
- */
-
-#include "TcpTransport.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <netdb.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <sys/socket.h>
-#include <arpa/inet.h>
-#include "../util/ndn_memory.h"
-
-ndn_Error ndn_TcpTransport_connect(struct ndn_TcpTransport *self, char *host, unsigned short port)
-{
-  if (self->socketDescriptor >= 0) {
-    close(self->socketDescriptor);
-    self->socketDescriptor = -1;
-  }
-  
-	struct addrinfo hints;
-	ndn_memset((unsigned char *)&hints, 0, sizeof(hints));
-	hints.ai_family = AF_UNSPEC;
-	hints.ai_socktype = SOCK_STREAM;
-
-  char portString[10];
-  sprintf(portString, "%d", port);
-  
-	struct addrinfo *serverInfo;
-	if (getaddrinfo(host, portString, &hints, &serverInfo) != 0)
-		return NDN_ERROR_TcpTransport_error_in_getaddrinfo;
-
-	// loop through all the results and connect to the first we can
-	struct addrinfo *p;
-  int socketDescriptor;
-	for(p = serverInfo; p != NULL; p = p->ai_next) {
-		if ((socketDescriptor = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1)
-			continue;
-
-		if (connect(socketDescriptor, p->ai_addr, p->ai_addrlen) == -1) {
-			close(socketDescriptor);
-			continue;
-		}
-
-		break;
-	}
-
-	if (p == NULL) {
-    freeaddrinfo(serverInfo);
-		return NDN_ERROR_TcpTransport_cannot_connect_to_socket;
-  }
-
-	freeaddrinfo(serverInfo);
-  self->socketDescriptor = socketDescriptor;
-
-  return 0;
-}
-
-ndn_Error ndn_TcpTransport_send(struct ndn_TcpTransport *self, unsigned char *data, unsigned int dataLength)
-{
-  if (self->socketDescriptor < 0)
-    return NDN_ERROR_TcpTransport_socket_is_not_open;
-  
-  int nBytes;
-  while (1) {
-    if ((nBytes = send(self->socketDescriptor, data, dataLength, 0)) < 0)
-      return NDN_ERROR_TcpTransport_error_in_send;
-    if (nBytes >= dataLength)
-      break;
-    
-    // Send more.
-    dataLength -= nBytes;
-  }
-
-  return 0;  
-}
-
-ndn_Error ndn_TcpTransport_receive
-(struct ndn_TcpTransport *self, unsigned char *buffer, unsigned int bufferLength, unsigned int *nBytesOut)
-{
-  if (self->socketDescriptor < 0)
-    return NDN_ERROR_TcpTransport_socket_is_not_open;
-
-  int nBytes;  
-	if ((nBytes = recv(self->socketDescriptor, buffer, bufferLength, 0)) == -1)
-    return NDN_ERROR_TcpTransport_error_in_recv;
-
-  *nBytesOut = (unsigned int)nBytes;
-  
-	return 0;  
-}
diff --git a/ndn-cpp/c/transport/TcpTransport.h b/ndn-cpp/c/transport/TcpTransport.h
index 0a1742c..ec43806 100644
--- a/ndn-cpp/c/transport/TcpTransport.h
+++ b/ndn-cpp/c/transport/TcpTransport.h
@@ -8,27 +8,36 @@
 #ifndef NDN_TCPTRANSPORT_H
 #define	NDN_TCPTRANSPORT_H
 
-#include "../errors.h"
+#include "SocketTransport.h"
 
 #ifdef	__cplusplus
 extern "C" {
 #endif
 
 struct ndn_TcpTransport {
-  int socketDescriptor; /**< -1 if not connected */
+  struct ndn_SocketTransport base;
 };
   
 static inline void ndn_TcpTransport_init(struct ndn_TcpTransport *self)
 {
-  self->socketDescriptor = -1;
+  ndn_SocketTransport_init(&self->base);
 }
 
-ndn_Error ndn_TcpTransport_connect(struct ndn_TcpTransport *self, char *host, unsigned short port);
+static inline ndn_Error ndn_TcpTransport_connect(struct ndn_TcpTransport *self, char *host, unsigned short port)
+{
+  return ndn_SocketTransport_connect(&self->base, SOCKET_TCP, host, port);
+}
 
-ndn_Error ndn_TcpTransport_send(struct ndn_TcpTransport *self, unsigned char *data, unsigned int dataLength);
+static inline ndn_Error ndn_TcpTransport_send(struct ndn_TcpTransport *self, unsigned char *data, unsigned int dataLength)
+{
+  return ndn_SocketTransport_send(&self->base, data, dataLength);
+}
 
-ndn_Error ndn_TcpTransport_receive
-  (struct ndn_TcpTransport *self, unsigned char *buffer, unsigned int bufferLength, unsigned int *nBytes);
+static inline ndn_Error ndn_TcpTransport_receive
+  (struct ndn_TcpTransport *self, unsigned char *buffer, unsigned int bufferLength, unsigned int *nBytes)
+{
+  return ndn_SocketTransport_receive(&self->base, buffer, bufferLength, nBytes);
+}
 
 #ifdef	__cplusplus
 }
diff --git a/ndn-cpp/c/transport/UdpTransport.h b/ndn-cpp/c/transport/UdpTransport.h
index 924e4a7..262d5ec 100644
--- a/ndn-cpp/c/transport/UdpTransport.h
+++ b/ndn-cpp/c/transport/UdpTransport.h
@@ -1,32 +1,43 @@
-/**
- * @author: Jeff Thompson
- * See COPYING for copyright and distribution information.
+/* 
+ * File:   UdpTransport.h
+ * Author: jefft0
+ *
+ * Created on July 14, 2013, 4:15 PM
  */
 
 #ifndef NDN_UDPTRANSPORT_H
 #define	NDN_UDPTRANSPORT_H
 
-#include "../errors.h"
+#include "SocketTransport.h"
 
 #ifdef	__cplusplus
 extern "C" {
 #endif
 
 struct ndn_UdpTransport {
-  int socketDescriptor; /**< -1 if not connected */
+  struct ndn_SocketTransport base;
 };
   
 static inline void ndn_UdpTransport_init(struct ndn_UdpTransport *self)
 {
-  self->socketDescriptor = -1;
+  ndn_SocketTransport_init(&self->base);
 }
 
-ndn_Error ndn_UdpTransport_connect(struct ndn_UdpTransport *self, char *host, unsigned short port);
+static inline ndn_Error ndn_UdpTransport_connect(struct ndn_UdpTransport *self, char *host, unsigned short port)
+{
+  return ndn_SocketTransport_connect(&self->base, SOCKET_UDP, host, port);
+}
 
-ndn_Error ndn_UdpTransport_send(struct ndn_UdpTransport *self, unsigned char *data, unsigned int dataLength);
+static inline ndn_Error ndn_UdpTransport_send(struct ndn_UdpTransport *self, unsigned char *data, unsigned int dataLength)
+{
+  return ndn_SocketTransport_send(&self->base, data, dataLength);
+}
 
-ndn_Error ndn_UdpTransport_receive
-  (struct ndn_UdpTransport *self, unsigned char *buffer, unsigned int bufferLength, unsigned int *nBytes);
+static inline ndn_Error ndn_UdpTransport_receive
+  (struct ndn_UdpTransport *self, unsigned char *buffer, unsigned int bufferLength, unsigned int *nBytes)
+{
+  return ndn_SocketTransport_receive(&self->base, buffer, bufferLength, nBytes);
+}
 
 #ifdef	__cplusplus
 }
