return(null);
}
- AddressFamily family=(AddressFamily)sockaddr[0];
+ AddressFamily family = sockaddr.Family;
int port;
IPEndPoint ipe = null;
switch(family)
- {\r
- case AddressFamily.InterNetwork:\r
+ {
+ case AddressFamily.InterNetwork:
+ if (size < 8) {
+ return(null);
+ }
+
port = (((int)sockaddr[2])<<8) + (int)sockaddr[3];
long address=(((long)sockaddr[7])<<24) +
(((long)sockaddr[6])<<16) +
(((long)sockaddr[5])<<8) +
(long)sockaddr[4];
- ipe = new IPEndPoint(address, port);\r
- break;\r
-#if NET_1_1\r
- case AddressFamily.InterNetworkV6:\r
+ ipe = new IPEndPoint(address, port);
+ break;
+#if NET_1_1
+ case AddressFamily.InterNetworkV6:
+ if (size < 28) {
+ return(null);
+ }
+
port = (((int)sockaddr[2])<<8) + (int)sockaddr[3];
/// maybe flowid ?
for(int i=0; i<8; i++)
addressData[i] = (ushort)((sockaddr[8+i*2] << 8) + sockaddr[8+i*2+1]);
- ipe = new IPEndPoint (new IPAddress(addressData, scopeId), port);\r
- break;\r
-#endif\r
- default:\r
- return null;\r
+ ipe = new IPEndPoint (new IPAddress(addressData, scopeId), port);
+ break;
+#endif
+ default:
+ return null;
}
return(ipe);
SocketAddress sockaddr = null;
switch (address.AddressFamily)
- {\r
- case AddressFamily.InterNetwork:\r
+ {
+ case AddressFamily.InterNetwork:
// .net produces a 16 byte buffer, even though
// only 8 bytes are used. I guess its just a
// holdover from struct sockaddr padding.
sockaddr [5] = (byte) ((addr >> 8) & 0xff);
sockaddr [6] = (byte) ((addr >> 16) & 0xff);
sockaddr [7] = (byte) ((addr >> 24) & 0xff);
- break;\r
-#if NET_1_1\r
- case AddressFamily.InterNetworkV6:\r
+ break;
+#if NET_1_1
+ case AddressFamily.InterNetworkV6:
sockaddr = new SocketAddress(AddressFamily.InterNetworkV6, 28);
sockaddr [2] = (byte) ((port>>8) & 0xff);
sockaddr [24] = (byte) (address.ScopeId & 0xff);
sockaddr [25] = (byte) ((address.ScopeId >> 8) & 0xff);
sockaddr [26] = (byte) ((address.ScopeId >> 16) & 0xff);
- sockaddr [27] = (byte) ((address.ScopeId >> 24) & 0xff);\r
- break;\r
-#endif\r
+ sockaddr [27] = (byte) ((address.ScopeId >> 24) & 0xff);
+ break;
+#endif
}
return(sockaddr);