Revision: 21316
Author: [email protected]
Date: Wed May 14 16:34:13 2014 UTC
Log: Remove socket implementation from V8.
[email protected], [email protected]
Review URL: https://codereview.chromium.org/281723007
http://code.google.com/p/v8/source/detail?r=21316
Deleted:
/branches/bleeding_edge/src/platform/socket.cc
/branches/bleeding_edge/src/platform/socket.h
/branches/bleeding_edge/test/cctest/test-socket.cc
Modified:
/branches/bleeding_edge/src/platform-posix.cc
/branches/bleeding_edge/test/cctest/cctest.gyp
/branches/bleeding_edge/test/cctest/cctest.h
/branches/bleeding_edge/test/cctest/test-debug.cc
/branches/bleeding_edge/tools/gyp/v8.gyp
=======================================
--- /branches/bleeding_edge/src/platform/socket.cc Tue Apr 29 06:42:26 2014
UTC
+++ /dev/null
@@ -1,201 +0,0 @@
-// Copyright 2013 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "platform/socket.h"
-
-#if V8_OS_POSIX
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include <netdb.h>
-
-#include <unistd.h>
-#endif
-
-#include <errno.h>
-
-#include "checks.h"
-#include "once.h"
-
-namespace v8 {
-namespace internal {
-
-#if V8_OS_WIN
-
-static V8_DECLARE_ONCE(initialize_winsock) = V8_ONCE_INIT;
-
-
-static void InitializeWinsock() {
- WSADATA wsa_data;
- int result = WSAStartup(MAKEWORD(1, 0), &wsa_data);
- CHECK_EQ(0, result);
-}
-
-#endif // V8_OS_WIN
-
-
-Socket::Socket() {
-#if V8_OS_WIN
- // Be sure to initialize the WinSock DLL first.
- CallOnce(&initialize_winsock, &InitializeWinsock);
-#endif // V8_OS_WIN
-
- // Create the native socket handle.
- native_handle_ = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
-}
-
-
-bool Socket::Bind(int port) {
- ASSERT_GE(port, 0);
- ASSERT_LT(port, 65536);
- if (!IsValid()) return false;
- struct sockaddr_in sin;
- memset(&sin, 0, sizeof(sin));
- sin.sin_family = AF_INET;
- sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
- sin.sin_port = htons(static_cast<uint16_t>(port));
- int result = ::bind(
- native_handle_, reinterpret_cast<struct sockaddr*>(&sin),
sizeof(sin));
- return result == 0;
-}
-
-
-bool Socket::Listen(int backlog) {
- if (!IsValid()) return false;
- int result = ::listen(native_handle_, backlog);
- return result == 0;
-}
-
-
-Socket* Socket::Accept() {
- if (!IsValid()) return NULL;
- while (true) {
- NativeHandle native_handle = ::accept(native_handle_, NULL, NULL);
- if (native_handle == kInvalidNativeHandle) {
-#if V8_OS_POSIX
- if (errno == EINTR) continue; // Retry after signal.
-#endif
- return NULL;
- }
- return new Socket(native_handle);
- }
-}
-
-
-bool Socket::Connect(const char* host, const char* port) {
- ASSERT_NE(NULL, host);
- ASSERT_NE(NULL, port);
- if (!IsValid()) return false;
-
- // Lookup host and port.
- struct addrinfo* info = NULL;
- struct addrinfo hint;
- memset(&hint, 0, sizeof(hint));
- hint.ai_family = AF_INET;
- hint.ai_socktype = SOCK_STREAM;
- hint.ai_protocol = IPPROTO_TCP;
- int result = ::getaddrinfo(host, port, &hint, &info);
- if (result != 0) {
- return false;
- }
-
- // Connect to the host on the given port.
- for (struct addrinfo* ai = info; ai != NULL; ai = ai->ai_next) {
- // Try to connect using this addr info.
- while (true) {
- result = ::connect(
- native_handle_, ai->ai_addr, static_cast<int>(ai->ai_addrlen));
- if (result == 0) {
- freeaddrinfo(info);
- return true;
- }
-#if V8_OS_POSIX
- if (errno == EINTR) continue; // Retry after signal.
-#endif
- break;
- }
- }
- freeaddrinfo(info);
- return false;
-}
-
-
-bool Socket::Shutdown() {
- if (!IsValid()) return false;
- // Shutdown socket for both read and write.
-#if V8_OS_POSIX
- int result = ::shutdown(native_handle_, SHUT_RDWR);
- ::close(native_handle_);
-#elif V8_OS_WIN
- int result = ::shutdown(native_handle_, SD_BOTH);
- ::closesocket(native_handle_);
-#endif
- native_handle_ = kInvalidNativeHandle;
- return result == 0;
-}
-
-
-int Socket::Send(const char* buffer, int length) {
- ASSERT(length <= 0 || buffer != NULL);
- if (!IsValid()) return 0;
- int offset = 0;
- while (offset < length) {
- int result = ::send(native_handle_, buffer + offset, length - offset,
0);
- if (result == 0) {
- break;
- } else if (result > 0) {
- ASSERT(result <= length - offset);
- offset += result;
- } else {
-#if V8_OS_POSIX
- if (errno == EINTR) continue; // Retry after signal.
-#endif
- return 0;
- }
- }
- return offset;
-}
-
-
-int Socket::Receive(char* buffer, int length) {
- if (!IsValid()) return 0;
- if (length <= 0) return 0;
- ASSERT_NE(NULL, buffer);
- while (true) {
- int result = ::recv(native_handle_, buffer, length, 0);
- if (result < 0) {
-#if V8_OS_POSIX
- if (errno == EINTR) continue; // Retry after signal.
-#endif
- return 0;
- }
- return result;
- }
-}
-
-
-bool Socket::SetReuseAddress(bool reuse_address) {
- if (!IsValid()) return 0;
- int v = reuse_address ? 1 : 0;
- int result = ::setsockopt(native_handle_, SOL_SOCKET, SO_REUSEADDR,
- reinterpret_cast<char*>(&v), sizeof(v));
- return result == 0;
-}
-
-
-// static
-int Socket::GetLastError() {
-#if V8_OS_POSIX
- return errno;
-#elif V8_OS_WIN
- // Be sure to initialize the WinSock DLL first.
- CallOnce(&initialize_winsock, &InitializeWinsock);
-
- // Now we can safely perform WSA calls.
- return ::WSAGetLastError();
-#endif
-}
-
-} } // namespace v8::internal
=======================================
--- /branches/bleeding_edge/src/platform/socket.h Tue Apr 29 06:42:26 2014
UTC
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright 2013 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef V8_PLATFORM_SOCKET_H_
-#define V8_PLATFORM_SOCKET_H_
-
-#include "globals.h"
-#if V8_OS_WIN
-#include "win32-headers.h"
-#endif
-
-namespace v8 {
-namespace internal {
-
-//
----------------------------------------------------------------------------
-// Socket
-//
-
-class Socket V8_FINAL {
- public:
- Socket();
- ~Socket() { Shutdown(); }
-
- // Server initialization.
- bool Bind(int port) V8_WARN_UNUSED_RESULT;
- bool Listen(int backlog) V8_WARN_UNUSED_RESULT;
- Socket* Accept() V8_WARN_UNUSED_RESULT;
-
- // Client initialization.
- bool Connect(const char* host, const char* port) V8_WARN_UNUSED_RESULT;
-
- // Shutdown socket for both read and write. This causes blocking Send and
- // Receive calls to exit. After |Shutdown()| the Socket object cannot be
- // used for any communication.
- bool Shutdown();
-
- // Data Transimission
- // Return 0 on failure.
- int Send(const char* buffer, int length) V8_WARN_UNUSED_RESULT;
- int Receive(char* buffer, int length) V8_WARN_UNUSED_RESULT;
-
- // Set the value of the SO_REUSEADDR socket option.
- bool SetReuseAddress(bool reuse_address);
-
- V8_INLINE bool IsValid() const {
- return native_handle_ != kInvalidNativeHandle;
- }
-
- static int GetLastError();
-
- // The implementation-defined native handle type.
-#if V8_OS_POSIX
- typedef int NativeHandle;
- static const NativeHandle kInvalidNativeHandle = -1;
-#elif V8_OS_WIN
- typedef SOCKET NativeHandle;
- static const NativeHandle kInvalidNativeHandle = INVALID_SOCKET;
-#endif
-
- NativeHandle& native_handle() {
- return native_handle_;
- }
- const NativeHandle& native_handle() const {
- return native_handle_;
- }
-
- private:
- explicit Socket(NativeHandle native_handle) :
native_handle_(native_handle) {}
-
- NativeHandle native_handle_;
-
- DISALLOW_COPY_AND_ASSIGN(Socket);
-};
-
-} } // namespace v8::internal
-
-#endif // V8_PLATFORM_SOCKET_H_
=======================================
--- /branches/bleeding_edge/test/cctest/test-socket.cc Wed Sep 4 10:41:51
2013 UTC
+++ /dev/null
@@ -1,176 +0,0 @@
-// Copyright 2009 the V8 project authors. All rights reserved.
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following
-// disclaimer in the documentation and/or other materials provided
-// with the distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived
-// from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#include "v8.h"
-#include "platform.h"
-#include "platform/socket.h"
-#include "cctest.h"
-
-
-using namespace ::v8::internal;
-
-
-class SocketListenerThread : public Thread {
- public:
- SocketListenerThread(int port, int data_size)
- : Thread("SocketListenerThread"),
- port_(port),
- data_size_(data_size),
- server_(NULL),
- client_(NULL),
- listening_(0) {
- data_ = new char[data_size_];
- }
- ~SocketListenerThread() {
- // Close both sockets.
- delete client_;
- delete server_;
- delete[] data_;
- }
-
- void Run();
- void WaitForListening() { listening_.Wait(); }
- char* data() { return data_; }
-
- private:
- int port_;
- char* data_;
- int data_size_;
- Socket* server_; // Server socket used for bind/accept.
- Socket* client_; // Single client connection used by the test.
- Semaphore listening_; // Signalled when the server socket is in listen
mode.
-};
-
-
-void SocketListenerThread::Run() {
- bool ok;
-
- // Create the server socket and bind it to the requested port.
- server_ = new Socket;
- server_->SetReuseAddress(true);
- CHECK(server_ != NULL);
- ok = server_->Bind(port_);
- CHECK(ok);
-
- // Listen for new connections.
- ok = server_->Listen(1);
- CHECK(ok);
- listening_.Signal();
-
- // Accept a connection.
- client_ = server_->Accept();
- CHECK(client_ != NULL);
-
- // Read the expected niumber of bytes of data.
- int bytes_read = 0;
- while (bytes_read < data_size_) {
- bytes_read += client_->Receive(data_ + bytes_read, data_size_ -
bytes_read);
- }
-}
-
-
-static bool SendAll(Socket* socket, const char* data, int len) {
- int sent_len = 0;
- while (sent_len < len) {
- int status = socket->Send(data, len);
- if (status <= 0) {
- return false;
- }
- sent_len += status;
- }
- return true;
-}
-
-
-static void SendAndReceive(int port, char *data, int len) {
- static const char* kLocalhost = "localhost";
-
- bool ok;
-
- // Make a string with the port number.
- const int kPortBuferLen = 6;
- char port_str[kPortBuferLen];
- OS::SNPrintF(Vector<char>(port_str, kPortBuferLen), "%d", port);
-
- // Create a socket listener.
- SocketListenerThread* listener = new SocketListenerThread(port, len);
- listener->Start();
- listener->WaitForListening();
-
- // Connect and write some data.
- Socket* client = new Socket;
- CHECK(client != NULL);
- ok = client->Connect(kLocalhost, port_str);
- CHECK(ok);
-
- // Send all the data.
- ok = SendAll(client, data, len);
- CHECK(ok);
-
- // Wait until data is received.
- listener->Join();
-
- // Check that data received is the same as data send.
- for (int i = 0; i < len; i++) {
- CHECK(data[i] == listener->data()[i]);
- }
-
- // Close the client before the listener to avoid TIME_WAIT issues.
- client->Shutdown();
- delete client;
- delete listener;
-}
-
-
-TEST(Socket) {
- // Make sure this port is not used by other tests to allow tests to run
in
- // parallel.
- static const int kPort = 5859 + FlagDependentPortOffset();
-
- // Send and receive some data.
- static const int kBufferSizeSmall = 20;
- char small_data[kBufferSizeSmall + 1] = "1234567890abcdefghij";
- SendAndReceive(kPort, small_data, kBufferSizeSmall);
-
- // Send and receive some more data.
- static const int kBufferSizeMedium = 10000;
- char* medium_data = new char[kBufferSizeMedium];
- for (int i = 0; i < kBufferSizeMedium; i++) {
- medium_data[i] = i % 256;
- }
- SendAndReceive(kPort, medium_data, kBufferSizeMedium);
- delete[] medium_data;
-
- // Send and receive even more data.
- static const int kBufferSizeLarge = 1000000;
- char* large_data = new char[kBufferSizeLarge];
- for (int i = 0; i < kBufferSizeLarge; i++) {
- large_data[i] = i % 256;
- }
- SendAndReceive(kPort, large_data, kBufferSizeLarge);
- delete[] large_data;
-}
=======================================
--- /branches/bleeding_edge/src/platform-posix.cc Tue May 13 08:16:26 2014
UTC
+++ /branches/bleeding_edge/src/platform-posix.cc Wed May 14 16:34:13 2014
UTC
@@ -17,7 +17,6 @@
#include <time.h>
#include <sys/mman.h>
-#include <sys/socket.h>
#include <sys/resource.h>
#include <sys/time.h>
#include <sys/types.h>
=======================================
--- /branches/bleeding_edge/test/cctest/cctest.gyp Thu Apr 17 11:57:08 2014
UTC
+++ /branches/bleeding_edge/test/cctest/cctest.gyp Wed May 14 16:34:13 2014
UTC
@@ -105,7 +105,6 @@
'test-representation.cc',
'test-semaphore.cc',
'test-serialize.cc',
- 'test-socket.cc',
'test-spaces.cc',
'test-strings.cc',
'test-symbols.cc',
=======================================
--- /branches/bleeding_edge/test/cctest/cctest.h Wed Apr 30 12:25:18 2014
UTC
+++ /branches/bleeding_edge/test/cctest/cctest.h Wed May 14 16:34:13 2014
UTC
@@ -401,13 +401,6 @@
const char* source, const char* origin_url) {
return CompileRunWithOrigin(v8_str(source), origin_url);
}
-
-
-// Pick a slightly different port to allow tests to be run in parallel.
-static inline int FlagDependentPortOffset() {
- return ::v8::internal::FLAG_crankshaft == false ? 100 :
- ::v8::internal::FLAG_always_opt ? 200 : 0;
-}
// Helper function that simulates a full new-space in the heap.
=======================================
--- /branches/bleeding_edge/test/cctest/test-debug.cc Wed May 14 16:28:46
2014 UTC
+++ /branches/bleeding_edge/test/cctest/test-debug.cc Wed May 14 16:34:13
2014 UTC
@@ -37,7 +37,6 @@
#include "frames.h"
#include "platform.h"
#include "platform/condition-variable.h"
-#include "platform/socket.h"
#include "stub-cache.h"
#include "utils.h"
=======================================
--- /branches/bleeding_edge/tools/gyp/v8.gyp Wed May 14 16:28:46 2014 UTC
+++ /branches/bleeding_edge/tools/gyp/v8.gyp Wed May 14 16:34:13 2014 UTC
@@ -500,8 +500,6 @@
'../../src/platform/mutex.h',
'../../src/platform/semaphore.cc',
'../../src/platform/semaphore.h',
- '../../src/platform/socket.cc',
- '../../src/platform/socket.h',
'../../src/preparse-data-format.h',
'../../src/preparse-data.cc',
'../../src/preparse-data.h',
@@ -867,7 +865,7 @@
}],
['_toolset=="target"', {
'libraries': [
- '-lbacktrace', '-lsocket'
+ '-lbacktrace'
],
}],
],
@@ -930,7 +928,7 @@
['OS=="solaris"', {
'link_settings': {
'libraries': [
- '-lsocket -lnsl',
+ '-lnsl',
]},
'sources': [
'../../src/platform-solaris.cc',
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.