int nRetVal = TransmitFile(pContext->m_Socket,//
(HANDLE)pContext->m_File.m_hFile,//已打开的文件
(DWORD)pContext->m_iMaxFileBytes, /*从文件发送的字节数,取值为零时表示发送整个文件*/
0,//参数指明每个发送操作中所发送的每个数据块的大小,如果将其指定为零,系统就使用默认的发送大小。
&pOverlapBuff->m_ol,
NULL,//包含存储缓冲区,这个存储缓冲区将在文件被传输之前或之后传输。
0);
/*对基于文件的I / O(如WEB服务器)来说,TransmitFile 函数很有用。
另外它的一个有用的特性,是能够指定标志 TF_DISCONNECT 和 TF_REUSE_SOCKET。
如果两个标志都指定,一旦发送操作完成,文件和(或)存储缓冲区都将被传输,套接字也将断开。
同时,传递到API的套接字句柄将被用作AcceptEx中的客户机套接字,或用作AcceptEx中的连接套接字。
因为套接字创建耗费非常之大,所以这一个极其有用。
服务器可以用AcceptEx来处理客户机连接,
然后用 TransmitFile 发送数据(指定上述标志),过后套接字句柄可以在随后对的AcceptEx 调用中使用。*/