Skip to content

Commit

Permalink
Merge pull request grpc#3249 from nicolasnoble/windows-fixes
Browse files Browse the repository at this point in the history
Fixing lingering bytes clipping issue on socket shutdown.
  • Loading branch information
ctiller committed Sep 4, 2015
2 parents 2b7b235 + 77ccdb9 commit a73cae9
Showing 1 changed file with 22 additions and 0 deletions.
22 changes: 22 additions & 0 deletions src/core/iomgr/socket_windows.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,12 @@

#ifdef GPR_WINSOCK_SOCKET

#include <winsock2.h>
#include <mswsock.h>

#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include <grpc/support/log_win32.h>
#include <grpc/support/string_util.h>

#include "src/core/iomgr/iocp_windows.h"
Expand All @@ -63,6 +67,24 @@ grpc_winsocket *grpc_winsocket_create(SOCKET socket, const char *name) {
various callsites of that function, which happens to be in various
mutex hold states, and that'd be unsafe to call them directly. */
void grpc_winsocket_shutdown(grpc_winsocket *winsocket) {
/* Grab the function pointer for DisconnectEx for that specific socket.
It may change depending on the interface. */
int status;
GUID guid = WSAID_DISCONNECTEX;
LPFN_DISCONNECTEX DisconnectEx;
DWORD ioctl_num_bytes;

status = WSAIoctl(winsocket->socket, SIO_GET_EXTENSION_FUNCTION_POINTER,
&guid, sizeof(guid), &DisconnectEx, sizeof(DisconnectEx),
&ioctl_num_bytes, NULL, NULL);

if (status == 0) {
DisconnectEx(winsocket->socket, NULL, 0, 0);
} else {
char *utf8_message = gpr_format_message(WSAGetLastError());
gpr_log(GPR_ERROR, "Unable to retrieve DisconnectEx pointer : %s", utf8_message);
gpr_free(utf8_message);
}
closesocket(winsocket->socket);
}

Expand Down

0 comments on commit a73cae9

Please sign in to comment.