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

Unified Diff: net/udp/udp_socket_win.h

Issue 861963002: UDP: Windows implementation using non-blocking IO (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: git cl try Created 5 years, 11 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
Index: net/udp/udp_socket_win.h
diff --git a/net/udp/udp_socket_win.h b/net/udp/udp_socket_win.h
index 6f0ec2ccbf142222b9fb41a3348fe1a30fa011db..675be631a5e618ed6e5bee028abb3897208d8277 100644
--- a/net/udp/udp_socket_win.h
+++ b/net/udp/udp_socket_win.h
@@ -174,6 +174,10 @@ class NET_EXPORT UDPSocketWin : NON_EXPORTED_BASE(public base::NonThreadSafe) {
// Resets the thread to be used for thread-safety checks.
void DetachFromThread();
+ // This class by default uses overlapped IO. Call this method before Open()
+ // to switch to non-blocking IO.
+ void UseNonBlockingIO();
+
private:
enum SocketOptions {
SOCKET_OPTION_MULTICAST_LOOP = 1 << 0
@@ -183,8 +187,14 @@ class NET_EXPORT UDPSocketWin : NON_EXPORTED_BASE(public base::NonThreadSafe) {
void DoReadCallback(int rv);
void DoWriteCallback(int rv);
- void DidCompleteRead();
- void DidCompleteWrite();
+
+ // Version for using overlapped IO.
+ void DidCompleteReadOverlapped();
+ void DidCompleteWriteOverlapped();
+
+ // Version for using non-blocking IO.
+ void OnReadSignaledNonBlocking();
+ void OnWriteSignaledNonBlocking();
// Handles stats and logging. |result| is the number of bytes transferred, on
// success, or the net error code on failure. LogRead retrieves the address
@@ -201,8 +211,22 @@ class NET_EXPORT UDPSocketWin : NON_EXPORTED_BASE(public base::NonThreadSafe) {
const CompletionCallback& callback);
int InternalConnect(const IPEndPoint& address);
- int InternalRecvFrom(IOBuffer* buf, int buf_len, IPEndPoint* address);
- int InternalSendTo(IOBuffer* buf, int buf_len, const IPEndPoint* address);
+
+ // Version for using overlapped IO.
+ int InternalRecvFromOverlapped(IOBuffer* buf,
+ int buf_len,
+ IPEndPoint* address);
+ int InternalSendToOverlapped(IOBuffer* buf,
+ int buf_len,
+ const IPEndPoint* address);
+
+ // Version for using non-blocking IO.
+ int InternalRecvFromNonBlocking(IOBuffer* buf,
+ int buf_len,
+ IPEndPoint* address);
+ int InternalSendToNonBlocking(IOBuffer* buf,
+ int buf_len,
+ const IPEndPoint* address);
// Applies |socket_options_| to |socket_|. Should be called before
// Bind().
@@ -247,6 +271,9 @@ class NET_EXPORT UDPSocketWin : NON_EXPORTED_BASE(public base::NonThreadSafe) {
// they are not destroyed while the OS still references them.
scoped_refptr<Core> core_;
+ bool non_blocking_reads_initialized_;
+ bool non_blocking_writes_initialized_;
+
IPEndPoint* recv_from_address_;
// Cached copy of the current address we're sending to, if any. Used for
@@ -265,6 +292,9 @@ class NET_EXPORT UDPSocketWin : NON_EXPORTED_BASE(public base::NonThreadSafe) {
HANDLE qos_handle_;
QOS_FLOWID qos_flow_id_;
+ // True if overlapp IO is used.
+ bool use_overlapped_io_;
+
DISALLOW_COPY_AND_ASSIGN(UDPSocketWin);
};

Powered by Google App Engine
This is Rietveld 408576698