CAsyncSocket::Send

virtual int Send( const void* lpBuf, int nBufLen, int nFlags = 0 );

返回值:
调用成功时,返回发送的字节数(可能比nBufLen要小)。否则返回SOCKET_ ERROR,可以调用GetLastError获得特定的错误代码。此成员函数可用的错误代码有:
WSANOTINITIALISED在调用本API函数之前,必须已经成功地执行AfxSocketInit。
WSAENETDOWNWindows Sockets检测到网络系统故障。
WSAEACCES请求的地址是广播地址,但是相应的位没有被设置。
WSAEINPROGRESS正在进行一个成块的Windows Sockets操作。
WSAEFAULT参数lpBuf无效,不是用户地址空间中的有效地址。
WSAENETRESET连接需要重置,因为Windows Sockets的实现删除了连接。
WSAENOBUFSWindows Sockets的实现发现了缓冲的死锁。
WSAENOTCONN套接字没有连接上。
WSAENOTSOCK描述符不是一个套接字。
WSAEOPNOTSUPP设置了MSG_OOB,但套接字不是SOCK_STREAM类型的。
WSAESHUTDOWN套接字已经关闭,调用ShutDown(参数nHow被设为1或2)后,不能在套接字上调用Send。
WSAEWOULDBLOCK套接字被标记为非成块的,但请求发送操作将产生成块。
WSAEMSGSIZE套接字类型为SOCK_DGRAM,数据报大于Windows Sockets实现所支持的最大值。
WSAEINVAL套接字没有用Bind绑定。
WSAECONNABORTED由于超时或其它故障使虚电路异常终止。
WSAECONNRESET远端重置了虚电路。

参数:
lpBuf存放待发送数据的缓冲。
nBufLenlpBuf缓冲中待发送数据的字节数。
nFlags设置函数调用的方式。函数的语义由套接字选项和nFlags共同决定。nFlags由下面的任一个值构成,可用C++的OR操作符组合使用:
MSG_DONTROUTE表明数据不受路由的限制,WindowsSockets提供者(兼容Windows Sockets的软件厂商)可以忽略这个标志。请参阅联机文档“Win32 SDK”的“Windows套接字编程注意事项”中关于SO_DONTROUTE选项的讨论。
MSG_OOB处理带外数据(仅用于SOCK_STREAM类型的套接字)。

说明:
本函数用于在一个连接的套接字上发送数据。它可以在流套接字或数据报套接字上写出数据。对数据报型的套接字,注意不要使数据包超出网络支持的最大IP包的大小。这个值由AfxsocketInit返回的WSADATA结构中的成员iMaxUdpDg给出。如果数据超出这个长度,数据将不会发送,错误代码被设置为WSAEMSGSIZE,可以调用GetLastError得到这个错误代码。
注意,对于数据报套接字,Send的成功结束并不意味着数据一定成功地发送到了目的地。
对于SOCK_STREAM类型的CAsyncSocket对象,写出的字节数可以在1和请求发送的字节数之间,它依赖于本地主机和目的主机的缓冲大小。

请参阅:
CAsyncSocket::Create, CAsyncSocket::Receive, CAsyncSocket::ReceiveFrom, CAsyncSocket::SendTo