простейший многопоточный TCP-сервер (echo) на D |
[Apr. 11th, 2014|09:15 pm] |
module server;
import core.time;
import std.concurrency;
import std.socket;
import std.stdio;
import std.traits;
import std.typecons;
auto share(alias var) () if (is(typeof(var) == class)) {
return cast(shared)var;
}
auto unshare(alias var) () if (is(typeof(var) == class)) {
return cast(Unqual!(typeof(var)))var;
}
private void receiver_thread (shared Socket sks) {
auto ssr = scoped!SocketSet();
auto sk = unshare!sks();
scope(exit) {
writeln("closing socket...");
sk.shutdown(SocketShutdown.BOTH);
sk.close();
}
ubyte[1] buffer;
writeln("receiver thread started");
while (sk.isAlive) {
ssr.reset();
ssr.add(sk);
int res = Socket.select(ssr, null, null, dur!"seconds"(3));
if (res == 0) {
writeln("socket timeout!");
break;
}
if (res < 0) {
writeln("select error!");
break;
}
ptrdiff_t rv = sk.receive(buffer);
if (rv == 0 || rv == Socket.ERROR) {
if (rv == Socket.ERROR) writeln("receiving error");
break;
}
writeln("received ", rv, " bytes: ", buffer[0]);
}
writeln("client closed connection");
}
void main () {
TcpSocket listener = new TcpSocket(AddressFamily.INET);
listener.setOption(SocketOptionLevel.SOCKET, SocketOption.REUSEADDR, 1);
listener.bind(new InternetAddress("localhost", 8080));
listener.blocking(true);
listener.listen(0);
for (;;) {
try {
Socket sk = listener.accept();
spawn(&receiver_thread, share!sk());
} catch (SocketAcceptException e) {
writeln("socket accept error: ", e.msg);
}
}
listener.shutdown(SocketShutdown.BOTH);
listener.close();
} |
|
|
Comments: |
From: | (Anonymous) |
Date: | April 11th, 2014 - 09:00 pm |
---|
| | | (Link) |
|
не оче
From: | (Anonymous) |
Date: | April 11th, 2014 - 09:03 pm |
---|
| | | (Link) |
|
Мне нравится правильный индентейшен и правильно расставленные скобки(открывающая не на новой строчке).
Всегда так делаю и по таким маленьким деталям знаю людей которые большие проекты пишут.
From: | (Anonymous) |
Date: | April 11th, 2014 - 09:03 pm |
---|
| | | (Link) |
|
Знаю как в "узнаю в толпе кодеров".
From: | (Anonymous) |
Date: | April 11th, 2014 - 09:06 pm |
---|
| | | (Link) |
|
>открывающая не на новой строчке
Пошло. Только стиль gnu, только хардкор.
| From: | ketmar |
Date: | April 11th, 2014 - 09:18 pm |
---|
| | | (Link) |
|
на самом деле скобки на отдельной строке лучше — удобней сворачивать. а на той же строке — это привычка терминалов с минимальным количеством строк. но я уже очень старый, чтобы переучиваться.
From: | (Anonymous) |
Date: | April 11th, 2014 - 09:25 pm |
---|
| | | (Link) |
|
> сворачивать
Разочаровал. Никогда так не делаю. Код нужно писать и разбивать так, чтобы не хотелось его сразу же сворачивать.
| From: | ketmar |
Date: | April 11th, 2014 - 09:29 pm |
---|
| | | (Link) |
|
я использую mcedit, у него вообще нет варианта «свернуть». я про тех, кому сворачивать нравится.
From: | (Anonymous) |
Date: | April 11th, 2014 - 09:30 pm |
---|
| | | (Link) |
|
Никогда не понимал таких людей. Почему они это делают?
| From: | ketmar |
Date: | April 11th, 2014 - 09:37 pm |
---|
| | | (Link) |
|
делают что?
From: | (Anonymous) |
Date: | April 11th, 2014 - 09:40 pm |
---|
| | | (Link) |
|
Скрывают код. Так нельзя.
| From: | ketmar |
Date: | April 11th, 2014 - 09:58 pm |
---|
| | | (Link) |
|
говорят, что удобно.
From: | (Anonymous) |
Date: | April 11th, 2014 - 09:05 pm |
---|
| | | (Link) |
|
хуевый пример по сути библиотеки сравниваешь
From: | (Anonymous) |
Date: | April 11th, 2014 - 09:12 pm |
---|
| | | (Link) |
|
плюс алтын
From: | (Anonymous) |
Date: | April 11th, 2014 - 09:13 pm |
---|
| | | (Link) |
|
+++
Лови плюсик в кармочку.
| From: | ketmar |
Date: | April 11th, 2014 - 09:17 pm |
---|
| | | (Link) |
|
я вообще ничего не сравниваю, просто кинул пример. не к тому, чтобы показать, что D лучше.
From: | (Anonymous) |
Date: | April 11th, 2014 - 09:47 pm |
---|
| | | (Link) |
|
да я и не упрекал
From: | (Anonymous) |
Date: | April 11th, 2014 - 09:51 pm |
---|
| | | (Link) |
|
Может зря?
From: | (Anonymous) |
Date: | April 11th, 2014 - 09:55 pm |
---|
| | | (Link) |
|
зачем?
| From: | ketmar |
Date: | April 11th, 2014 - 09:57 pm |
---|
| | | (Link) |
|
так я просто пояснял, что не для superior.
| From: | ketmar |
Date: | April 11th, 2014 - 10:21 pm |
---|
| | | (Link) |
|
а ты посмотри на D — он охуенен.
смотрел и смотрю но пока, увы, не реально применять
-чтонить кроме gcc это умеет? -где брать людей? -нахуя?
From: | (Anonymous) |
Date: | April 11th, 2014 - 11:00 pm |
---|
| | | (Link) |
|
а у мя в рсс без подкатэ.... | |