Skip to content

Instantly share code, notes, and snippets.

@moreal
Last active September 3, 2019 11:22
Show Gist options
  • Save moreal/a928847e1e5ef38a77fa91451a4981c0 to your computer and use it in GitHub Desktop.
Save moreal/a928847e1e5ef38a77fa91451a4981c0 to your computer and use it in GitHub Desktop.
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading.Tasks;
namespace my_lab
{
class Program
{
class Signaler : IDisposable
{
Socket m_writeSocket;
Socket m_readSocket;
public Signaler()
{
using (var listenerA =
new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Unspecified))
{
listenerA.NoDelay = true;
listenerA.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.IpTimeToLive, true);
// using ephemeral port
listenerA.Bind(new IPEndPoint(IPAddress.Loopback, 0));
listenerA.Listen(1);
m_writeSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Unspecified)
{
NoDelay = true
};
try
{
m_writeSocket.Connect(listenerA.LocalEndPoint);
}
catch (SocketException se)
{
Console.WriteLine(Task.CurrentId);
Console.WriteLine(se.StackTrace);
Console.WriteLine(se.Message);
}
m_readSocket = listenerA.Accept();
}
}
public void Dispose()
{
m_writeSocket.Dispose();
m_readSocket.Dispose();
}
}
static void Main()
{
while (true)
{Task.Run(() => {
using (var signaler = new Signaler())
{
} });
}
}
}
}
/*
or this
using System;
using System.Net;
using System.Net.Sockets;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace SelectTest
{
class Program
{
static void Main(string[] args)
{
var count = 0;
while (true)
{
Task.Run(() => {
try {
Console.WriteLine($"Socket {count++}");
Socket m_writeSocket;
Socket m_readSocket;
using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP))
{
socket.NoDelay = true;
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.IpTimeToLive, true);
socket.Bind((EndPoint) new IPEndPoint(IPAddress.Loopback, 0));
socket.Listen(1);
m_writeSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP)
{
NoDelay = true
};
m_writeSocket.Connect(socket.LocalEndPoint);
m_readSocket = socket.Accept();
}
m_writeSocket.Blocking = false;
m_readSocket.Blocking = false;
m_writeSocket.Dispose();
m_readSocket.Dispose();
}
catch (Exception e)
{
Console.WriteLine(e);
}
});
}
}
}
}
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment