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 {