C # Check if socket is disconnected?

How can you check if a non-blocking socket is disconnected without using polling?

+6
source share
2 answers

Create a cusomt socket class that inherits from the .net socket class:

public delegate void SocketEventHandler(Socket socket); public class CustomSocket : Socket { private readonly Timer timer; private const int INTERVAL = 1000; public CustomSocket(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType) : base(addressFamily, socketType, protocolType) { timer = new Timer { Interval = INTERVAL }; timer.Tick += TimerTick; } public CustomSocket(SocketInformation socketInformation) : base(socketInformation) { timer = new Timer { Interval = INTERVAL }; timer.Tick += TimerTick; } private readonly List<SocketEventHandler> onCloseHandlers = new List<SocketEventHandler>(); public event SocketEventHandler SocketClosed { add { onCloseHandlers.Add(value); } remove { onCloseHandlers.Remove(value); } } public bool EventsEnabled { set { if(value) timer.Start(); else timer.Stop(); } } private void TimerTick(object sender, EventArgs e) { if (!Connected) { foreach (var socketEventHandler in onCloseHandlers) socketEventHandler.Invoke(this); EventsEnabled = false; } } // Hiding base connected property public new bool Connected { get { bool part1 = Poll(1000, SelectMode.SelectRead); bool part2 = (Available == 0); if (part1 & part2) return false; else return true; } } } 

Then use it as follows:

  var socket = new CustomSocket( //parameters ); socket.SocketClosed += socket_SocketClosed; socket.EventsEnabled = true; void socket_SocketClosed(Socket socket) { // do what you want } 

I just implemented the Socket close event on each socket. therefore, your application must register event handlers for this event. then socket will tell your application if it was closed;)

If there is a problem with the code, let me know.

+5
source

The Socket class has the Connected property. According to MSDN, the call for verification is not blocked. Isn't that what you are looking for?

0
source

Source: https://habr.com/ru/post/886112/


All Articles