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

Unified Diff: net/base/tcp_client_socket.h

Issue 4049: Port SSLClientSocket to Linux (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 years, 2 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/base/ssl_client_socket_unittest.cc ('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 3736)
+++ net/base/tcp_client_socket.h (working copy)
@@ -12,6 +12,7 @@
#include "base/object_watcher.h"
#elif defined(OS_POSIX)
struct event; // From libevent
+#include <sys/socket.h> // for struct sockaddr
#define SOCKET int
#include "base/message_pump_libevent.h"
#endif
@@ -25,8 +26,10 @@
// A client socket that uses TCP as the transport layer.
//
-// NOTE: The implementation supports half duplex only. Read and Write calls
-// must not be in progress at the same time.
+// NOTE: The windows implementation supports half duplex only.
+// Read and Write calls must not be in progress at the same time.
+// The libevent implementation supports full duplex because that
+// made it slightly easier to implement ssl.
class TCPClientSocket : public ClientSocket,
#if defined(OS_WIN)
public base::ObjectWatcher::Delegate
@@ -49,11 +52,19 @@
virtual bool IsConnected() const;
// Socket methods:
- // Multiple outstanding requests are not supported. In particular, full
- // duplex mode (reading and writing at the same time) is not supported.
+ // Multiple outstanding requests are not supported.
+ // Full duplex mode (reading and writing at the same time) is not supported
+ // on Windows (but is supported on Linux and Mac for ease of implementation
+ // of SSLClientSocket)
virtual int Read(char* buf, int buf_len, CompletionCallback* callback);
virtual int Write(const char* buf, int buf_len, CompletionCallback* callback);
+#if defined(OS_POSIX)
+ // Identical to posix system call of same name
+ // Needed by ssl_client_socket_nss
+ virtual int GetPeerName(struct sockaddr *name, socklen_t *namelen);
+#endif
+
private:
SOCKET socket_;
@@ -63,6 +74,7 @@
// Where we are in above list, or NULL if all addrinfos have been tried.
const struct addrinfo* current_ai_;
+#if defined(OS_WIN)
enum WaitState {
NOT_WAITING,
WAITING_CONNECT,
@@ -71,7 +83,6 @@
};
WaitState wait_state_;
-#if defined(OS_WIN)
// base::ObjectWatcher::Delegate methods:
virtual void OnObjectSignaled(HANDLE object);
@@ -79,25 +90,40 @@
WSABUF buffer_;
base::ObjectWatcher watcher_;
+
+ void DidCompleteIO();
#elif defined(OS_POSIX)
+ // Whether we're currently waiting for connect() to complete
+ bool waiting_connect_;
+
// 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
+ // The buffer used by OnSocketReady to retry Read requests
char* buf_;
int buf_len_;
+
+ // The buffer used by OnSocketReady to retry Write requests
+ const char* write_buf_;
+ int write_buf_len_;
+
+ // External callback; called when write is complete.
+ CompletionCallback* write_callback_;
+
+ void DoWriteCallback(int rv);
+ void DidCompleteRead();
+ void DidCompleteWrite();
#endif
- // External callback; called when read or write is complete.
+ // External callback; called when read (and on Windows, 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/base/ssl_client_socket_unittest.cc ('k') | net/base/tcp_client_socket_libevent.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698