Как (приятно) отправить HTTP через сокет unix-домена в .NET Core - PullRequest
0 голосов
/ 29 ноября 2018

В .NET Core я могу отправлять необработанный HTTP через сокет домена unix, но я бы хотел использовать классы обработки HTTP в библиотеке вместо того, чтобы объединять мою собственную обработку HTTP.

Вот мойтекущий рабочий, но уродливый код:

const string HTTP_REQUEST = "POST /containers/foo/kill?signal=SIGHUP HTTP/1.0\r\n" +
    "Host: localhost\r\n" +
    "Accept: */*\r\n\r\n";
socket = new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.IP);
socket.ReceiveTimeout = 2000; // 2 seconds
var endpoint = new UnixDomainSocketEndPoint("/var/run/docker.sock");
socket.Connect(endpoint);
byte[] requestBytes = Encoding.ASCII.GetBytes(HTTP_REQUEST);
socket.Send(requestBytes);
byte[] recvBytes = new byte[1024];
int numBytes = socket.Receive(recvBytes, 1024, SocketFlags.None);
socket.Disconnect(false);
Console.WriteLine( Encoding.ASCII.GetString(recvBytes));

Есть ли способ использовать классы в библиотеке .NET Core для обработки HTTP-запроса и ответа через сокет домена unix?

[править] В данном конкретном случае использования я знаю, что есть библиотека Docker.DotNet для достижения того, чего я хочу, но вопрос в целом все же стоит задать.

...