Re: Socket Disconnect
From: Paul G. Tobey [eMVP] (ptobey)
Date: 08/31/04
- Next message: MDB: "Re: Socket Disconnect"
- Previous message: Jon Skeet [C# MVP]: "Re: Registry on storage card?"
- In reply to: MDB: "Socket Disconnect"
- Next in thread: MDB: "Re: Socket Disconnect"
- Reply: MDB: "Re: Socket Disconnect"
- Messages sorted by: [ date ] [ thread ]
Date: Tue, 31 Aug 2004 08:25:31 -0700
To notice that a connection has been broken, you either have to try to send
something over the socket or you have to tell the network stack to do it for
you. That is, if you are periodically sending packets, you'll find out
roughly two minutes after you send the first packet after the other device
dies that the connection is broken. In that case, the stack will detect
that there has been no acknowledgement. It will retry a number of times,
but, when all of those attempts fail, it will close the socket and you'll
get an error/exception.
If you are sitting around waiting to receive packets, though, you'll never
realize that the other end of the socket is gone, unless you tell the stack
to use keep-alive packets. When you turn that on, the network stack, when
it detects a long period of inactivity, will periodically send a packet to
the other end of the connection. If it replies, the stack goes back to
sleep. If it fails to reply, it will retry, in a certain pattern and, if
there is still no reply, will close the socket.
You have to tell your sockets to use keep-alives, using the SetSocketOption
code KeepAlive.
Note that, even if keep-alives are on, the default idle time before sending
them is 2 hours...
Paul T.
"MDB" <nospam> wrote in message
news:ui5tYo2jEHA.1404@TK2MSFTNGP09.phx.gbl...
> Hello All, I am using the below code to create a socket connection via
> wi-fi to another device. The problem is that if the device I am
> connecting
> to losing power and reboots I lose the socket connection however, my
> device
> dosn't know it was dropped and dosn't receive any type of error when it
> sends messages. From what I have read, CF dosn't support SetSocketOption
> so my question is does anyone know of a good way to work around this?
>
>
> ****SocketConnect****
> g_socClient = new Socket (AddressFamily.InterNetwork,SocketType.Stream
> ,ProtocolType.Tcp );
> IPAddress ip = IPAddress.Parse (strRemoteIPBase);
> IPEndPoint ipEnd = new IPEndPoint (ip,intTCPListenPort);
> g_socClient.Connect ( ipEnd );
>
> WaitForData();
>
>
>
> ****WaitForData ****
>
> if ( pfnCallBack == null )
> {
> pfnCallBack = new AsyncCallback (OnDataReceived);
> }
> CSocketPacket theSocPkt = new CSocketPacket ();
> theSocPkt.thisSocket = PMMobile.Classes.Globals.g_socClient;
>
> m_asynResult = g_socClient.BeginReceive (theSocPkt.dataBuffer
> ,0,theSocPkt.dataBuffer.Length ,SocketFlags.None,pfnCallBack,theSocPkt);
>
>
- Next message: MDB: "Re: Socket Disconnect"
- Previous message: Jon Skeet [C# MVP]: "Re: Registry on storage card?"
- In reply to: MDB: "Socket Disconnect"
- Next in thread: MDB: "Re: Socket Disconnect"
- Reply: MDB: "Re: Socket Disconnect"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|