2 // System.Net.IPEndPoint.cs
5 // Miguel de Icaza (miguel@ximian.com)
7 // (C) Ximian, Inc. http://www.ximian.com
10 using System.Net.Sockets;
12 namespace System.Net {
14 public class IPEndPoint : EndPoint {
16 private IPAddress address;
19 public const int MaxPort = 65535;
20 public const int MinPort = 0;
22 public IPEndPoint (IPAddress address, int port)
25 throw new ArgumentNullException ("Value cannot be null");
31 public IPEndPoint (long iaddr, int port) : this (new IPAddress (iaddr), port)
35 public IPAddress Address {
44 public override AddressFamily AddressFamily {
46 return AddressFamily.InterNetwork;
55 // LAMESPEC: no mention of sanity checking
56 // PS: MS controls the range when setting the value
57 if (value < MinPort || value > MaxPort)
58 throw new ArgumentOutOfRangeException ("Invalid port");
64 // bytes 2 and 3 store the port, the rest
66 public override EndPoint Create(SocketAddress sockaddr) {
67 int size=sockaddr.Size;
69 // LAMESPEC: no mention of what to do if
72 // absolute minimum amount needed for
73 // an address family, buffer size,
77 AddressFamily family=(AddressFamily)sockaddr[0];
78 if(family!=AddressFamily.InterNetwork) {
82 int port=(((int)sockaddr[2])<<8) + (int)sockaddr[3];
83 long address=(((long)sockaddr[7])<<24) +
84 (((long)sockaddr[6])<<16) +
85 (((long)sockaddr[5])<<8) +
88 IPEndPoint ipe = new IPEndPoint(address, port);
93 public override SocketAddress Serialize() {
94 // .net produces a 16 byte buffer, even though
95 // only 8 bytes are used. I guess its just a
96 // holdover from struct sockaddr padding.
97 SocketAddress sockaddr = new SocketAddress(AddressFamily.InterNetwork, 16);
99 // bytes 2 and 3 store the port, the rest
100 // stores the address
101 sockaddr [2] = (byte) ((port>>8) & 0xff);
102 sockaddr [3] = (byte) (port & 0xff);
104 sockaddr [4] = (byte) (address.Address & 0xff);
105 sockaddr [5] = (byte) ((address.Address >> 8) & 0xff);
106 sockaddr [6] = (byte) ((address.Address >> 16) & 0xff);
107 sockaddr [7] = (byte) ((address.Address >> 24) & 0xff);
112 public override string ToString() {
113 return(address.ToString() + ":" + port);
116 public override bool Equals (Object obj)
118 IPEndPoint p = obj as IPEndPoint;
121 p.address.Equals (address);
124 public override int GetHashCode ()
126 return address.GetHashCode () + port;