Guest User

Untitled

a guest
Dec 12th, 2017
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.21 KB | None | 0 0
  1. //==================================================================
  2. /// DNET_Base.cpp
  3. ///
  4. /// Created by Davide Pasca - 2009/8/2
  5. /// See the file "license.txt" that comes with this project for
  6. /// copyright info.
  7. //==================================================================
  8.  
  9. #if defined(WIN32)
  10. # include <WinSock2.h>
  11. # pragma comment(lib, "Ws2_32.lib")
  12. #endif
  13.  
  14. #include "DNET_Base.h"
  15.  
  16. //==================================================================
  17. namespace DNET
  18. {
  19.  
  20. //==================================================================
  21. bool InitializeSocket()
  22. {
  23. static bool initialized;
  24.  
  25. if ( initialized )
  26. return true;
  27.  
  28. #if defined(WIN32)
  29. WSAData data;
  30.  
  31. if ( WSAStartup( MAKEWORD(2,2), &data ) != 0 )
  32. {
  33. return false;
  34. }
  35. #endif
  36.  
  37. initialized = true;
  38.  
  39. return true;
  40. }
  41.  
  42. //==================================================================
  43. int LastSockErr()
  44. {
  45. #if defined(WIN32)
  46. return WSAGetLastError();
  47. #else
  48. return errno;
  49. #endif
  50. }
  51.  
  52. //==================================================================
  53. bool SetNonBlocking( SOCKET sock )
  54. {
  55. #if defined(WIN32)
  56. u_long blockflg = 1;
  57. if ( -1 == ioctlsocket( sock, FIONBIO, &blockflg ) )
  58. return false;
  59.  
  60. #else
  61. int flags = fcntl( sock, F_GETFL, 0 );
  62. if ( flags < 0 )
  63. return false;
  64.  
  65. flags |= O_NONBLOCK;
  66. if ( -1 == fcntl( sock, F_SETFL, flags ) )
  67. return false;
  68. #endif
  69.  
  70. return true;
  71. }
  72.  
  73. //==================================================================
  74. const char *GetSockErrStr( int err )
  75. {
  76. switch ( err )
  77. {
  78. case EWOULDBLOCK : return "EWOULDBLOCK";
  79. case EINPROGRESS : return "EINPROGRESS";
  80. case EALREADY : return "EALREADY";
  81. case ENOTSOCK : return "ENOTSOCK";
  82. case EDESTADDRREQ : return "EDESTADDRREQ";
  83. case EMSGSIZE : return "EMSGSIZE";
  84. case EPROTOTYPE : return "EPROTOTYPE";
  85. case ENOPROTOOPT : return "ENOPROTOOPT";
  86. case EPROTONOSUPPORT: return "EPROTONOSUPPORT";
  87. case ESOCKTNOSUPPORT: return "ESOCKTNOSUPPORT";
  88. case EOPNOTSUPP : return "EOPNOTSUPP";
  89. case EPFNOSUPPORT : return "EPFNOSUPPORT";
  90. case EAFNOSUPPORT : return "EAFNOSUPPORT";
  91. case EADDRINUSE : return "EADDRINUSE";
  92. case EADDRNOTAVAIL : return "EADDRNOTAVAIL";
  93. case ENETDOWN : return "ENETDOWN";
  94. case ENETUNREACH : return "ENETUNREACH";
  95. case ENETRESET : return "ENETRESET";
  96. case ECONNABORTED : return "ECONNABORTED";
  97. case ECONNRESET : return "ECONNRESET";
  98. case ENOBUFS : return "ENOBUFS";
  99. case EISCONN : return "EISCONN";
  100. case ENOTCONN : return "ENOTCONN";
  101. case ESHUTDOWN : return "ESHUTDOWN";
  102. case ETOOMANYREFS : return "ETOOMANYREFS";
  103. case ETIMEDOUT : return "ETIMEDOUT";
  104. case ECONNREFUSED : return "ECONNREFUSED";
  105. case ELOOP : return "ELOOP";
  106. case ENAMETOOLONG : return "ENAMETOOLONG";
  107. case EHOSTDOWN : return "EHOSTDOWN";
  108. case EHOSTUNREACH : return "EHOSTUNREACH";
  109. case ENOTEMPTY : return "ENOTEMPTY";
  110. // TODO fix at some point
  111. #if defined(WIN32)
  112. case EPROCLIM : return "EPROCLIM";
  113. #endif
  114. case EUSERS : return "EUSERS";
  115. case EDQUOT : return "EDQUOT";
  116. case ESTALE : return "ESTALE";
  117. case EREMOTE : return "EREMOTE";
  118. default : return "UNKNOWN_ERROR";
  119. }
  120. }
  121.  
  122. //==================================================================
  123. }
Add Comment
Please, Sign In to add comment