46 lines
1 KiB
D
46 lines
1 KiB
D
/+ dub.sdl:
|
|
name "test"
|
|
dependency "vibe-core" path=".."
|
|
+/
|
|
module test;
|
|
|
|
import vibe.core.core;
|
|
import vibe.core.log;
|
|
import vibe.core.net;
|
|
|
|
void main()
|
|
{
|
|
auto initial = determineSocketCount();
|
|
|
|
TCPConnection conn;
|
|
try {
|
|
conn = connectTCP("127.0.0.1", 16565);
|
|
logError("Connection: %s", conn);
|
|
conn.close();
|
|
assert(false, "Didn't expect TCP connection on port 16565 to succeed");
|
|
} catch (Exception) { }
|
|
|
|
assert(determineSocketCount() == initial, "Sockets leaked!");
|
|
}
|
|
|
|
size_t determineSocketCount()
|
|
{
|
|
import std.algorithm.searching : count;
|
|
import std.range : iota;
|
|
|
|
version (Posix) {
|
|
import core.sys.posix.sys.resource : getrlimit, rlimit, RLIMIT_NOFILE;
|
|
import core.sys.posix.fcntl : fcntl, F_GETFD;
|
|
|
|
rlimit rl;
|
|
enforce(getrlimit(RLIMIT_NOFILE, &rl) == 0);
|
|
return iota(rl.rlim_cur).count(fd => fcntl(fd, F_GETFD) != -1);
|
|
} else {
|
|
import core.sys.windows.winsock2 : getsockopt, SOL_SOCKET, SO_TYPE;
|
|
|
|
int st;
|
|
int stlen = st.sizeof;
|
|
return iota(65536).count!(s => getsockopt(s, SOL_SOCKET, SO_TYPE, cast(void*)&st, &stlen) == 0);
|
|
}
|
|
}
|