Winsock -> WinRT Windows.Networking.Sockets -- 映射错误代码
Winsock -> WinRT Windows.Networking.Sockets -- mapping error codes
我正在将C++库移植到WinRT。它使用Winsock。WinRT不支持Winsock。Microsoft指示您改用Windows.Networking.Sockets。我在尝试将Winsock API映射到Windows.Networking.Sockets API时遇到了一些问题。我在托管代码中使用过套接字,但在C++中没有。我不熟悉Winsock API。
我相信我会遇到其他问题,但首先,我需要确定获取套接字错误代码的正确方法。我认为这是正确的映射:WSAGetLastError()==SocketError.GetStatus(hresult)
正确吗?
- 此文档详细说明了使用winsock时可能出现的错误代码:
Windows套接字错误代码 - 此文档详细介绍了一个枚举,我认为它是等效的,但非常不同:
SocketErrorStatus枚举
这两个错误代码的数量非常不同。此外,WSAGetLastError()返回上一个失败的Windows套接字操作的错误状态,其中SocketError.GetStatus(hresult)需要一个hresult作为输入,可能来自特定尝试操作的异常处理。这需要进行大量的重构才能做出更改,所以我想在做这项工作之前确保我做对了。
最后,有没有一份文件可以让我参考,它定义了我正在寻找的映射?
WinRT不支持Winsock。
截至2014年10月。https://blogs.windows.com/buildingapps/2014/10/13/winsock-and-more-open-source-for-your-windows-store-apps/
已经用Winsock重建了我端的应用程序,并可以确认它是否有效。
将被阻止的WinRT C++/CX套接字调用都是异步的,因此它们不会立即返回结果代码。当出现问题时,异步任务将抛出一个异常,异常将被整理到等待它的任务中。假设你使用的是微软的任务库(ppltasks.h),将套接字连接到远程接口的代码将如下所示:
StreamSocket^ socket = ref new StreamSocket();
// Assume portStr and hostName are defined elsewhere
String ^portStr;
HostName^ hostName;
task<void>(_connectSocket->ConnectAsync(hostName, portStr)).then([this] (task<void> previousTask)
{
try
{
previousTask.get();
}
catch (Exception^ exception)
{
// If ConnectAsync gets an error, this is where you can catch it
SocketErrorStatus status = SocketError.GetStatus(exception->HResult);
// Do something interesting with HResult
}
});
Microsoft的StreamSocket示例中有进行标准套接字调用的示例,也有他们期望如何调用接口的示例,包括错误处理,只是他们总是在异常中打印出错误消息的字符串版本,而不是查看HResult。
- Boost::ASIO VS Qt networking
- C++ UDP RecvFrom, SendTo Different Sockets
- Boost asio library for networking (http client)
- 具有std::string、cout、of stream和sockets的字符集
- 有谁知道任何尝试在C / C++中使用libevent实现Web Sockets API
- System.Net.Sockets send vs stdcall:send
- C++ 异步套接字(System.Net.Sockets.Socket.BeginAccept)与WinSock2.h
- Winsock -> WinRT Windows.Networking.Sockets -- 映射错误代码
- 错误:调用'QNetworkAccessManager::QNetworkAccessManager(Networking* const)'没有匹配函数
- c++ Sockets不能正常工作
- Windows Sockets send stringstream
- (GET HTTP请求)c++ sockets使用winsock.h
- c++ Threads + Networking,一旦我引入线程,accept就会失败
- Busybox编译失败- networking/nslookup.c错误
- 如何模拟一个客户端服务器应用程序,我写在c++使用windows sockets
- c++ Sockets -客户端给出分段错误(linux)