Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(145)

Unified Diff: net/base/tcp_client_socket.h

Issue 2964: Use libevent, second try. Changes this time:... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 12 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/SConscript ('k') | net/base/tcp_client_socket_libevent.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/base/tcp_client_socket.h
===================================================================
--- net/base/tcp_client_socket.h (revision 2361)
+++ net/base/tcp_client_socket.h (working copy)
@@ -5,11 +5,21 @@
#ifndef NET_BASE_TCP_CLIENT_SOCKET_H_
#define NET_BASE_TCP_CLIENT_SOCKET_H_
+#include "build/build_config.h"
+
+#if defined(OS_WIN)
#include <ws2tcpip.h>
+#include "base/object_watcher.h"
+#elif defined(OS_POSIX)
+struct event; // From libevent
+#define SOCKET int
+#include "base/message_pump_libevent.h"
+#endif
-#include "base/object_watcher.h"
+#include "base/scoped_ptr.h"
#include "net/base/address_list.h"
#include "net/base/client_socket.h"
+#include "net/base/completion_callback.h"
namespace net {
@@ -18,7 +28,12 @@
// NOTE: The implementation supports half duplex only. Read and Write calls
// must not be in progress at the same time.
class TCPClientSocket : public ClientSocket,
- public base::ObjectWatcher::Delegate {
+#if defined(OS_WIN)
+ public base::ObjectWatcher::Delegate
+#elif defined(OS_POSIX)
+ public base::MessagePumpLibevent::Watcher
+#endif
+{
public:
// The IP address(es) and port number to connect to. The TCP socket will try
// each IP address in the list until it succeeds in establishing a
@@ -34,31 +49,23 @@
virtual bool IsConnected() const;
// Socket methods:
+ // Try to transfer buf_len bytes to/from socket.
+ // If a result is available now, return it; else call back later with one.
+ // Do not call again until a result is returned!
+ // If any bytes were transferred, the result is the byte count.
+ // On error, result is a negative error code; see net/base/net_error_list.h
+ // TODO: what would a zero return value indicate?
+ // TODO: support multiple outstanding requests?
virtual int Read(char* buf, int buf_len, CompletionCallback* callback);
virtual int Write(const char* buf, int buf_len, CompletionCallback* callback);
private:
- int CreateSocket(const struct addrinfo* ai);
- void DoCallback(int rv);
- void DidCompleteConnect();
- void DidCompleteIO();
-
- // base::ObjectWatcher::Delegate methods:
- virtual void OnObjectSignaled(HANDLE object);
-
SOCKET socket_;
- OVERLAPPED overlapped_;
- WSABUF buffer_;
- base::ObjectWatcher watcher_;
-
- CompletionCallback* callback_;
-
// The list of addresses we should try in order to establish a connection.
AddressList addresses_;
- // The addrinfo that we are attempting to use or NULL if all addrinfos have
- // been tried.
+ // Where we are in above list, or NULL if all addrinfos have been tried.
const struct addrinfo* current_ai_;
enum WaitState {
@@ -68,6 +75,34 @@
WAITING_WRITE
};
WaitState wait_state_;
+
+#if defined(OS_WIN)
+ // base::ObjectWatcher::Delegate methods:
+ virtual void OnObjectSignaled(HANDLE object);
+
+ OVERLAPPED overlapped_;
+ WSABUF buffer_;
+
+ base::ObjectWatcher watcher_;
+#elif defined(OS_POSIX)
+ // The socket's libevent wrapper
+ scoped_ptr<event> event_;
+
+ // Called by MessagePumpLibevent when the socket is ready to do I/O
+ void OnSocketReady(short flags);
+
+ // The buffer used by OnSocketReady to retry Read and Write requests
+ char* buf_;
+ int buf_len_;
+#endif
+
+ // External callback; called when read or write is complete.
+ CompletionCallback* callback_;
+
+ int CreateSocket(const struct addrinfo* ai);
+ void DoCallback(int rv);
+ void DidCompleteConnect();
+ void DidCompleteIO();
};
} // namespace net
« no previous file with comments | « net/SConscript ('k') | net/base/tcp_client_socket_libevent.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698