1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | private shared int __refCount; private shared Mutex __mutex; shared static this() { __mutex = new shared(Mutex); } static this() { version(Windows) { synchronized (__mutex) { if (__refCount++ == 0) { WSADATA wd; // Winsock will still load if an older version is present. // The version is just a request. int val; val = WSAStartup(0x2020, &wd); if(val) // Request Winsock 2.2 for IPv6. throw new SocketException("Unable to initialize socket library", val); } } } } static ~this() { version(Win32) { synchronized (__mutex) { if (--__refCount == 0) WSACleanup(); } } } |
CnByaXZhdGUgc2hhcmVkIGludCBfX3JlZkNvdW50Owpwcml2YXRlIHNoYXJlZCBNdXRleCBfX211dGV4OwoKc2hhcmVkIHN0YXRpYyB0aGlzKCkKewogICAgX19tdXRleCA9IG5ldyBzaGFyZWQoTXV0ZXgpOwp9CgpzdGF0aWMgdGhpcygpCnsKICAgIHZlcnNpb24oV2luZG93cykKICAgIHsKICAgICAgICBzeW5jaHJvbml6ZWQgKF9fbXV0ZXgpIHsKICAgICAgICAgICAgaWYgKF9fcmVmQ291bnQrKyA9PSAwKSB7CiAgICAgICAgICAgICAgICBXU0FEQVRBIHdkOwoKICAgICAgICAgICAgICAgIC8vIFdpbnNvY2sgd2lsbCBzdGlsbCBsb2FkIGlmIGFuIG9sZGVyIHZlcnNpb24gaXMgcHJlc2VudC4KICAgICAgICAgICAgICAgIC8vIFRoZSB2ZXJzaW9uIGlzIGp1c3QgYSByZXF1ZXN0LgogICAgICAgICAgICAgICAgaW50IHZhbDsKICAgICAgICAgICAgICAgIHZhbCA9IFdTQVN0YXJ0dXAoMHgyMDIwLCAmd2QpOwogICAgICAgICAgICAgICAgaWYodmFsKSAvLyBSZXF1ZXN0IFdpbnNvY2sgMi4yIGZvciBJUHY2LgogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTb2NrZXRFeGNlcHRpb24oIlVuYWJsZSB0byBpbml0aWFsaXplIHNvY2tldCBsaWJyYXJ5IiwgdmFsKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKc3RhdGljIH50aGlzKCkKewogICAgdmVyc2lvbihXaW4zMikKICAgIHsKICAgICAgICBzeW5jaHJvbml6ZWQgKF9fbXV0ZXgpIHsKICAgICAgICAgICAgaWYgKC0tX19yZWZDb3VudCA9PSAwKQogICAgICAgICAgICAgICAgV1NBQ2xlYW51cCgpOwogICAgICAgIH0KICAgIH0KfQo=


