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
-~----------~----~----~----~------~----~------~--~---

Reply via email to