Здесь у меня есть программа, которая хочет
определить, является ли это единственный экземпляр
1.1. он делает это, пытаясь создать Unix Domain Socket и пытаясь привязать его к определенному адресу.
, если дублирующая программа не запущена, установить UDS и затем прослушать сокет.
2.1. если какое-либо сообщение поступает через этот сокет, программа зарегистрирует входящее сообщение
2.2. в противном случае он должен постоянно слушать сокет
, если есть дублирующаяся программа, она должна отправить сообщение и затем выйти.
Вот что яhave:
import std.socket, std.experimental.logger;
immutable string socketAddress = "\0/tmp/com.localserver.myapp";
void main()
{
auto socket = new std.socket.Socket(std.socket.AddressFamily.UNIX,
std.socket.SocketType.STREAM);
auto addr = new std.socket.UnixAddress(socketAddress);
auto isUnique = () {
bool result;
scope (success)
log("returns: ", result);
try
{
socket.bind(addr);
result = true;
}
catch (std.socket.SocketOSException e)
result = false;
// else throw error
return result;
}();
if (isUnique)
{
log("Unique instance detected. Listening...");
// works upto now
char[] buffer = [];
while (1)
{
socket.listen(0);
socket.receive(buffer);
if (buffer != []) {
log("Received message: ", buffer);
}
buffer = [];
}
}
else
{
log("Duplicate instance detected.");
socket.connect(addr);
import std.stdio;
stdout.write("Enter your message:\t");
socket.send(readln());
log("Message has been sent. Exiting.");
}
}
Документация не выглядит очень дружелюбной для тех, кто не имеет никакого опыта в программировании сокетов. Как я могу отправить и получить сообщение с помощью std.socket.Socket?