SocketAddress.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. //
  2. // System.Net.SocketAddress.cs
  3. //
  4. // Author:
  5. // Miguel de Icaza ([email protected])
  6. // Dick Porter ([email protected])
  7. //
  8. // (C) Ximian, Inc. http://www.ximian.com
  9. //
  10. using System.Net.Sockets;
  11. namespace System.Net {
  12. public class SocketAddress {
  13. private byte[] data;
  14. public SocketAddress (AddressFamily family, int size)
  15. {
  16. if(size<2) {
  17. throw new ArgumentOutOfRangeException("size is too small");
  18. }
  19. data=new byte[size];
  20. data[0]=(byte)family;
  21. data[1]=(byte)size;
  22. }
  23. public SocketAddress (AddressFamily family)
  24. {
  25. data=new byte[32];
  26. data[0]=(byte)family;
  27. data[1]=(byte)32;
  28. }
  29. public AddressFamily Family {
  30. get {
  31. return((AddressFamily)data[0]);
  32. }
  33. }
  34. public int Size {
  35. get {
  36. return((int)data[1]);
  37. }
  38. }
  39. public byte this [ int offset ] {
  40. get {
  41. return(data[offset]);
  42. }
  43. set {
  44. data[offset]=value;
  45. }
  46. }
  47. public override string ToString() {
  48. string af=((AddressFamily)data[0]).ToString();
  49. int size=(int)data[1];
  50. string ret=af+":"+size+":{";
  51. for(int i=2; i<size; i++) {
  52. int val=(int)data[i];
  53. ret=ret+val;
  54. if(i<size-1) {
  55. ret=ret+",";
  56. }
  57. }
  58. ret=ret+"}";
  59. return(ret);
  60. }
  61. public override bool Equals (object obj)
  62. {
  63. if (obj is System.Net.SocketAddress &&
  64. ((System.Net.SocketAddress) obj).data.Length == data.Length){
  65. byte [] otherData = ((System.Net.SocketAddress) obj).data;
  66. for (int i = 0; i < data.Length; i++)
  67. if (otherData [i] != data [i])
  68. return false;
  69. return true;
  70. }
  71. return false;
  72. }
  73. public override int GetHashCode ()
  74. {
  75. int code = 0;
  76. for (int i = 0; i < data.Length; i++)
  77. code += data [i] + i;
  78. return code;
  79. }
  80. }
  81. }