非阻塞套接字和重叠IO套接字有什么区别? 有点晕了,大家解答下 谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是两个不同的概念,一个从等待“网络事件”的角度,一个是从异步I/O的角度。重叠的 I/OWinsock 1 中创建使用套接字 API,一个重叠的套接字,并使用 Win32 文件 I/O API ReadFile,ReadFileEx、 WriteFile、 WriteFileEx 套接字句柄上执行重叠的 I/O。在 Winsock 2 中,您将创建一个重叠的套接字 WSASocket 使用 WSA_FLAG_OVERLAPPED 标志,或只需使用套接字 API。您可以使用上面的 Win32 文件 I/O api 或 Winsock 2 WSASend、 WSASendTo、 WSARecv 和 WSARecvFrom 启动重叠的 I/O 操作。如果您使用该 SO_RCVBUF 和 SO_SNDBUF 选项设置为零 TCP 堆栈接收和发送缓冲区,您基本上指示 TCP 堆栈直接执行 I/O 使用您的 I/O 调用中提供的缓冲区。因此,除了重叠的套接字 I/O 的非阻止优点,其他优点是更好的性能由于保存缓冲区副本 TCP 堆栈缓冲区和用户缓冲区对每个 I/O 调用之间。但是,您必须确保一旦它的提交的重叠操作和重叠的操作完成之前,您不访问用户缓冲区。阻塞和非阻止模式在创建套接字时默认情况下它是阻塞套接字。在阻止模式套接字 I/O 操作,连接并接受所有阻塞,直到完成该操作相关的操作。从阻塞模式套接字操作模式更改为非阻止模式,您可以使用 WSAAsyncSelect、 WSAEventSelect,或 FIONBIO 命令 ioctlsocket API 调用中。参考,很详细了:http://support.microsoft.com/kb/181611/zh-cn VC6下用Winpcap捕捉网卡数据的问题 为什么无法退出MFC程序,怎么解决 IE背景透明 大家看看我这段代码错在哪里,刚学不太懂!! DWORD变量在没法用CTime等MFC类的情况下如何格式化成相应的时间字符串? 如何VC从服务器上直接下载东西安装? 高分请问使用socket进行网络编程问题 请问如何用vc如何实现不重启就能使被修改的注册表生效 在VS2010下,如何向一个空的project里添加已存在的CPP文件 自定义纸张打印失败,求高手过来看下 一个含有Alpha通道的HBITMAP的绘制问题 CGridCtrl问题
Winsock 1 中创建使用套接字 API,一个重叠的套接字,并使用 Win32 文件 I/O API ReadFile,ReadFileEx、 WriteFile、 WriteFileEx 套接字句柄上执行重叠的 I/O。在 Winsock 2 中,您将创建一个重叠的套接字 WSASocket 使用 WSA_FLAG_OVERLAPPED 标志,或只需使用套接字 API。您可以使用上面的 Win32 文件 I/O api 或 Winsock 2 WSASend、 WSASendTo、 WSARecv 和 WSARecvFrom 启动重叠的 I/O 操作。如果您使用该 SO_RCVBUF 和 SO_SNDBUF 选项设置为零 TCP 堆栈接收和发送缓冲区,您基本上指示 TCP 堆栈直接执行 I/O 使用您的 I/O 调用中提供的缓冲区。因此,除了重叠的套接字 I/O 的非阻止优点,其他优点是更好的性能由于保存缓冲区副本 TCP 堆栈缓冲区和用户缓冲区对每个 I/O 调用之间。但是,您必须确保一旦它的提交的重叠操作和重叠的操作完成之前,您不访问用户缓冲区。阻塞和非阻止模式
在创建套接字时默认情况下它是阻塞套接字。在阻止模式套接字 I/O 操作,连接并接受所有阻塞,直到完成该操作相关的操作。从阻塞模式套接字操作模式更改为非阻止模式,您可以使用 WSAAsyncSelect、 WSAEventSelect,或 FIONBIO 命令 ioctlsocket API 调用中。参考,很详细了:
http://support.microsoft.com/kb/181611/zh-cn