Author: [email protected]
Date: Fri Mar 20 01:53:57 2009
New Revision: 1557
Modified:
branches/bleeding_edge/src/platform-freebsd.cc
branches/bleeding_edge/src/platform-linux.cc
branches/bleeding_edge/src/platform-macos.cc
branches/bleeding_edge/src/platform-win32.cc
branches/bleeding_edge/src/platform.h
Log:
Add support for setting the SO_REUSEADDR option for sockets.
Review URL: http://codereview.chromium.org/50036
Modified: branches/bleeding_edge/src/platform-freebsd.cc
==============================================================================
--- branches/bleeding_edge/src/platform-freebsd.cc (original)
+++ branches/bleeding_edge/src/platform-freebsd.cc Fri Mar 20 01:53:57 2009
@@ -667,6 +667,8 @@
int Send(const char* data, int len) const;
int Receive(char* data, int len) const;
+ bool SetReuseAddress(bool reuse_address);
+
bool IsValid() const { return socket_ != -1; }
private:
@@ -760,6 +762,13 @@
int FreeBSDSocket::Receive(char* data, int len) const {
int status = recv(socket_, data, len, 0);
return status;
+}
+
+
+bool FreeBSDSocket::SetReuseAddress(bool reuse_address) {
+ int on = reuse_address ? 1 : 0;
+ int status = setsockopt(socket_, SOL_SOCKET, SO_REUSEADDR, &on,
sizeof(on));
+ return status == 0;
}
Modified: branches/bleeding_edge/src/platform-linux.cc
==============================================================================
--- branches/bleeding_edge/src/platform-linux.cc (original)
+++ branches/bleeding_edge/src/platform-linux.cc Fri Mar 20 01:53:57 2009
@@ -668,6 +668,8 @@
int Send(const char* data, int len) const;
int Receive(char* data, int len) const;
+ bool SetReuseAddress(bool reuse_address);
+
bool IsValid() const { return socket_ != -1; }
private:
@@ -761,6 +763,13 @@
int LinuxSocket::Receive(char* data, int len) const {
int status = recv(socket_, data, len, 0);
return status;
+}
+
+
+bool LinuxSocket::SetReuseAddress(bool reuse_address) {
+ int on = reuse_address ? 1 : 0;
+ int status = setsockopt(socket_, SOL_SOCKET, SO_REUSEADDR, &on,
sizeof(on));
+ return status == 0;
}
Modified: branches/bleeding_edge/src/platform-macos.cc
==============================================================================
--- branches/bleeding_edge/src/platform-macos.cc (original)
+++ branches/bleeding_edge/src/platform-macos.cc Fri Mar 20 01:53:57 2009
@@ -593,6 +593,8 @@
int Send(const char* data, int len) const;
int Receive(char* data, int len) const;
+ bool SetReuseAddress(bool reuse_address);
+
bool IsValid() const { return socket_ != -1; }
private:
@@ -692,6 +694,13 @@
int MacOSSocket::Receive(char* data, int len) const {
int status = recv(socket_, data, len, 0);
return status;
+}
+
+
+bool MacOSSocket::SetReuseAddress(bool reuse_address) {
+ int on = reuse_address ? 1 : 0;
+ int status = setsockopt(socket_, SOL_SOCKET, SO_REUSEADDR, &on,
sizeof(on));
+ return status == 0;
}
Modified: branches/bleeding_edge/src/platform-win32.cc
==============================================================================
--- branches/bleeding_edge/src/platform-win32.cc (original)
+++ branches/bleeding_edge/src/platform-win32.cc Fri Mar 20 01:53:57 2009
@@ -1565,6 +1565,8 @@
int Send(const char* data, int len) const;
int Receive(char* data, int len) const;
+ bool SetReuseAddress(bool reuse_address);
+
bool IsValid() const { return socket_ != INVALID_SOCKET; }
private:
@@ -1658,6 +1660,14 @@
int Win32Socket::Receive(char* data, int len) const {
int status = recv(socket_, data, len, 0);
return status;
+}
+
+
+bool Win32Socket::SetReuseAddress(bool reuse_address) {
+ BOOL on = reuse_address ? TRUE : FALSE;
+ int status = setsockopt(socket_, SOL_SOCKET, SO_REUSEADDR,
+ reinterpret_cast<char*>(&on), sizeof(on));
+ return status == SOCKET_ERROR;
}
Modified: branches/bleeding_edge/src/platform.h
==============================================================================
--- branches/bleeding_edge/src/platform.h (original)
+++ branches/bleeding_edge/src/platform.h Fri Mar 20 01:53:57 2009
@@ -448,6 +448,9 @@
virtual int Send(const char* data, int len) const = 0;
virtual int Receive(char* data, int len) const = 0;
+ // Set the value of the SO_REUSEADDR socket option.
+ virtual bool SetReuseAddress(bool reuse_address) = 0;
+
virtual bool IsValid() const = 0;
static bool Setup();
--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---