DisconnectEx未在mswsock.h中定义

时间:2016-04-19 00:02:30

标签: winapi networking

在Windows 10上的Visual Studio 2015中,我收到错误error C3861: 'DisconnectEx': identifier not found。根据DisconnectEx上的documentation,该函数在标头mswsock.h中定义,但包含该标头不起作用。这个定义是否移至其他地方文档中有错误吗?

1 个答案:

答案 0 :(得分:1)

DisconnectEx()函数本身未在mswsock.h中声明。请仔细阅读文档:

  

注意必须在运行时通过调用指定了DisconnectEx操作码的WSAIoctl函数来获取SIO_GET_EXTENSION_FUNCTION_POINTER函数的函数指针。传递给WSAIoctl函数的输入缓冲区必须包含WSAID_DISCONNECTEX,这是一个全局唯一标识符(GUID),其值标识DisconnectEx扩展函数。成功时,WSAIoctl函数返回的输出包含指向DisconnectEx函数的指针。 WSAID_DISCONNECTEX GUID在Mswsock.h头文件中定义。

例如:

SOCKET s = ...;

...

GUID guidDisconnectEx = WSAID_DISCONNECTEX;
LPFN_DISCONNECTEX lpDisconnectEx = NULL;
DWORD cbBytesReturned = 0;    
WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &guidDisconnectEx, sizeof(guidDisconnectEx), &lpDisconnectEx, sizeof(lpDisconnectEx), &cbBytesReturned, NULL, NULL);

...

if (lpDisconnectEx)
    lpDisconnectEx(s);