-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathSocket.cs
More file actions
240 lines (204 loc) · 6.42 KB
/
Copy pathSocket.cs
File metadata and controls
240 lines (204 loc) · 6.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
using System;
namespace Netduino.IP
{
internal class Socket : IDisposable
{
protected int _handle;
protected bool _isDisposed = false;
////const int MAX_TX_DATAGRAM_LENGTH = 1500; /* 1500 bytes */
////byte[] _txDatagramBuffer;
protected const UInt32 IP_ADDRESS_ANY = 0x0000000000000000;
protected const UInt16 IP_PORT_ANY = 0x0000;
protected UInt32 _srcIPAddress = IP_ADDRESS_ANY;
protected UInt16 _srcIPPort = IP_PORT_ANY;
protected UInt32 _destIPAddress = IP_ADDRESS_ANY;
protected UInt16 _destIPPort = IP_PORT_ANY;
protected const Int32 SELECT_MODE_READ = 0;
protected const Int32 SELECT_MODE_WRITE = 1;
protected const Int32 SELECT_MODE_ERROR = 2;
/* send and receive timeout values in milliseconds; default is 0 (infinite) */
protected int _transmitTimeoutInMilliseconds = 0;
protected int _receiveTimeoutInMilliseconds = 0;
protected IPv4Layer.ProtocolType _protocolType;
public Socket(Int32 handle)
{
// //// create a buffer for TX datagrams; our stack will reuse this same buffer as we push data towards the MAC layer.
// //_txDatagramBuffer = new byte[MAX_TX_DATAGRAM_LENGTH];
_handle = handle;
}
public virtual void Dispose()
{
_isDisposed = true;
_handle = -1;
_srcIPAddress = IP_ADDRESS_ANY;
_srcIPPort = IP_PORT_ANY;
}
public int Handle
{
get
{
return _handle;
}
}
public virtual Socket Accept()
{
// virtual method not actually implemented in base Socket class
return null;
}
public virtual void Bind(UInt32 ipAddress, UInt16 ipPort)
{
// virtual method not actually implemented in base Socket class
}
public virtual void Close()
{
// virtual method not actually implemented in base Socket class
}
public virtual void Connect(UInt32 ipAddress, UInt16 ipPort)
{
// virtual method not actually implemented in base Socket class
}
public virtual void Listen(int backlog)
{
// virtual method not actually impelmented in base Socket class
}
public virtual bool Poll(Int32 mode, Int32 microSeconds)
{
// virtual method not actually implemented in base Socket class
return false;
}
internal virtual UInt16 ReceiveBufferSize
{
get
{
return 0;
}
set
{
}
}
internal virtual UInt16 TransmitBufferSize
{
get
{
return 0;
}
set
{
}
}
public virtual Int32 ReceiveTimeoutInMilliseconds
{
get
{
return _receiveTimeoutInMilliseconds;
}
set
{
if (value == 0 || value == -1)
{
_receiveTimeoutInMilliseconds = 0;
}
else if (value < -1)
{
throw new ArgumentOutOfRangeException();
}
else
{
_receiveTimeoutInMilliseconds = value;
}
}
}
public virtual Int32 TransmitTimeoutInMilliseconds
{
get
{
return _transmitTimeoutInMilliseconds;
}
set
{
if (value == 0 || value == -1)
{
_transmitTimeoutInMilliseconds = 0;
}
else if (value < -1)
{
throw new ArgumentOutOfRangeException();
}
else if (value >= 500)
{
_transmitTimeoutInMilliseconds = value;
}
else // if (value > 0 && value < 500)
{
_transmitTimeoutInMilliseconds = 500;
}
}
}
public virtual Int32 Send(byte[] buffer, Int32 offset, Int32 count, Int32 flags, Int64 timeoutInMachineTicks)
{
// virtual method not actually implemented in base Socket class
return 0;
}
public virtual Int32 SendTo(byte[] buffer, int offset, int count, int flags, Int64 timeoutInMachineTicks, UInt32 ipAddress, UInt16 ipPort)
{
// virtual method not actually implemented in base Socket class
return 0;
}
internal virtual void OnPacketReceived(UInt32 sourceIPAddress, UInt32 destinationIPAddress, byte[] buffer, Int32 index, Int32 count)
{
// virtual method not actually implemented in base Socket class
}
public virtual Int32 GetBytesToRead()
{
// virtual method not actually implemented in base Socket class
return 0;
}
public virtual Int32 Receive(byte[] buf, Int32 offset, Int32 count, Int32 flags, Int64 timeoutInMachineTicks)
{
// virtual method not actually implemented in base Socket class
return 0;
}
public virtual Int32 ReceiveFrom(byte[] buf, Int32 offset, Int32 count, Int32 flags, Int64 timeoutInMachineTicks, out UInt32 ipAddress, out UInt16 ipPort)
{
// virtual method not actually implemented in base Socket class
ipAddress = 0;
ipPort = 0;
return 0;
}
internal UInt32 SourceIPAddress
{
get
{
return _srcIPAddress;
}
}
internal UInt16 SourceIPPort
{
get
{
return _srcIPPort;
}
}
internal UInt32 DestinationIPAddress
{
get
{
return _destIPAddress;
}
}
internal UInt16 DestinationIPPort
{
get
{
return _destIPPort;
}
}
internal IPv4Layer.ProtocolType ProtocolType
{
get
{
return _protocolType;
}
}
}
}