|
|
|
@ -41,6 +41,7 @@ |
|
|
|
|
#include "src/core/lib/iomgr/sockaddr_windows.h" |
|
|
|
|
#include "src/core/lib/iomgr/socket_windows.h" |
|
|
|
|
#include "src/core/lib/iomgr/tcp_windows.h" |
|
|
|
|
#include "src/core/lib/slice/slice.h" |
|
|
|
|
#include "src/core/lib/slice/slice_internal.h" |
|
|
|
|
|
|
|
|
|
/* TODO(apolcyn): remove this hack after fixing upstream.
|
|
|
|
@ -123,8 +124,8 @@ class GrpcPolledFdWindows { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
~GrpcPolledFdWindows() { |
|
|
|
|
grpc_slice_unref(read_buf_); |
|
|
|
|
grpc_slice_unref(write_buf_); |
|
|
|
|
CSliceUnref(read_buf_); |
|
|
|
|
CSliceUnref(write_buf_); |
|
|
|
|
GPR_ASSERT(read_closure_ == nullptr); |
|
|
|
|
GPR_ASSERT(write_closure_ == nullptr); |
|
|
|
|
grpc_winsocket_destroy(winsocket_); |
|
|
|
@ -144,7 +145,7 @@ class GrpcPolledFdWindows { |
|
|
|
|
GPR_ASSERT(read_closure_ == nullptr); |
|
|
|
|
read_closure_ = read_closure; |
|
|
|
|
GPR_ASSERT(GRPC_SLICE_LENGTH(read_buf_) == 0); |
|
|
|
|
grpc_slice_unref(read_buf_); |
|
|
|
|
CSliceUnref(read_buf_); |
|
|
|
|
GPR_ASSERT(!read_buf_has_data_); |
|
|
|
|
read_buf_ = GRPC_SLICE_MALLOC(4192); |
|
|
|
|
if (connect_done_) { |
|
|
|
@ -354,12 +355,12 @@ class GrpcPolledFdWindows { |
|
|
|
|
// to write everything inline.
|
|
|
|
|
GRPC_CARES_TRACE_LOG("fd:|%s| SendVUDP called", GetName()); |
|
|
|
|
GPR_ASSERT(GRPC_SLICE_LENGTH(write_buf_) == 0); |
|
|
|
|
grpc_slice_unref(write_buf_); |
|
|
|
|
CSliceUnref(write_buf_); |
|
|
|
|
write_buf_ = FlattenIovec(iov, iov_count); |
|
|
|
|
DWORD bytes_sent = 0; |
|
|
|
|
int wsa_error_code = 0; |
|
|
|
|
if (SendWriteBuf(&bytes_sent, nullptr, &wsa_error_code) != 0) { |
|
|
|
|
grpc_slice_unref(write_buf_); |
|
|
|
|
CSliceUnref(write_buf_); |
|
|
|
|
write_buf_ = grpc_empty_slice(); |
|
|
|
|
wsa_error_ctx->SetWSAError(wsa_error_code); |
|
|
|
|
char* msg = gpr_format_message(wsa_error_code); |
|
|
|
@ -387,7 +388,7 @@ class GrpcPolledFdWindows { |
|
|
|
|
case WRITE_IDLE: |
|
|
|
|
tcp_write_state_ = WRITE_REQUESTED; |
|
|
|
|
GPR_ASSERT(GRPC_SLICE_LENGTH(write_buf_) == 0); |
|
|
|
|
grpc_slice_unref(write_buf_); |
|
|
|
|
CSliceUnref(write_buf_); |
|
|
|
|
write_buf_ = FlattenIovec(iov, iov_count); |
|
|
|
|
wsa_error_ctx->SetWSAError(WSAEWOULDBLOCK); |
|
|
|
|
return -1; |
|
|
|
@ -410,7 +411,7 @@ class GrpcPolledFdWindows { |
|
|
|
|
GRPC_SLICE_START_PTR(write_buf_)[i]); |
|
|
|
|
total_sent++; |
|
|
|
|
} |
|
|
|
|
grpc_slice_unref(currently_attempted); |
|
|
|
|
CSliceUnref(currently_attempted); |
|
|
|
|
tcp_write_state_ = WRITE_IDLE; |
|
|
|
|
return total_sent; |
|
|
|
|
} |
|
|
|
@ -600,7 +601,7 @@ class GrpcPolledFdWindows { |
|
|
|
|
read_buf_, 0, winsocket_->read_info.bytes_transferred); |
|
|
|
|
read_buf_has_data_ = true; |
|
|
|
|
} else { |
|
|
|
|
grpc_slice_unref(read_buf_); |
|
|
|
|
CSliceUnref(read_buf_); |
|
|
|
|
read_buf_ = grpc_empty_slice(); |
|
|
|
|
} |
|
|
|
|
GRPC_CARES_TRACE_LOG( |
|
|
|
@ -637,7 +638,7 @@ class GrpcPolledFdWindows { |
|
|
|
|
GRPC_CARES_TRACE_LOG("fd:|%s| OnIocpWriteableInner. bytes transferred:%d", |
|
|
|
|
GetName(), winsocket_->write_info.bytes_transferred); |
|
|
|
|
} else { |
|
|
|
|
grpc_slice_unref(write_buf_); |
|
|
|
|
CSliceUnref(write_buf_); |
|
|
|
|
write_buf_ = grpc_empty_slice(); |
|
|
|
|
} |
|
|
|
|
ScheduleAndNullWriteClosure(error); |
|
|
|
|