IOCP WSASend()
来源:互联网 发布:王坚阿里云纷争马云 编辑:程序博客网 时间:2024/06/06 00:20
WSASend 函数: 在一个已连接的套接口上发送数据
简述
语法
int WSASend(SOCKET s,LPWSABUF lpBuffers,DWORD dwBufferCount,LPDWORD lpNumberOfBytesSent,DWORD dwFlags,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);参数
s: 表示一个已连接套接口的秒数字
lpBuffers: 一个指向WSABUF结构数组的指针。 每个WSABUF结构包含缓冲区的指针和传冲去的大小。
dwBufferCount: lpBuffers数组中WSABUF结构的数目。
lpNumberOfBytesSent: 如果发送操作立即完成,则为一个指向所发送数据字节数的指针。
dwFlags: 标志位
lpOverLapped: 指向WSAOVERLAPPED结构的指针(对于非重叠套接口则忽略)
lpCompletionRoutine: 一个指向发送操作完成后调用的完成例程指针。(对于非重叠套接口则忽略)
返回值
若无错误发生且发送操作立即完成, 则WSASend()函数返回0。 这时,完成例程应该已经被调用,一旦调用线程处于alertable状态时就会调用它。 负责 返回SOCKET_ERROR。 通过WSAGetLastError获得详细的错误代码。 WSA_IO_PENDING这个错误吗表示重叠操作已经提交成功(就是异步IO的意思)。稍后会提示完成。其他的错误代码都代表重叠操作没有正确开始。也不会有完成标志出现
评价
WSASend覆盖标准的send函数,并在下面两个方面有所增强:
1、它可以用于overlapped socket(重叠socket)上以进行重叠发送的擦做(简单地理解为就是异步send也可以了)
2、它可以一次发送多个缓冲区中的数据来进行集中写入。应该相当于unix上的writev,好处看来是避免Nagle算法。
WSASend用于在一个面向连接的socket(第一个参数s)上发出的数据
对于overlapped sockets来说(通过WSASocket函数, 用WSA_FLAG_OVERLAPPED标识创建),发送消息时使用的是重叠IO, 除非lpOverlapped and lpCompletionRoutine都是NULL。 这时这个socket被视为非重叠的socket。 当所有的缓冲区都被发送完了, 将会执行一个动作来表示操作完成, 这个动作可能是调用完成例程或者是引发一个event对象。 如果操作没有立即完成, 最终的完成状态通过完成例程或者WSAGetOverlappedResult得到
对于非重叠的sockets来说, 最后两个参数被忽略, WSASend和send具有相同的语意。 数据从用户缓冲区拷贝到发送缓冲区中应该是指系统的socket对战, 如果socket是非阻塞的又是同时是面向流的,同时发送缓冲区没有足够的大小,WSASend将只发送用户缓冲区中的部分数据。 如果同样缓存大小, 而socket是阻塞的socket, WSASend将阻塞直到用户所有的数据被发送成功。
操作
Overlapped Socket I/O
如果重叠操作立即完成, WSASend返回0 同时设置lpNumberOfBytesSent指向的变量为发送的字节数。 如果重叠操作成功初始化将稍后完成, WSASend返回SOCKET_ERROR同时设置错误吗为WSA_IO_PENDING。 这时 lpNumberOfBytesSent指向的变量不会被更新。 当重叠IO完成以后,发送的数量可以用两种方式取得:如果制定了完成例程,那么通过完成例程cbTransferred参数得到, 也可以调用WSAGetOverlappedResult, 通过lpcbTransfer得到。
- IOCP WSASend()
- IOCP (关于WSASend,WSARecv调用)
- IOCP中多次投递WSASend
- IOCP中多次投递WSASend
- IOCP中多次投递WSASend
- IOCP (关于WSASend,WSARecv调用)
- IOCP九:Client退出后投递WSASend
- WSASend()
- WSASend
- WSASend
- WSASend
- iocp(完成端口)采用WSARecv WSASend处理数据,WSASend群发(广播)消息
- IOCP中在WSASend以及WSARecv的时候出现WSA_IO_PENDING情况的说明
- IOCP中在WSASend以及WSARecv的时候出现WSA_IO_PENDING情况的说明
- 关于IOCP,某些地方就是不让人彻底舒服(WSASend重叠post数据)
- IOCP中在WSASend以及WSARecv的时候出现WSA_IO_PENDING情况的说明
- IOCP中在WSASend以及WSARecv的时候出现WSA_IO_PENDING情况的说明
- IOCP中在WSASend以及WSARecv的时候出现WSA_IO_PENDING情况的说明
- nagios插件之监控文件更新时间
- java集合框架中的数据结构
- adb命令集合
- git客户端命令常用操作
- Quartz2D---苹果官方的⼆维绘图引擎(绘制基本图形)
- IOCP WSASend()
- LeetCode First Missing Positive
- 拓胜培训Java,每天的点点滴滴。
- linux编辑文件后无法保存
- UITableView 的简单介绍
- 决定干点事儿--翻译一下《effective modern c++》
- Cocos2Dx之动作Action-欧阳左至
- Python/C API 实用函数(部分)
- mysql记录操作日志功能