Linux プラットフォームで dotnet コアを使用しており、CAN デバイスとの通信をセットアップしたいと考えています。SocketCan は Linux プラットフォームで利用できますが、dotnet コアの UnixDomainSocketEndPoint および Socket クラスを使用して SocketCan に直接アクセスする方法はありますか?
Linux (Debian9) 環境でこのテスト プログラムを使用して Socket のインスタンスを作成しようとすると、次のようになります。
using System;
using System.Net.Sockets;
namespace SocketScan
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Scan for available ProtocolType values");
ScanForProtocolTypes(SocketType.Stream);
ScanForProtocolTypes(SocketType.Raw);
}
private static void ScanForProtocolTypes(SocketType socketType)
{
for (var i = 0; i < 1000000; i++)
{
try
{
var socket = new Socket(AddressFamily.Unix, socketType, (ProtocolType)i);
Console.WriteLine($"Succeeded creating socket with SocketType={socketType} ProtocolType={((ProtocolType)i)}");
}
catch (SocketException)
{ }
}
}
}
}
出力は次のとおりです。
$ dotnet run SocketTest.csproj
Scan for available ProtocolType values
Succeeded creating socket with SocketType=Stream ProtocolType=Unspecified
Succeeded creating socket with SocketType=Stream ProtocolType=Icmp
Succeeded creating socket with SocketType=Raw ProtocolType=Unspecified
Succeeded creating socket with SocketType=Raw ProtocolType=Icmp
列挙型 AdressFamily、SocketType、および ProtocolType のどの値が SocketCan ソケットに一致しますか?