source: trunk/ab5.0/ablib/src/Classes/System/Net/SocketAddress.ab

Last change on this file was 649, checked in by OverTaker, 16 years ago

IPHostEntry,Dnsクラスを半分実装。getaddrinfoがXPSP1以降にしかないので、gethostbyname版の実装もあとでします。

File size: 2.4 KB
Line 
1
2/*!
3 @brief sockaddr構造体のラップ
4 @author OverTaker
5 @date 2008/10/08
6*/
7
8
9
10Namespace System
11Namespace Net
12
13Class SocketAddress
14 item As *Byte
15 itemSize As Long
16Public
17
18 /*!
19 @brief コンストラクタ。アドレスファミリを指定して初期化する。
20 @param アドレスファミリ
21 */
22 Sub SocketAddress(family As Sockets.AddressFamily)
23 Select Case family
24 Case System.Net.Sockets.AddressFamily.InterNetwork
25 init(family, SizeOf(sockaddr_in))
26 Case System.Net.Sockets.AddressFamily.InterNetworkV6
27 init(family, SizeOf(sockaddr_in6))
28 Case Else
29 init(family, SizeOf(sockaddr))
30 End Select
31 End Sub
32
33 /*!
34 @brief コンストラクタ。アドレスファミリと大きさを指定して初期化する。
35 @param アドレスファミリ
36 @param 大きさ
37 */
38 Sub SocketAddress(family As Sockets.AddressFamily, size As Long)
39 init(family, size)
40 End Sub
41
42 /*!
43 @brief コンストラクタ。sockaddrを指定して初期化する
44 @param sockaddr構造体
45 @note このコンストラクタはライブラリ内でのみ使用する目的で作られています。
46 */
47 Sub SocketAddress(addr As *sockaddr, len As Long)
48 itemSize = len
49 item = malloc(itemSize)
50 memcpy(item, addr, itemSize)
51 End Sub
52
53 /*!
54 @brief デストラクタ
55 */
56 Sub ~SocketAddress()
57 If item <> NULL Then free(item)
58 End Sub
59
60 /*!
61 @brief アドレスファミリを取得する
62 @return アドレスファミリ
63 */
64 Function AddressFamily() As Sockets.AddressFamily
65 Return New Sockets.AddressFamily(Items->sa_family, "AddressFamily")
66 End Function
67
68 /*!
69 @brief sockaddrを取得する
70 @return sockaddrを示すアドレス
71 */
72 Function Items() As *sockaddr
73 Return item As *sockaddr
74 End Function
75
76 /*!
77 @brief sockaddrの大きさを取得する
78 @return sockaddrの大きさ
79 */
80 Function Size() As Long
81 Return itemSize
82 End Function
83
84 /*!
85 @brief 等しいかどうかを取得する
86 @retval True 等しい
87 @retval False 等しくない
88 */
89 Function Equals(address As SocketAddress) As Boolean
90 If This.Size = address.Size Then
91 Dim i As Long
92 For i = 0 To ELM(Size)
93 If This.item[i] <> address.item[i] Then Return False
94 Next
95 Return True
96 Else
97 Return False
98 End If
99 End Function
100
101Private
102
103 /*!
104 @brief 初期化する
105 @param アドレスファミリ
106 @param 確保するsockaddrの大きさ
107 */
108 Sub init(family As DWord, size As Long)
109 itemSize = size
110 item = calloc( itemSize )
111 Items->sa_family = family As Word
112 End Sub
113End Class
114
115End Namespace
116End Namespace
Note: See TracBrowser for help on using the repository browser.