WSASocket()的例子

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WSASocket()的例子相关的知识,希望对你有一定的参考价值。

参考技术A

SOCKET s;
// 创建一个将ICMP 作为基层IP协议的原始套接字
s = WSASocket (AF_INET, SOCK_RAW, IPPROTO_ICMP , NULL, 0, WSA_FLAG_OVERLAPPED);
if ( s == INVALID_SOCKET )

//错误处理
//....

WSASocket() 应该与 IOCP 一起使用吗?

【中文标题】WSASocket() 应该与 IOCP 一起使用吗?【英文标题】:Should WSASocket() be used with IOCP? 【发布时间】:2015-03-09 13:25:17 【问题描述】:

我知道在创建 IOCP 应用程序时建议使用WSAAccept() 而不是accept()。但是我不确定WSASocket()是否属于Overlapped I/O函数,还是只是另一个Winsock函数?

【问题讨论】:

【参考方案1】:

我一直认为您可以通过查看 socket()WSASocket() 的 MSDN 文档来回答这个问题,特别是您无法创建可用于重叠 I/O(和 IOCP)的套接字仅将socket() 用作WSASocket() 允许您在创建套接字时指定WSA_FLAG_OVERLAPPED 标志。但这是不正确的,因为socket() 创建的套接字设置了WSA_FLAG_OVERLAPPED

但是,一般来说,Windows 中的 berkeley/POSIX 套接字函数只是为了方便想要使用该 API 进行编程的人。使用它们的理由很少,应该首选原生 Windows API。

【讨论】:

实际上,socket() 的文档说:“创建的套接字默认具有重叠属性”。 做到了。我从来没有注意到这一点。谢谢你告诉我!我调整了答案 所以不存在只属于 Overlapped I/O 的函数,而是有 WSAxxx() 函数可以用于 Overlapped I/O,但也可以用于非重叠 I/O。还有一些不支持重叠 I/O 的 berkeley/POSIX 函数。我的假设正确吗? 需要使用正确的标志设置来创建套接字,以便以导致重叠 I/O 发生的方式与重叠 I/O 功能一起使用。您可以创建一个没有重叠标志的套接字并将其传递给 WSASend() 并将其用于同步、非重叠发送。同样,您可以将重叠标志设置为 WSASend() 的套接字传递,并且还可以请求同步发送而不是重叠发送。你不能做的是传递一个没有设置标志的套接字并请求重叠发送。 POSIX 函数不支持重叠 I/O 和 IOCP,因为它们是仅限 Windows 的概念。

以上是关于WSASocket()的例子的主要内容,如果未能解决你的问题,请参考以下文章

WSASocket()的定义

WSASocket()函数使用解析

WSASocket() 应该与 IOCP 一起使用吗?

在我的代码中出现这个“10038 wsa socket”错误

winSockets编程socket函数

如何将socket设置为非阻塞模式