[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

microsoft.public.dotnet.framework.sdk

Problem with UDP BeginReceive / EndReceive, exceptions and connections being forceably closed.

(Simon)

10/9/2002 9:07:00 PM

I have an application that has to send a small number of bytes (<12)
to many devices, and listen for slightly larger responses (<100) on
UDP sockets.

The app has to send the bytes to each IP address in a subnet. For
eample 213.215.154.1, 213.215.154.2, 213.215.154.3
......213.215.154.254.
Also it has to do this for several subnets.

All of this is MUST be acheived on the same port number, therefore it
has to continue to send bytes to addresses in the list, whilst at the
same time listen for and process any responses on the same port.

I do this by creating a new udp socket and binding it to a local end
piont;

mSock = New Socket(AddressFamily.InterNetwork, SocketType.Dgram,
ProtocolType.Udp)
Dim iLocalPort As Integer = 8450
Dim ipHostInfo As IPHostEntry = Dns.Resolve(Dns.GetHostName())
ipHostAddress = ipHostInfo.AddressList(0)
Dim ipepLocal = New IPEndPoint(ipHostAddress, iLocalPort)
mSock.Bind(ipepLocal)

Then I call mSock.BeginRecieve and supply the defined callback
delegate;

mSock.BeginReceive(m_bRecBuff, 0, 1024, SocketFlags.None, New
AsyncCallback(AddressOf OnReceive), Nothing)

So far so good, now I start looping through my all IP addresses and
use Send on each;

For m_iCnt = 254 To 1 Step -1
ipAddress = ipAddress.Parse(strIPAddress & CStr(m_iCnt))
m_ipepRemote = New IPEndPoint(ipAddress, 8450)
mSock.SendTo(m_bSendBuff, 0, m_bSendBuff.Length, SocketFlags.None,
m_ipepRemote)
Next

This appears to work OK, as I would have expected, with one bug
exception.
When data is sent to my socket, OnReceive is executed. OnReceive
looks something like this;

Public Sub OnReceive(ByVal ar As IAsyncResult)
iBytesRead = mSock.EndReceive(ar)
mSock.BeginReceive(m_bRecBuff, 0, 1024, SocketFlags.None, New
AsyncCallback(AddressOf OnReceive), Nothing)
end Sub

I call BeginReceive again, I want to continue listening for responses
from all those IPAddresses I am sending data to.
Now the problem, sometime calls to EndReceive and BeginReceive result
in a SocketException being thrown, and it appear that once it is
thrown it continues to be thrown when attempts are made to call the.

The exception reads;

System.Net.Sockets.SocketException: An existing connection was
forcibly closed by the remote host

CAn anyone help me. I have no idea what is causing this exception,
and it is stoping my app from working. Mostly the socket will receive
just fine for the first few addresses that return data, then this
problem occurs and I cannot process any more data.

Any help, explainations or work arounds would be greatly appriciated.

TIA

Simon
1 Answer

Fred Truter

10/11/2002 12:00:00 PM

0

U2ltb24sICANCg0KSG93IGRpZCB5b3UgY3JlYXRlIHRoZSBzb2NrZXQgaW4gdGhlIGZpcnN0IHBs
YWNlPyAgRGlkIHlvdSB1c2UgU29ja2V0VHlwZS5EZ3JhbSBvbiB0aGUgU29ja2V0IGNvbnN0cnVj
dG9yPw0KDQpBbm90aGVyIHRoaW5nLCBpZiB5b3UgaGF2ZSBtdWx0aXBsZSBzdWJuZXRzLCBwZXJo
YXBzIHlvdSBoYXZlIG11bHRpcGxlIG5ldHdvcmsgY2FyZHMgKG9yIGxvY2FsIElQIGFkZHJlc3Nl
cyBib3VuZCB0byB0aGUgc2FtZSBuZXR3b3JrIGNhcmQpLiBCeSB1c2luZyBpcEhvc3RJbmZvLkFk
ZHJlc3NMaXN0KDApIHlvdSBhcmUgb25seSBsaXN0ZW5pbmcgb24gd2hpY2hldmVyIElQIGFkZHJl
c3MgaXMgYm91bmQgZmlyc3QgdG8gd2hpY2hldmVyIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQgaGFw
cGVucyB0byBiZSBmaXJzdCBpbiB0aGUgc3lzdGVtIGxpc3QuIEkgc3VnZ2VzdCB5b3UgYmluZCB0
byBJUEFkZHJlc3MuQW55ICAoPTAuMC4wLjApIHRvIGxpc3RlbiBvbiBhbGwgaW50ZXJmYWNlcyBz
aW11bHRhbmVvdXNseS4NCg0KDQoiU2ltb24iIDxzam9uZXNAd2VicGFnZS1tYXJrZXRpbmcuY29t
PiB3cm90ZSBpbiBtZXNzYWdlIG5ld3M6M2RmMmJiYjMuMDIxMDA5MDgxMy42OTExMjEzMUBwb3N0
aW5nLmdvb2dsZS5jb20uLi4NCj4gSSBoYXZlIGFuIGFwcGxpY2F0aW9uIHRoYXQgaGFzIHRvIHNl
bmQgYSBzbWFsbCBudW1iZXIgb2YgYnl0ZXMgKDwxMikNCj4gdG8gbWFueSBkZXZpY2VzLCBhbmQg
bGlzdGVuIGZvciBzbGlnaHRseSBsYXJnZXIgcmVzcG9uc2VzICg8MTAwKSBvbg0KPiBVRFAgc29j
a2V0cy4NCj4gDQo+IFRoZSBhcHAgaGFzIHRvIHNlbmQgdGhlIGJ5dGVzIHRvIGVhY2ggSVAgYWRk
cmVzcyBpbiBhIHN1Ym5ldC4gIEZvcg0KPiBlYW1wbGUgMjEzLjIxNS4xNTQuMSwgMjEzLjIxNS4x
NTQuMiwgMjEzLjIxNS4xNTQuMw0KPiAuLi4uLi4yMTMuMjE1LjE1NC4yNTQuDQo+IEFsc28gaXQg
aGFzIHRvIGRvIHRoaXMgZm9yIHNldmVyYWwgc3VibmV0cy4NCj4gDQo+IEFsbCBvZiB0aGlzIGlz
IE1VU1QgYmUgYWNoZWl2ZWQgb24gdGhlIHNhbWUgcG9ydCBudW1iZXIsIHRoZXJlZm9yZSBpdA0K
PiBoYXMgdG8gY29udGludWUgdG8gc2VuZCBieXRlcyB0byBhZGRyZXNzZXMgaW4gdGhlIGxpc3Qs
IHdoaWxzdCBhdCB0aGUNCj4gc2FtZSB0aW1lIGxpc3RlbiBmb3IgYW5kIHByb2Nlc3MgYW55IHJl
c3BvbnNlcyBvbiB0aGUgc2FtZSBwb3J0Lg0KPiANCj4gSSBkbyB0aGlzIGJ5IGNyZWF0aW5nIGEg
bmV3IHVkcCBzb2NrZXQgYW5kIGJpbmRpbmcgaXQgdG8gYSBsb2NhbCBlbmQNCj4gcGlvbnQ7DQo+
IA0KPiBtU29jayA9IE5ldyBTb2NrZXQoQWRkcmVzc0ZhbWlseS5JbnRlck5ldHdvcmssIFNvY2tl
dFR5cGUuRGdyYW0sDQo+IFByb3RvY29sVHlwZS5VZHApDQo+IERpbSBpTG9jYWxQb3J0IEFzIElu
dGVnZXIgPSA4NDUwDQo+IERpbSBpcEhvc3RJbmZvIEFzIElQSG9zdEVudHJ5ID0gRG5zLlJlc29s
dmUoRG5zLkdldEhvc3ROYW1lKCkpDQo+IGlwSG9zdEFkZHJlc3MgPSBpcEhvc3RJbmZvLkFkZHJl
c3NMaXN0KDApDQo+IERpbSBpcGVwTG9jYWwgPSBOZXcgSVBFbmRQb2ludChpcEhvc3RBZGRyZXNz
LCBpTG9jYWxQb3J0KQ0KPiBtU29jay5CaW5kKGlwZXBMb2NhbCkNCj4gDQo+IFRoZW4gSSBjYWxs
IG1Tb2NrLkJlZ2luUmVjaWV2ZSBhbmQgc3VwcGx5IHRoZSBkZWZpbmVkIGNhbGxiYWNrDQo+IGRl
bGVnYXRlOw0KPiANCj4gbVNvY2suQmVnaW5SZWNlaXZlKG1fYlJlY0J1ZmYsIDAsIDEwMjQsIFNv
Y2tldEZsYWdzLk5vbmUsIE5ldw0KPiBBc3luY0NhbGxiYWNrKEFkZHJlc3NPZiBPblJlY2VpdmUp
LCBOb3RoaW5nKQ0KPiANCj4gU28gZmFyIHNvIGdvb2QsIG5vdyBJIHN0YXJ0IGxvb3BpbmcgdGhy
b3VnaCBteSBhbGwgSVAgYWRkcmVzc2VzIGFuZA0KPiB1c2UgU2VuZCBvbiBlYWNoOw0KPiANCj4g
Rm9yIG1faUNudCA9IDI1NCBUbyAxIFN0ZXAgLTENCj4gaXBBZGRyZXNzID0gaXBBZGRyZXNzLlBh
cnNlKHN0cklQQWRkcmVzcyAmIENTdHIobV9pQ250KSkNCj4gbV9pcGVwUmVtb3RlID0gTmV3IElQ
RW5kUG9pbnQoaXBBZGRyZXNzLCA4NDUwKQ0KPiBtU29jay5TZW5kVG8obV9iU2VuZEJ1ZmYsIDAs
IG1fYlNlbmRCdWZmLkxlbmd0aCwgU29ja2V0RmxhZ3MuTm9uZSwNCj4gbV9pcGVwUmVtb3RlKQ0K
PiBOZXh0DQo+IA0KPiBUaGlzIGFwcGVhcnMgdG8gd29yayBPSywgYXMgSSB3b3VsZCBoYXZlIGV4
cGVjdGVkLCB3aXRoIG9uZSBidWcNCj4gZXhjZXB0aW9uLg0KPiBXaGVuIGRhdGEgaXMgc2VudCB0
byBteSBzb2NrZXQsIE9uUmVjZWl2ZSBpcyBleGVjdXRlZC4gIE9uUmVjZWl2ZQ0KPiBsb29rcyBz
b21ldGhpbmcgbGlrZSB0aGlzOw0KPiANCj4gUHVibGljIFN1YiBPblJlY2VpdmUoQnlWYWwgYXIg
QXMgSUFzeW5jUmVzdWx0KQ0KPiBpQnl0ZXNSZWFkID0gbVNvY2suRW5kUmVjZWl2ZShhcikNCj4g
bVNvY2suQmVnaW5SZWNlaXZlKG1fYlJlY0J1ZmYsIDAsIDEwMjQsIFNvY2tldEZsYWdzLk5vbmUs
IE5ldw0KPiBBc3luY0NhbGxiYWNrKEFkZHJlc3NPZiBPblJlY2VpdmUpLCBOb3RoaW5nKQ0KPiBl
bmQgU3ViDQo+IA0KPiBJIGNhbGwgQmVnaW5SZWNlaXZlIGFnYWluLCBJIHdhbnQgdG8gY29udGlu
dWUgbGlzdGVuaW5nIGZvciByZXNwb25zZXMNCj4gZnJvbSBhbGwgdGhvc2UgSVBBZGRyZXNzZXMg
SSBhbSBzZW5kaW5nIGRhdGEgdG8uDQo+IE5vdyB0aGUgcHJvYmxlbSwgc29tZXRpbWUgY2FsbHMg
dG8gRW5kUmVjZWl2ZSBhbmQgQmVnaW5SZWNlaXZlIHJlc3VsdA0KPiBpbiBhIFNvY2tldEV4Y2Vw
dGlvbiBiZWluZyB0aHJvd24sIGFuZCBpdCBhcHBlYXIgdGhhdCBvbmNlIGl0IGlzDQo+IHRocm93
biBpdCBjb250aW51ZXMgdG8gYmUgdGhyb3duIHdoZW4gYXR0ZW1wdHMgYXJlIG1hZGUgdG8gY2Fs
bCB0aGUuDQo+IA0KPiBUaGUgZXhjZXB0aW9uIHJlYWRzOw0KPiANCj4gU3lzdGVtLk5ldC5Tb2Nr
ZXRzLlNvY2tldEV4Y2VwdGlvbjogQW4gZXhpc3RpbmcgY29ubmVjdGlvbiB3YXMNCj4gZm9yY2li
bHkgY2xvc2VkIGJ5IHRoZSByZW1vdGUgaG9zdA0KPiANCj4gQ0FuIGFueW9uZSBoZWxwIG1lLiAg
SSBoYXZlIG5vIGlkZWEgd2hhdCBpcyBjYXVzaW5nIHRoaXMgZXhjZXB0aW9uLCANCj4gYW5kIGl0
IGlzIHN0b3BpbmcgbXkgYXBwIGZyb20gd29ya2luZy4gIE1vc3RseSB0aGUgc29ja2V0IHdpbGwg
cmVjZWl2ZQ0KPiBqdXN0IGZpbmUgZm9yIHRoZSBmaXJzdCBmZXcgYWRkcmVzc2VzIHRoYXQgcmV0
dXJuIGRhdGEsIHRoZW4gdGhpcw0KPiBwcm9ibGVtIG9jY3VycyBhbmQgSSBjYW5ub3QgcHJvY2Vz
cyBhbnkgbW9yZSBkYXRhLg0KPiANCj4gQW55IGhlbHAsIGV4cGxhaW5hdGlvbnMgb3Igd29yayBh
cm91bmRzIHdvdWxkIGJlIGdyZWF0bHkgYXBwcmljaWF0ZWQuDQo+IA0KPiBUSUENCj4gDQo+IFNp
bW9u