diff --git a/apps/enclave/libsockthread/src/socket.cpp b/apps/enclave/libsockthread/src/socket.cpp
index 742f42a2df585b4d980ecf9d8b622e7c589454ec..f4031e7c4ab74d298ae6725b0c81cef2a5f55a8f 100644
--- a/apps/enclave/libsockthread/src/socket.cpp
+++ b/apps/enclave/libsockthread/src/socket.cpp
@@ -40,6 +40,14 @@ Socket::Socket(int type)
 {
 #ifdef WINSOCK
 	winsock_startup();
+#endif
+	sock = socket(PF_INET, type, 0);
+#ifdef WINSOCK
+	if (sock == INVALID_SOCKET)
+		throw Socket_error(sam_winsock_strerror(WSAGetLastError()));
+#else
+	if (sock == -1)
+		throw Socket_error(strerror(errno));
 #endif
 }
 
@@ -62,7 +70,7 @@ void Socket::winsock_startup(void)
 	WSADATA wsaData;
 	int rc = WSAStartup(wVersionRequested, &wsaData);
 	if (rc != 0)
-		throw Socket_error("WSAStartup() failed (" + winsock_strerror(rc) +")");
+		throw Socket_error(winsock_strerror(rc));
 	if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) {
 		winsock_cleanup();
 		throw Socket_error("Bad Winsock version");
diff --git a/apps/enclave/libsockthread/src/socket.hpp b/apps/enclave/libsockthread/src/socket.hpp
index dae1a0fa8ad273f2d6da230d197ed17c07ec4d79..cb9c7bd19fd91bbd6ff75a1c7d1144803d7e760f 100644
--- a/apps/enclave/libsockthread/src/socket.hpp
+++ b/apps/enclave/libsockthread/src/socket.hpp
@@ -39,10 +39,15 @@ namespace Libsockthread {
 			void func(void);
 		private:
 #ifdef WINSOCK
+			typedef SOCKET socket_t;
+
 			void winsock_cleanup(void);
 			void winsock_startup(void);  // throws Socket_error
 			const char* winsock_strerror(int code);
+#else
+			typedef int socket_t;
 #endif
+			socket_t sock;
 	};
 
 	class Socket_error : public runtime_error {