summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/net.js6
-rw-r--r--src/tcp_wrap.cc32
-rw-r--r--src/tcp_wrap.h2
3 files changed, 38 insertions, 2 deletions
diff --git a/lib/net.js b/lib/net.js
index dc42fd7c1..2d09e4982 100644
--- a/lib/net.js
+++ b/lib/net.js
@@ -133,12 +133,14 @@ Socket.prototype._onTimeout = function() {
Socket.prototype.setNoDelay = function() {
- /* TODO implement me */
+ if (this._handle && this._handle.setNoDelay)
+ this._handle.setNoDelay();
};
Socket.prototype.setKeepAlive = function(setting, msecs) {
- /* TODO implement me */
+ if (this._handle && this._handle.setKeepAlive)
+ this._handle.setKeepAlive(setting, ~~(msecs / 1000));
};
diff --git a/src/tcp_wrap.cc b/src/tcp_wrap.cc
index 90fc448fc..e676d048b 100644
--- a/src/tcp_wrap.cc
+++ b/src/tcp_wrap.cc
@@ -49,6 +49,7 @@ using v8::TryCatch;
using v8::Context;
using v8::Arguments;
using v8::Integer;
+using v8::Undefined;
static Persistent<Function> tcpConstructor;
static Persistent<String> family_symbol;
@@ -96,6 +97,8 @@ void TCPWrap::Initialize(Handle<Object> target) {
NODE_SET_PROTOTYPE_METHOD(t, "connect6", Connect6);
NODE_SET_PROTOTYPE_METHOD(t, "getsockname", GetSockName);
NODE_SET_PROTOTYPE_METHOD(t, "getpeername", GetPeerName);
+ NODE_SET_PROTOTYPE_METHOD(t, "setNoDelay", SetNoDelay);
+ NODE_SET_PROTOTYPE_METHOD(t, "setKeepAlive", SetKeepAlive);
tcpConstructor = Persistent<Function>::New(t->GetFunction());
@@ -219,6 +222,35 @@ Handle<Value> TCPWrap::GetPeerName(const Arguments& args) {
}
+Handle<Value> TCPWrap::SetNoDelay(const Arguments& args) {
+ HandleScope scope;
+
+ UNWRAP
+
+ int r = uv_tcp_nodelay(&wrap->handle_, 1);
+ if (r)
+ SetErrno(uv_last_error(uv_default_loop()));
+
+ return Undefined();
+}
+
+
+Handle<Value> TCPWrap::SetKeepAlive(const Arguments& args) {
+ HandleScope scope;
+
+ UNWRAP
+
+ int enable = args[0]->Int32Value();
+ unsigned int delay = args[1]->Uint32Value();
+
+ int r = uv_tcp_keepalive(&wrap->handle_, enable, delay);
+ if (r)
+ SetErrno(uv_last_error(uv_default_loop()));
+
+ return Undefined();
+}
+
+
Handle<Value> TCPWrap::Bind(const Arguments& args) {
HandleScope scope;
diff --git a/src/tcp_wrap.h b/src/tcp_wrap.h
index f0bf9efab..4a52217a1 100644
--- a/src/tcp_wrap.h
+++ b/src/tcp_wrap.h
@@ -17,6 +17,8 @@ class TCPWrap : public StreamWrap {
static v8::Handle<v8::Value> New(const v8::Arguments& args);
static v8::Handle<v8::Value> GetSockName(const v8::Arguments& args);
static v8::Handle<v8::Value> GetPeerName(const v8::Arguments& args);
+ static v8::Handle<v8::Value> SetNoDelay(const v8::Arguments& args);
+ static v8::Handle<v8::Value> SetKeepAlive(const v8::Arguments& args);
static v8::Handle<v8::Value> Bind(const v8::Arguments& args);
static v8::Handle<v8::Value> Bind6(const v8::Arguments& args);
static v8::Handle<v8::Value> Listen(const v8::Arguments& args);