Skip to content
This repository has been archived by the owner on Apr 22, 2023. It is now read-only.

Commit

Permalink
Fix dns on windows
Browse files Browse the repository at this point in the history
  • Loading branch information
piscisaureus authored and ry committed Feb 7, 2011
1 parent 3ec0305 commit 61af420
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 2 deletions.
10 changes: 8 additions & 2 deletions lib/dns.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,13 @@ function updateTimer() {


var channel = new dns.Channel({SOCK_STATE_CB: function(socket, read, write) {
var watcher;
var watcher, fd;

if (process.platform == 'win32') {
fd = process.binding('os').openOSHandle(socket);
} else {
fd = socket;
}

if (socket in watchers) {
watcher = watchers[socket].watcher;
Expand All @@ -56,7 +62,7 @@ var channel = new dns.Channel({SOCK_STATE_CB: function(socket, read, write) {
delete activeWatchers[socket];
return;
} else {
watcher.set(socket, read == 1, write == 1);
watcher.set(fd, read == 1, write == 1);
watcher.start();
activeWatchers[socket] = watcher;
}
Expand Down
20 changes: 20 additions & 0 deletions src/node_os.cc
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
#include <string.h>

#ifdef __MINGW32__
# include <io.h>

# include <platform_win32.h>
# include <platform_win32_winsock.h>
#endif
Expand Down Expand Up @@ -138,6 +140,20 @@ static Handle<Value> GetLoadAvg(const Arguments& args) {
return scope.Close(loads);
}

#ifdef __MINGW32__
static Handle<Value> OpenOSHandle(const Arguments& args) {
HandleScope scope;

intptr_t handle = args[0]->IntegerValue();

int fd = _open_osfhandle(handle, 0);
if (fd < 0)
return ThrowException(ErrnoException(errno, "_open_osfhandle"));

return scope.Close(Integer::New(fd));
}
#endif // __MINGW32__

void OS::Initialize(v8::Handle<v8::Object> target) {
HandleScope scope;

Expand All @@ -149,6 +165,10 @@ void OS::Initialize(v8::Handle<v8::Object> target) {
NODE_SET_METHOD(target, "getCPUs", GetCPUInfo);
NODE_SET_METHOD(target, "getOSType", GetOSType);
NODE_SET_METHOD(target, "getOSRelease", GetOSRelease);

#ifdef __MINGW32__
NODE_SET_METHOD(target, "openOSHandle", OpenOSHandle);
#endif
}


Expand Down

0 comments on commit 61af420

Please sign in to comment.