/src/Manos.IO/Manos.IO/Errors.cs

http://github.com/jacksonh/manos · C# · 144 lines · 106 code · 38 blank · 0 comment · 5 complexity · cd19932132aba5218e9e9f37dc26772e MD5 · raw file

  1. using System;
  2. using Mono.Unix.Native;
  3. namespace Manos.IO
  4. {
  5. static class Errors
  6. {
  7. public static string ErrorToString (int errno)
  8. {
  9. return Syscall.strerror (NativeConvert.ToErrno (errno));
  10. }
  11. public static SocketError? ErrorToSocketError (int errno)
  12. {
  13. var err = NativeConvert.ToErrno (errno);
  14. switch (err) {
  15. case Errno.EAFNOSUPPORT:
  16. return SocketError.AddressFamilyNotSupported;
  17. case Errno.EMFILE:
  18. case Errno.ENFILE:
  19. return SocketError.TooManyOpenSockets;
  20. case Errno.EPROTONOSUPPORT:
  21. return SocketError.ProtocolNotSupported;
  22. case Errno.EPROTOTYPE:
  23. return SocketError.ProtocolType;
  24. case Errno.EOPNOTSUPP:
  25. return SocketError.OperationNotSupported;
  26. case Errno.ENOTCONN:
  27. return SocketError.NotConnected;
  28. case Errno.EADDRINUSE:
  29. return SocketError.AddressAlreadyInUse;
  30. case Errno.EADDRNOTAVAIL:
  31. return SocketError.AddressNotAvailable;
  32. case Errno.EISCONN:
  33. return SocketError.IsConnected;
  34. case Errno.ECONNRESET:
  35. return SocketError.ConnectionReset;
  36. case Errno.ENETDOWN:
  37. return SocketError.NetworkDown;
  38. case Errno.EHOSTUNREACH:
  39. return SocketError.HostUnreachable;
  40. case Errno.ENETUNREACH:
  41. return SocketError.NetworkUnreachable;
  42. case Errno.EALREADY:
  43. return SocketError.AlreadyInProgress;
  44. case Errno.ECONNREFUSED:
  45. return SocketError.ConnectionRefused;
  46. case Errno.ETIMEDOUT:
  47. return SocketError.TimedOut;
  48. default:
  49. return null;
  50. }
  51. }
  52. public static SocketError ErrorToSocketError (System.Net.Sockets.SocketError err)
  53. {
  54. switch (err) {
  55. case System.Net.Sockets.SocketError.AddressFamilyNotSupported:
  56. return SocketError.AddressFamilyNotSupported;
  57. case System.Net.Sockets.SocketError.TooManyOpenSockets:
  58. return SocketError.TooManyOpenSockets;
  59. case System.Net.Sockets.SocketError.ProtocolNotSupported:
  60. return SocketError.ProtocolNotSupported;
  61. case System.Net.Sockets.SocketError.ProtocolType:
  62. return SocketError.ProtocolType;
  63. case System.Net.Sockets.SocketError.OperationNotSupported:
  64. return SocketError.OperationNotSupported;
  65. case System.Net.Sockets.SocketError.NotConnected:
  66. return SocketError.NotConnected;
  67. case System.Net.Sockets.SocketError.AddressAlreadyInUse:
  68. return SocketError.AddressAlreadyInUse;
  69. case System.Net.Sockets.SocketError.AddressNotAvailable:
  70. return SocketError.AddressNotAvailable;
  71. case System.Net.Sockets.SocketError.IsConnected:
  72. return SocketError.IsConnected;
  73. case System.Net.Sockets.SocketError.ConnectionReset:
  74. return SocketError.ConnectionReset;
  75. case System.Net.Sockets.SocketError.NetworkDown:
  76. return SocketError.NetworkDown;
  77. case System.Net.Sockets.SocketError.HostUnreachable:
  78. return SocketError.HostUnreachable;
  79. case System.Net.Sockets.SocketError.NetworkUnreachable:
  80. return SocketError.NetworkUnreachable;
  81. case System.Net.Sockets.SocketError.AlreadyInProgress:
  82. return SocketError.AlreadyInProgress;
  83. case System.Net.Sockets.SocketError.ConnectionRefused:
  84. return SocketError.ConnectionRefused;
  85. case System.Net.Sockets.SocketError.TimedOut:
  86. return SocketError.TimedOut;
  87. default:
  88. return SocketError.Failure;
  89. }
  90. }
  91. public static IOException SocketStreamFailure (string text, int errno)
  92. {
  93. var err = ErrorToSocketError (errno);
  94. if (err != null) {
  95. return new IOException (text, new Manos.IO.SocketException (err.Value));
  96. } else {
  97. return new IOException (text, new InvalidOperationException (ErrorToString (errno)));
  98. }
  99. }
  100. public static Manos.IO.SocketException SocketFailure (string text, int errno)
  101. {
  102. var err = ErrorToSocketError (errno);
  103. return new Manos.IO.SocketException (text, err ?? SocketError.Failure);
  104. }
  105. }
  106. }