随笔分类 -  WinSocket

摘要:在 Winsock 中,重叠 I/O(Overlapped I/O)模型能达到更佳的系统性能,高于select模型、异步选择和事件选择三种。重叠模型的基本设计原理便是让应用程序使用一个重叠的数据结构(WSAOVERLAPPED),一次投递一个或多个 Winsock I/O 请求。针对这些提交的请求,在它们完成之后,我们的应用程序会收到通知,于是我们就可以对数据进行处理了。 要想在一个套接字上使用重叠 I/O 模型,首先必须使用 WSA_FLAG_OVERLAPPED 这个标志,创建一个套接字。例如:SOCKET s = WSASocket(AF_INET, SOCK_STREAM, 0, .. 阅读全文
posted @ 2012-06-16 21:10 venow 阅读(5241) 评论(0) 推荐(0) 编辑
摘要:事件选择(WSAEventSelect)模型是另一个有用的异步 I/O 模型。和 WSAAsyncSelect 模型类似的是,它也允许应用程序在一个或多个套接字上,接收以事件为基础的网络事件通知,最主要的差别在于网络事件会投递至一个事件对象句柄,而非投递到一个窗口例程。 事件通知模型要求我们的应用程序针对使用的每一个套接字,首先创建一个事件对象。创建方法是调用 WSACreateEvent 函数,它的定义如下: WSAEVENT WSACreateEvent(void); WSACreateEvent 函数的返回值很简单,就是一个创建好的事件对象句柄,接下来必须将其与某个套接字关联在一... 阅读全文
posted @ 2012-06-12 19:59 venow 阅读(7759) 评论(0) 推荐(1) 编辑
摘要:异步选择(WSAAsyncSelect)模型是一个有用的异步 I/O 模型。利用这个模型,应用程序可在一个套接字上,接收以 Windows 消息为基础的网络事件通知。具体的做法是在建好一个套接字后,调用WSAAsyncSelect函数。该模型的核心即是WSAAsyncSelect函数。 WSAAsyncSelect函数定义如下: int WSAAsyncSelect( __in SOCKET s, //指定的是我们感兴趣的那个套接字。 __in HWND hWnd, //指定一个窗口句柄,它对应于网络事件发生之后,想要收到通知消息的那个窗口。 __in... 阅读全文
posted @ 2012-06-10 22:31 venow 阅读(3488) 评论(0) 推荐(0) 编辑
摘要:选择(select)模型是Winsock中最常见的 I/O模型。核心便是利用 select 函数,实现对 I/O的管理!利用 select 函数来判断某Socket上是否有数据可读,或者能否向一个套接字写入数据,防止程序在Socket处于阻塞模式中时,在一次 I/O 调用(如send或recv、accept等)过程中,被迫进入“锁定”状态;同时防止在套接字处于非阻塞模式中时,产生WSAEWOULDBLOCK错误。select 的函数原型如下: int select( __in int nfds, //会被忽略,只是为了保持与Berkeley套接字兼容... 阅读全文
posted @ 2012-06-10 22:31 venow 阅读(1775) 评论(0) 推荐(1) 编辑