HPSocket4C.h 82 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556
  1. /*
  2. * Copyright: JessMA Open Source (ldcsaa@gmail.com)
  3. *
  4. * Version : 3.6.1
  5. * Author : Bruce Liang
  6. * Website : http://www.jessma.org
  7. * Project : https://github.com/ldcsaa
  8. * Blog : http://www.cnblogs.com/ldcsaa
  9. * Wiki : http://www.oschina.net/p/hp-socket
  10. * QQ Group : 75375912
  11. *
  12. * Licensed under the Apache License, Version 2.0 (the "License");
  13. * you may not use this file except in compliance with the License.
  14. * You may obtain a copy of the License at
  15. *
  16. * http://www.apache.org/licenses/LICENSE-2.0
  17. *
  18. * Unless required by applicable law or agreed to in writing, software
  19. * distributed under the License is distributed on an "AS IS" BASIS,
  20. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  21. * See the License for the specific language governing permissions and
  22. * limitations under the License.
  23. */
  24. /******************************************************************************
  25. Module: HPSocket for C
  26. Desc: 导出纯 C 函数,让其它语言(如:C / C# / Delphi 等)能方便地使用 HPSocket
  27. Usage:
  28. 方法一:
  29. --------------------------------------------------------------------------------------
  30. 0. (C/C++ 程序)包含 HPTypeDef.h / HPSocket4C.h 头文件
  31. 1. 调用 ::Create_HP_XxxListener() 函数创建监听器对象
  32. 2. 调用 ::Create_HP_Xxx(pListener) 函数创建 HPSocket 对象
  33. 3. 调用 ::HP_Set_FN_Xxx_OnYyy(pListener, ...) 函数设置监听器的回调函数
  34. 4. 调用相关导出函数操作 HPSocket 对象
  35. 5. ...... ......
  36. 6. 调用 ::Destroy_HP_Xxx(pSocket) 函数销毁 HPSocket 对象
  37. 7. 调用 ::Destroy_HP_XxxListener(pListener) 函数销毁监听器对象
  38. 方法二:
  39. --------------------------------------------------------------------------------------
  40. 1. 应用程序把需要用到的导出函数封装到特定语言的包装类中
  41. 2. 通过包装类封装后,以面向对象的方式使用 HPSocket
  42. Release:
  43. <-- 动态链接库 -->
  44. 1. x86/HPSocket4C.dll - (32位/MBCS/Release)
  45. 2. x86/HPSocket4C_D.dll - (32位/MBCS/DeBug)
  46. 3. x86/HPSocket4C_U.dll - (32位/UNICODE/Release)
  47. 4. x86/HPSocket4C_UD.dll - (32位/UNICODE/DeBug)
  48. 5. x64/HPSocket4C.dll - (64位/MBCS/Release)
  49. 6. x64/HPSocket4C_D.dll - (64位/MBCS/DeBug)
  50. 7. x64/HPSocket4C_U.dll - (64位/UNICODE/Release)
  51. 8. x64/HPSocket4C_UD.dll - (64位/UNICODE/DeBug)
  52. <-- 静态链接库 -->
  53. !!注意!!:使用 HPSocket 静态库时,需要在工程属性中定义预处理宏 -> HPSOCKET_STATIC_LIB
  54. 1. x86/static/HPSocket4C.lib - (32位/MBCS/Release)
  55. 2. x86/static/HPSocket4C_D.lib - (32位/MBCS/DeBug)
  56. 3. x86/static/HPSocket4C_U.lib - (32位/UNICODE/Release)
  57. 4. x86/static/HPSocket4C_UD.lib - (32位/UNICODE/DeBug)
  58. 5. x64/static/HPSocket4C.lib - (64位/MBCS/Release)
  59. 6. x64/static/HPSocket4C_D.lib - (64位/MBCS/DeBug)
  60. 7. x64/static/HPSocket4C_U.lib - (64位/UNICODE/Release)
  61. 8. x64/static/HPSocket4C_UD.lib - (64位/UNICODE/DeBug)
  62. ******************************************************************************/
  63. #pragma once
  64. #include <winsock2.h>
  65. #include "HPTypeDef.h"
  66. /**************************************************/
  67. /********** imports / exports HPSocket4C **********/
  68. #ifdef HPSOCKET_STATIC_LIB
  69. #define HPSOCKET_API EXTERN_C
  70. #else
  71. #ifdef HPSOCKET_EXPORTS
  72. #define HPSOCKET_API EXTERN_C __declspec(dllexport)
  73. #else
  74. #define HPSOCKET_API EXTERN_C __declspec(dllimport)
  75. #endif
  76. #endif
  77. /************************************************************************
  78. 名称:定义 Socket 对象指针类型别名
  79. 描述:把 Socket 对象指针定义为更直观的别名
  80. ************************************************************************/
  81. typedef PVOID HP_Object;
  82. typedef HP_Object HP_Server;
  83. typedef HP_Object HP_Agent;
  84. typedef HP_Object HP_Client;
  85. typedef HP_Object HP_TcpServer;
  86. typedef HP_Object HP_TcpAgent;
  87. typedef HP_Object HP_TcpClient;
  88. typedef HP_Object HP_PullSocket;
  89. typedef HP_Object HP_PullClient;
  90. typedef HP_Object HP_TcpPullServer;
  91. typedef HP_Object HP_TcpPullAgent;
  92. typedef HP_Object HP_TcpPullClient;
  93. typedef HP_Object HP_PackSocket;
  94. typedef HP_Object HP_PackClient;
  95. typedef HP_Object HP_TcpPackServer;
  96. typedef HP_Object HP_TcpPackAgent;
  97. typedef HP_Object HP_TcpPackClient;
  98. typedef HP_Object HP_UdpServer;
  99. typedef HP_Object HP_UdpClient;
  100. typedef HP_Object HP_UdpCast;
  101. typedef HP_Object HP_Listener;
  102. typedef HP_Object HP_ServerListener;
  103. typedef HP_Object HP_AgentListener;
  104. typedef HP_Object HP_ClientListener;
  105. typedef HP_Object HP_TcpServerListener;
  106. typedef HP_Object HP_TcpAgentListener;
  107. typedef HP_Object HP_TcpClientListener;
  108. typedef HP_Object HP_PullSocketListener;
  109. typedef HP_Object HP_PullClientListener;
  110. typedef HP_Object HP_TcpPullServerListener;
  111. typedef HP_Object HP_TcpPullAgentListener;
  112. typedef HP_Object HP_TcpPullClientListener;
  113. typedef HP_Object HP_UdpServerListener;
  114. typedef HP_Object HP_UdpClientListener;
  115. typedef HP_Object HP_UdpCastListener;
  116. typedef HP_Object HP_HttpServer;
  117. typedef HP_Object HP_HttpAgent;
  118. typedef HP_Object HP_HttpClient;
  119. typedef HP_Object HP_HttpServerListener;
  120. typedef HP_Object HP_HttpAgentListener;
  121. typedef HP_Object HP_HttpClientListener;
  122. /*****************************************************************************************************************************************************/
  123. /****************************************************************** TCP/UDP Exports ******************************************************************/
  124. /*****************************************************************************************************************************************************/
  125. /****************************************************/
  126. /***************** TCP/UDP 回调函数 ******************/
  127. /* Server 回调函数 */
  128. typedef En_HP_HandleResult (__stdcall *HP_FN_Server_OnPrepareListen) (UINT_PTR soListen);
  129. // 如果为 TCP 连接,pClient为 SOCKET 句柄;如果为 UDP 连接,pClient为 SOCKADDR_IN 指针;
  130. typedef En_HP_HandleResult (__stdcall *HP_FN_Server_OnAccept) (HP_CONNID dwConnID, UINT_PTR pClient);
  131. typedef En_HP_HandleResult (__stdcall *HP_FN_Server_OnHandShake) (HP_CONNID dwConnID);
  132. typedef En_HP_HandleResult (__stdcall *HP_FN_Server_OnSend) (HP_CONNID dwConnID, const BYTE* pData, int iLength);
  133. typedef En_HP_HandleResult (__stdcall *HP_FN_Server_OnReceive) (HP_CONNID dwConnID, const BYTE* pData, int iLength);
  134. typedef En_HP_HandleResult (__stdcall *HP_FN_Server_OnPullReceive) (HP_CONNID dwConnID, int iLength);
  135. typedef En_HP_HandleResult (__stdcall *HP_FN_Server_OnClose) (HP_CONNID dwConnID, En_HP_SocketOperation enOperation, int iErrorCode);
  136. typedef En_HP_HandleResult (__stdcall *HP_FN_Server_OnShutdown) ();
  137. /* Agent 回调函数 */
  138. typedef En_HP_HandleResult (__stdcall *HP_FN_Agent_OnPrepareConnect) (HP_CONNID dwConnID, UINT_PTR socket);
  139. typedef En_HP_HandleResult (__stdcall *HP_FN_Agent_OnConnect) (HP_CONNID dwConnID);
  140. typedef En_HP_HandleResult (__stdcall *HP_FN_Agent_OnHandShake) (HP_CONNID dwConnID);
  141. typedef En_HP_HandleResult (__stdcall *HP_FN_Agent_OnSend) (HP_CONNID dwConnID, const BYTE* pData, int iLength);
  142. typedef En_HP_HandleResult (__stdcall *HP_FN_Agent_OnReceive) (HP_CONNID dwConnID, const BYTE* pData, int iLength);
  143. typedef En_HP_HandleResult (__stdcall *HP_FN_Agent_OnPullReceive) (HP_CONNID dwConnID, int iLength);
  144. typedef En_HP_HandleResult (__stdcall *HP_FN_Agent_OnClose) (HP_CONNID dwConnID, En_HP_SocketOperation enOperation, int iErrorCode);
  145. typedef En_HP_HandleResult (__stdcall *HP_FN_Agent_OnShutdown) ();
  146. /* Client 回调函数 */
  147. typedef En_HP_HandleResult (__stdcall *HP_FN_Client_OnPrepareConnect) (HP_Client pClient, UINT_PTR socket);
  148. typedef En_HP_HandleResult (__stdcall *HP_FN_Client_OnConnect) (HP_Client pClient);
  149. typedef En_HP_HandleResult (__stdcall *HP_FN_Client_OnHandShake) (HP_Client pClient);
  150. typedef En_HP_HandleResult (__stdcall *HP_FN_Client_OnSend) (HP_Client pClient, const BYTE* pData, int iLength);
  151. typedef En_HP_HandleResult (__stdcall *HP_FN_Client_OnReceive) (HP_Client pClient, const BYTE* pData, int iLength);
  152. typedef En_HP_HandleResult (__stdcall *HP_FN_Client_OnPullReceive) (HP_Client pClient, int iLength);
  153. typedef En_HP_HandleResult (__stdcall *HP_FN_Client_OnClose) (HP_Client pClient, En_HP_SocketOperation enOperation, int iErrorCode);
  154. /****************************************************/
  155. /*************** TCP/UDP 对象创建函数 ****************/
  156. // 创建 HP_TcpServer 对象
  157. HPSOCKET_API HP_TcpServer __stdcall Create_HP_TcpServer(HP_TcpServerListener pListener);
  158. // 创建 HP_TcpAgent 对象
  159. HPSOCKET_API HP_TcpAgent __stdcall Create_HP_TcpAgent(HP_TcpAgentListener pListener);
  160. // 创建 HP_TcpClient 对象
  161. HPSOCKET_API HP_TcpClient __stdcall Create_HP_TcpClient(HP_TcpClientListener pListener);
  162. // 创建 HP_TcpPullServer 对象
  163. HPSOCKET_API HP_TcpPullServer __stdcall Create_HP_TcpPullServer(HP_TcpPullServerListener pListener);
  164. // 创建 HP_TcpPullAgent 对象
  165. HPSOCKET_API HP_TcpPullAgent __stdcall Create_HP_TcpPullAgent(HP_TcpPullAgentListener pListener);
  166. // 创建 HP_TcpPullClient 对象
  167. HPSOCKET_API HP_TcpPullClient __stdcall Create_HP_TcpPullClient(HP_TcpPullClientListener pListener);
  168. // 创建 HP_TcpPackServer 对象
  169. HPSOCKET_API HP_TcpPackServer __stdcall Create_HP_TcpPackServer(HP_TcpServerListener pListener);
  170. // 创建 HP_TcpPackAgent 对象
  171. HPSOCKET_API HP_TcpPackAgent __stdcall Create_HP_TcpPackAgent(HP_TcpAgentListener pListener);
  172. // 创建 HP_TcpPackClient 对象
  173. HPSOCKET_API HP_TcpPackClient __stdcall Create_HP_TcpPackClient(HP_TcpClientListener pListener);
  174. // 创建 HP_UdpServer 对象
  175. HPSOCKET_API HP_UdpServer __stdcall Create_HP_UdpServer(HP_UdpServerListener pListener);
  176. // 创建 HP_UdpClient 对象
  177. HPSOCKET_API HP_UdpClient __stdcall Create_HP_UdpClient(HP_UdpClientListener pListener);
  178. // 创建 HP_UdpCast 对象
  179. HPSOCKET_API HP_UdpCast __stdcall Create_HP_UdpCast(HP_UdpCastListener pListener);
  180. // 销毁 HP_TcpServer 对象
  181. HPSOCKET_API void __stdcall Destroy_HP_TcpServer(HP_TcpServer pServer);
  182. // 销毁 HP_TcpAgent 对象
  183. HPSOCKET_API void __stdcall Destroy_HP_TcpAgent(HP_TcpAgent pAgent);
  184. // 销毁 HP_TcpClient 对象
  185. HPSOCKET_API void __stdcall Destroy_HP_TcpClient(HP_TcpClient pClient);
  186. // 销毁 HP_TcpPullServer 对象
  187. HPSOCKET_API void __stdcall Destroy_HP_TcpPullServer(HP_TcpPullServer pServer);
  188. // 销毁 HP_TcpPullAgent 对象
  189. HPSOCKET_API void __stdcall Destroy_HP_TcpPullAgent(HP_TcpPullAgent pAgent);
  190. // 销毁 HP_TcpPullClient 对象
  191. HPSOCKET_API void __stdcall Destroy_HP_TcpPullClient(HP_TcpPullClient pClient);
  192. // 销毁 HP_TcpPackServer 对象
  193. HPSOCKET_API void __stdcall Destroy_HP_TcpPackServer(HP_TcpPackServer pServer);
  194. // 销毁 HP_TcpPackAgent 对象
  195. HPSOCKET_API void __stdcall Destroy_HP_TcpPackAgent(HP_TcpPackAgent pAgent);
  196. // 销毁 HP_TcpPackClient 对象
  197. HPSOCKET_API void __stdcall Destroy_HP_TcpPackClient(HP_TcpPackClient pClient);
  198. // 销毁 HP_UdpServer 对象
  199. HPSOCKET_API void __stdcall Destroy_HP_UdpServer(HP_UdpServer pServer);
  200. // 销毁 HP_UdpClient 对象
  201. HPSOCKET_API void __stdcall Destroy_HP_UdpClient(HP_UdpClient pClient);
  202. // 销毁 HP_UdpCast 对象
  203. HPSOCKET_API void __stdcall Destroy_HP_UdpCast(HP_UdpCast pCast);
  204. // 创建 HP_TcpServerListener 对象
  205. HPSOCKET_API HP_TcpServerListener __stdcall Create_HP_TcpServerListener();
  206. // 创建 HP_TcpAgentListener 对象
  207. HPSOCKET_API HP_TcpAgentListener __stdcall Create_HP_TcpAgentListener();
  208. // 创建 HP_TcpClientListener 对象
  209. HPSOCKET_API HP_TcpClientListener __stdcall Create_HP_TcpClientListener();
  210. // 创建 HP_TcpPullServerListener 对象
  211. HPSOCKET_API HP_TcpPullServerListener __stdcall Create_HP_TcpPullServerListener();
  212. // 创建 HP_TcpPullAgentListener 对象
  213. HPSOCKET_API HP_TcpPullAgentListener __stdcall Create_HP_TcpPullAgentListener();
  214. // 创建 HP_TcpPullClientListener 对象
  215. HPSOCKET_API HP_TcpPullClientListener __stdcall Create_HP_TcpPullClientListener();
  216. // 创建 HP_UdpServerListener 对象
  217. HPSOCKET_API HP_UdpServerListener __stdcall Create_HP_UdpServerListener();
  218. // 创建 HP_UdpClientListener 对象
  219. HPSOCKET_API HP_UdpClientListener __stdcall Create_HP_UdpClientListener();
  220. // 创建 HP_UdpCastListener 对象
  221. HPSOCKET_API HP_UdpCastListener __stdcall Create_HP_UdpCastListener();
  222. // 销毁 HP_TcpServerListener 对象
  223. HPSOCKET_API void __stdcall Destroy_HP_TcpServerListener(HP_TcpServerListener pListener);
  224. // 销毁 HP_TcpAgentListener 对象
  225. HPSOCKET_API void __stdcall Destroy_HP_TcpAgentListener(HP_TcpAgentListener pListener);
  226. // 销毁 HP_TcpClientListener 对象
  227. HPSOCKET_API void __stdcall Destroy_HP_TcpClientListener(HP_TcpClientListener pListener);
  228. // 销毁 HP_TcpPullServerListener 对象
  229. HPSOCKET_API void __stdcall Destroy_HP_TcpPullServerListener(HP_TcpPullServerListener pListener);
  230. // 销毁 HP_TcpPullAgentListener 对象
  231. HPSOCKET_API void __stdcall Destroy_HP_TcpPullAgentListener(HP_TcpPullAgentListener pListener);
  232. // 销毁 HP_TcpPullClientListener 对象
  233. HPSOCKET_API void __stdcall Destroy_HP_TcpPullClientListener(HP_TcpPullClientListener pListener);
  234. // 销毁 HP_UdpServerListener 对象
  235. HPSOCKET_API void __stdcall Destroy_HP_UdpServerListener(HP_UdpServerListener pListener);
  236. // 销毁 HP_UdpClientListener 对象
  237. HPSOCKET_API void __stdcall Destroy_HP_UdpClientListener(HP_UdpClientListener pListener);
  238. // 销毁 HP_UdpCastListener 对象
  239. HPSOCKET_API void __stdcall Destroy_HP_UdpCastListener(HP_UdpCastListener pListener);
  240. /**********************************************************************************/
  241. /***************************** Server 回调函数设置方法 *****************************/
  242. HPSOCKET_API void __stdcall HP_Set_FN_Server_OnPrepareListen(HP_ServerListener pListener , HP_FN_Server_OnPrepareListen fn);
  243. HPSOCKET_API void __stdcall HP_Set_FN_Server_OnAccept(HP_ServerListener pListener , HP_FN_Server_OnAccept fn);
  244. HPSOCKET_API void __stdcall HP_Set_FN_Server_OnHandShake(HP_ServerListener pListener , HP_FN_Server_OnHandShake fn);
  245. HPSOCKET_API void __stdcall HP_Set_FN_Server_OnSend(HP_ServerListener pListener , HP_FN_Server_OnSend fn);
  246. HPSOCKET_API void __stdcall HP_Set_FN_Server_OnReceive(HP_ServerListener pListener , HP_FN_Server_OnReceive fn);
  247. HPSOCKET_API void __stdcall HP_Set_FN_Server_OnPullReceive(HP_ServerListener pListener , HP_FN_Server_OnPullReceive fn);
  248. HPSOCKET_API void __stdcall HP_Set_FN_Server_OnClose(HP_ServerListener pListener , HP_FN_Server_OnClose fn);
  249. HPSOCKET_API void __stdcall HP_Set_FN_Server_OnShutdown(HP_ServerListener pListener , HP_FN_Server_OnShutdown fn);
  250. /**********************************************************************************/
  251. /****************************** Agent 回调函数设置方法 *****************************/
  252. HPSOCKET_API void __stdcall HP_Set_FN_Agent_OnPrepareConnect(HP_AgentListener pListener , HP_FN_Agent_OnPrepareConnect fn);
  253. HPSOCKET_API void __stdcall HP_Set_FN_Agent_OnConnect(HP_AgentListener pListener , HP_FN_Agent_OnConnect fn);
  254. HPSOCKET_API void __stdcall HP_Set_FN_Agent_OnHandShake(HP_AgentListener pListener , HP_FN_Agent_OnHandShake fn);
  255. HPSOCKET_API void __stdcall HP_Set_FN_Agent_OnSend(HP_AgentListener pListener , HP_FN_Agent_OnSend fn);
  256. HPSOCKET_API void __stdcall HP_Set_FN_Agent_OnReceive(HP_AgentListener pListener , HP_FN_Agent_OnReceive fn);
  257. HPSOCKET_API void __stdcall HP_Set_FN_Agent_OnPullReceive(HP_AgentListener pListener , HP_FN_Agent_OnPullReceive fn);
  258. HPSOCKET_API void __stdcall HP_Set_FN_Agent_OnClose(HP_AgentListener pListener , HP_FN_Agent_OnClose fn);
  259. HPSOCKET_API void __stdcall HP_Set_FN_Agent_OnShutdown(HP_AgentListener pListener , HP_FN_Agent_OnShutdown fn);
  260. /**********************************************************************************/
  261. /***************************** Client 回调函数设置方法 *****************************/
  262. HPSOCKET_API void __stdcall HP_Set_FN_Client_OnPrepareConnect(HP_ClientListener pListener , HP_FN_Client_OnPrepareConnect fn);
  263. HPSOCKET_API void __stdcall HP_Set_FN_Client_OnConnect(HP_ClientListener pListener , HP_FN_Client_OnConnect fn);
  264. HPSOCKET_API void __stdcall HP_Set_FN_Client_OnHandShake(HP_ClientListener pListener , HP_FN_Client_OnHandShake fn);
  265. HPSOCKET_API void __stdcall HP_Set_FN_Client_OnSend(HP_ClientListener pListener , HP_FN_Client_OnSend fn);
  266. HPSOCKET_API void __stdcall HP_Set_FN_Client_OnReceive(HP_ClientListener pListener , HP_FN_Client_OnReceive fn);
  267. HPSOCKET_API void __stdcall HP_Set_FN_Client_OnPullReceive(HP_ClientListener pListener , HP_FN_Client_OnPullReceive fn);
  268. HPSOCKET_API void __stdcall HP_Set_FN_Client_OnClose(HP_ClientListener pListener , HP_FN_Client_OnClose fn);
  269. /**************************************************************************/
  270. /***************************** Server 操作方法 *****************************/
  271. /*
  272. * 名称:启动通信组件
  273. * 描述:启动服务端通信组件,启动完成后可开始接收客户端连接并收发数据
  274. *
  275. * 参数: lpszBindAddress -- 监听地址
  276. * usPort -- 监听端口
  277. * 返回值: TRUE -- 成功
  278. * FALSE -- 失败,可通过 HP_Server_GetLastError() 获取错误代码
  279. */
  280. HPSOCKET_API BOOL __stdcall HP_Server_Start(HP_Server pServer, LPCTSTR lpszBindAddress, USHORT usPort);
  281. /*
  282. * 名称:关闭通信组件
  283. * 描述:关闭服务端通信组件,关闭完成后断开所有客户端连接并释放所有资源
  284. *
  285. * 参数:
  286. * 返回值: TRUE -- 成功
  287. * FALSE -- 失败,可通过 HP_Server_GetLastError() 获取错误代码
  288. */
  289. HPSOCKET_API BOOL __stdcall HP_Server_Stop(HP_Server pServer);
  290. /*
  291. * 名称:发送数据
  292. * 描述:向指定连接发送数据
  293. *
  294. * 参数: dwConnID -- 连接 ID
  295. * pBuffer -- 发送缓冲区
  296. * iLength -- 发送缓冲区长度
  297. * 返回值: TRUE -- 成功
  298. * FALSE -- 失败,可通过 SYS_GetLastError() 获取 Windows 错误代码
  299. */
  300. HPSOCKET_API BOOL __stdcall HP_Server_Send(HP_Server pServer, HP_CONNID dwConnID, const BYTE* pBuffer, int iLength);
  301. /*
  302. * 名称:发送数据
  303. * 描述:向指定连接发送数据
  304. *
  305. * 参数: dwConnID -- 连接 ID
  306. * pBuffer -- 发送缓冲区
  307. * iLength -- 发送缓冲区长度
  308. * iOffset -- 发送缓冲区指针偏移量
  309. * 返回值: TRUE -- 成功
  310. * FALSE -- 失败,可通过 SYS_GetLastError() 获取 Windows 错误代码
  311. */
  312. HPSOCKET_API BOOL __stdcall HP_Server_SendPart(HP_Server pServer, HP_CONNID dwConnID, const BYTE* pBuffer, int iLength, int iOffset);
  313. /*
  314. * 名称:发送多组数据
  315. * 描述:向指定连接发送多组数据
  316. * TCP - 顺序发送所有数据包
  317. * UDP - 把所有数据包组合成一个数据包发送(数据包的总长度不能大于设置的 UDP 包最大长度)
  318. *
  319. * 参数: dwConnID -- 连接 ID
  320. * pBuffers -- 发送缓冲区数组
  321. * iCount -- 发送缓冲区数目
  322. * 返回值: TRUE -- 成功
  323. * FALSE -- 失败,可通过 SYS_GetLastError() 获取 Windows 错误代码
  324. */
  325. HPSOCKET_API BOOL __stdcall HP_Server_SendPackets(HP_Server pServer, HP_CONNID dwConnID, const WSABUF pBuffers[], int iCount);
  326. /*
  327. * 名称:断开连接
  328. * 描述:断开与某个客户端的连接
  329. *
  330. * 参数: dwConnID -- 连接 ID
  331. * bForce -- 是否强制断开连接
  332. * 返回值: TRUE -- 成功
  333. * FALSE -- 失败
  334. */
  335. HPSOCKET_API BOOL __stdcall HP_Server_Disconnect(HP_Server pServer, HP_CONNID dwConnID, BOOL bForce);
  336. /*
  337. * 名称:断开超时连接
  338. * 描述:断开超过指定时长的连接
  339. *
  340. * 参数: dwPeriod -- 时长(毫秒)
  341. * bForce -- 是否强制断开连接
  342. * 返回值: TRUE -- 成功
  343. * FALSE -- 失败
  344. */
  345. HPSOCKET_API BOOL __stdcall HP_Server_DisconnectLongConnections(HP_Server pServer, DWORD dwPeriod, BOOL bForce);
  346. /*
  347. * 名称:断开静默连接
  348. * 描述:断开超过指定时长的静默连接
  349. *
  350. * 参数: dwPeriod -- 时长(毫秒)
  351. * bForce -- 是否强制断开连接
  352. * 返回值: TRUE -- 成功
  353. * FALSE -- 失败
  354. */
  355. HPSOCKET_API BOOL __stdcall HP_Server_DisconnectSilenceConnections(HP_Server pServer, DWORD dwPeriod, BOOL bForce);
  356. /******************************************************************************/
  357. /***************************** Server 属性访问方法 *****************************/
  358. /*
  359. * 名称:设置连接的附加数据
  360. * 描述:是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
  361. *
  362. * 参数: dwConnID -- 连接 ID
  363. * pv -- 数据
  364. * 返回值: TRUE -- 成功
  365. * FALSE -- 失败(无效的连接 ID)
  366. */
  367. HPSOCKET_API BOOL __stdcall HP_Server_SetConnectionExtra(HP_Server pServer, HP_CONNID dwConnID, PVOID pExtra);
  368. /*
  369. * 名称:获取连接的附加数据
  370. * 描述:是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
  371. *
  372. * 参数: dwConnID -- 连接 ID
  373. * ppv -- 数据指针
  374. * 返回值: TRUE -- 成功
  375. * FALSE -- 失败(无效的连接 ID)
  376. */
  377. HPSOCKET_API BOOL __stdcall HP_Server_GetConnectionExtra(HP_Server pServer, HP_CONNID dwConnID, PVOID* ppExtra);
  378. /* 检查通信组件是否已启动 */
  379. HPSOCKET_API BOOL __stdcall HP_Server_HasStarted(HP_Server pServer);
  380. /* 查看通信组件当前状态 */
  381. HPSOCKET_API En_HP_ServiceState __stdcall HP_Server_GetState(HP_Server pServer);
  382. /* 获取最近一次失败操作的错误代码 */
  383. HPSOCKET_API En_HP_SocketError __stdcall HP_Server_GetLastError(HP_Server pServer);
  384. /* 获取最近一次失败操作的错误描述 */
  385. HPSOCKET_API LPCTSTR __stdcall HP_Server_GetLastErrorDesc(HP_Server pServer);
  386. /* 获取连接中未发出数据的长度 */
  387. HPSOCKET_API BOOL __stdcall HP_Server_GetPendingDataLength(HP_Server pServer, HP_CONNID dwConnID, int* piPending);
  388. /* 获取客户端连接数 */
  389. HPSOCKET_API DWORD __stdcall HP_Server_GetConnectionCount(HP_Server pServer);
  390. /* 获取所有连接的 HP_CONNID */
  391. HPSOCKET_API BOOL __stdcall HP_Server_GetAllConnectionIDs(HP_Server pServer, HP_CONNID pIDs[], DWORD* pdwCount);
  392. /* 获取某个客户端连接时长(毫秒) */
  393. HPSOCKET_API BOOL __stdcall HP_Server_GetConnectPeriod(HP_Server pServer, HP_CONNID dwConnID, DWORD* pdwPeriod);
  394. /* 获取某个连接静默时间(毫秒) */
  395. HPSOCKET_API BOOL __stdcall HP_Server_GetSilencePeriod(HP_Server pServer, HP_CONNID dwConnID, DWORD* pdwPeriod);
  396. /* 获取监听 Socket 的地址信息 */
  397. HPSOCKET_API BOOL __stdcall HP_Server_GetListenAddress(HP_Server pServer, TCHAR lpszAddress[], int* piAddressLen, USHORT* pusPort);
  398. /* 获取某个连接的本地地址信息 */
  399. HPSOCKET_API BOOL __stdcall HP_Server_GetLocalAddress(HP_Server pServer, HP_CONNID dwConnID, TCHAR lpszAddress[], int* piAddressLen, USHORT* pusPort);
  400. /* 获取某个连接的远程地址信息 */
  401. HPSOCKET_API BOOL __stdcall HP_Server_GetRemoteAddress(HP_Server pServer, HP_CONNID dwConnID, TCHAR lpszAddress[], int* piAddressLen, USHORT* pusPort);
  402. /* 设置数据发送策略 */
  403. HPSOCKET_API void __stdcall HP_Server_SetSendPolicy(HP_Server pServer, En_HP_SendPolicy enSendPolicy);
  404. /* 设置 Socket 缓存对象锁定时间(毫秒,在锁定期间该 Socket 缓存对象不能被获取使用) */
  405. HPSOCKET_API void __stdcall HP_Server_SetFreeSocketObjLockTime(HP_Server pServer, DWORD dwFreeSocketObjLockTime);
  406. /* 设置 Socket 缓存池大小(通常设置为平均并发连接数量的 1/3 - 1/2) */
  407. HPSOCKET_API void __stdcall HP_Server_SetFreeSocketObjPool(HP_Server pServer, DWORD dwFreeSocketObjPool);
  408. /* 设置内存块缓存池大小(通常设置为 Socket 缓存池大小的 2 - 3 倍) */
  409. HPSOCKET_API void __stdcall HP_Server_SetFreeBufferObjPool(HP_Server pServer, DWORD dwFreeBufferObjPool);
  410. /* 设置 Socket 缓存池回收阀值(通常设置为 Socket 缓存池大小的 3 倍) */
  411. HPSOCKET_API void __stdcall HP_Server_SetFreeSocketObjHold(HP_Server pServer, DWORD dwFreeSocketObjHold);
  412. /* 设置内存块缓存池回收阀值(通常设置为内存块缓存池大小的 3 倍) */
  413. HPSOCKET_API void __stdcall HP_Server_SetFreeBufferObjHold(HP_Server pServer, DWORD dwFreeBufferObjHold);
  414. /* 设置最大连接数(组件会根据设置值预分配内存,因此需要根据实际情况设置,不宜过大)*/
  415. HPSOCKET_API void __stdcall HP_Server_SetMaxConnectionCount(HP_Server pServer, DWORD dwMaxConnectionCount);
  416. /* 设置工作线程数量(通常设置为 2 * CPU + 2) */
  417. HPSOCKET_API void __stdcall HP_Server_SetWorkerThreadCount(HP_Server pServer, DWORD dwWorkerThreadCount);
  418. /* 设置是否标记静默时间(设置为 TRUE 时 DisconnectSilenceConnections() 和 GetSilencePeriod() 才有效,默认:TRUE) */
  419. HPSOCKET_API void __stdcall HP_Server_SetMarkSilence(HP_Server pServer, BOOL bMarkSilence);
  420. /* 获取数据发送策略 */
  421. HPSOCKET_API En_HP_SendPolicy __stdcall HP_Server_GetSendPolicy(HP_Server pServer);
  422. /* 获取 Socket 缓存对象锁定时间 */
  423. HPSOCKET_API DWORD __stdcall HP_Server_GetFreeSocketObjLockTime(HP_Server pServer);
  424. /* 获取 Socket 缓存池大小 */
  425. HPSOCKET_API DWORD __stdcall HP_Server_GetFreeSocketObjPool(HP_Server pServer);
  426. /* 获取内存块缓存池大小 */
  427. HPSOCKET_API DWORD __stdcall HP_Server_GetFreeBufferObjPool(HP_Server pServer);
  428. /* 获取 Socket 缓存池回收阀值 */
  429. HPSOCKET_API DWORD __stdcall HP_Server_GetFreeSocketObjHold(HP_Server pServer);
  430. /* 获取内存块缓存池回收阀值 */
  431. HPSOCKET_API DWORD __stdcall HP_Server_GetFreeBufferObjHold(HP_Server pServer);
  432. /* 获取最大连接数 */
  433. HPSOCKET_API DWORD __stdcall HP_Server_GetMaxConnectionCount(HP_Server pServer);
  434. /* 获取工作线程数量 */
  435. HPSOCKET_API DWORD __stdcall HP_Server_GetWorkerThreadCount(HP_Server pServer);
  436. /* 检测是否标记静默时间 */
  437. HPSOCKET_API BOOL __stdcall HP_Server_IsMarkSilence(HP_Server pServer);
  438. /**********************************************************************************/
  439. /******************************* TCP Server 操作方法 *******************************/
  440. /*
  441. * 名称:发送小文件
  442. * 描述:向指定连接发送 4096 KB 以下的小文件
  443. *
  444. * 参数: dwConnID -- 连接 ID
  445. * lpszFileName -- 文件路径
  446. * pHead -- 头部附加数据
  447. * pTail -- 尾部附加数据
  448. * 返回值: TRUE -- 成功
  449. * FALSE -- 失败,可通过 SYS_GetLastError() 获取 Windows 错误代码
  450. */
  451. HPSOCKET_API BOOL __stdcall HP_TcpServer_SendSmallFile(HP_Server pServer, HP_CONNID dwConnID, LPCTSTR lpszFileName, const LPWSABUF pHead, const LPWSABUF pTail);
  452. /**********************************************************************************/
  453. /***************************** TCP Server 属性访问方法 *****************************/
  454. /* 设置监听 Socket 的等候队列大小(根据并发连接数量调整设置) */
  455. HPSOCKET_API void __stdcall HP_TcpServer_SetSocketListenQueue(HP_TcpServer pServer, DWORD dwSocketListenQueue);
  456. /* 设置 Accept 预投递数量(根据负载调整设置,Accept 预投递数量越大则支持的并发连接请求越多) */
  457. HPSOCKET_API void __stdcall HP_TcpServer_SetAcceptSocketCount(HP_TcpServer pServer, DWORD dwAcceptSocketCount);
  458. /* 设置通信数据缓冲区大小(根据平均通信数据包大小调整设置,通常设置为 1024 的倍数) */
  459. HPSOCKET_API void __stdcall HP_TcpServer_SetSocketBufferSize(HP_TcpServer pServer, DWORD dwSocketBufferSize);
  460. /* 设置正常心跳包间隔(毫秒,0 则不发送心跳包,默认:30 * 1000) */
  461. HPSOCKET_API void __stdcall HP_TcpServer_SetKeepAliveTime(HP_TcpServer pServer, DWORD dwKeepAliveTime);
  462. /* 设置异常心跳包间隔(毫秒,0 不发送心跳包,,默认:10 * 1000,如果超过若干次 [默认:WinXP 5 次, Win7 10 次] 检测不到心跳确认包则认为已断线) */
  463. HPSOCKET_API void __stdcall HP_TcpServer_SetKeepAliveInterval(HP_TcpServer pServer, DWORD dwKeepAliveInterval);
  464. /* 获取 Accept 预投递数量 */
  465. HPSOCKET_API DWORD __stdcall HP_TcpServer_GetAcceptSocketCount(HP_TcpServer pServer);
  466. /* 获取通信数据缓冲区大小 */
  467. HPSOCKET_API DWORD __stdcall HP_TcpServer_GetSocketBufferSize(HP_TcpServer pServer);
  468. /* 获取监听 Socket 的等候队列大小 */
  469. HPSOCKET_API DWORD __stdcall HP_TcpServer_GetSocketListenQueue(HP_TcpServer pServer);
  470. /* 获取正常心跳包间隔 */
  471. HPSOCKET_API DWORD __stdcall HP_TcpServer_GetKeepAliveTime(HP_TcpServer pServer);
  472. /* 获取异常心跳包间隔 */
  473. HPSOCKET_API DWORD __stdcall HP_TcpServer_GetKeepAliveInterval(HP_TcpServer pServer);
  474. /**********************************************************************************/
  475. /***************************** UDP Server 属性访问方法 *****************************/
  476. /* 设置数据报文最大长度(建议在局域网环境下不超过 1472 字节,在广域网环境下不超过 548 字节) */
  477. HPSOCKET_API void __stdcall HP_UdpServer_SetMaxDatagramSize(HP_UdpServer pServer, DWORD dwMaxDatagramSize);
  478. /* 获取数据报文最大长度 */
  479. HPSOCKET_API DWORD __stdcall HP_UdpServer_GetMaxDatagramSize(HP_UdpServer pServer);
  480. /* 设置 Receive 预投递数量(根据负载调整设置,Receive 预投递数量越大则丢包概率越小) */
  481. HPSOCKET_API void __stdcall HP_UdpServer_SetPostReceiveCount(HP_UdpServer pServer, DWORD dwPostReceiveCount);
  482. /* 获取 Receive 预投递数量 */
  483. HPSOCKET_API DWORD __stdcall HP_UdpServer_GetPostReceiveCount(HP_UdpServer pServer);
  484. /* 设置监测包尝试次数(0 则不发送监测跳包,如果超过最大尝试次数则认为已断线) */
  485. HPSOCKET_API void __stdcall HP_UdpServer_SetDetectAttempts(HP_UdpServer pServer, DWORD dwDetectAttempts);
  486. /* 设置监测包发送间隔(秒,0 不发送监测包) */
  487. HPSOCKET_API void __stdcall HP_UdpServer_SetDetectInterval(HP_UdpServer pServer, DWORD dwDetectInterval);
  488. /* 获取心跳检查次数 */
  489. HPSOCKET_API DWORD __stdcall HP_UdpServer_GetDetectAttempts(HP_UdpServer pServer);
  490. /* 获取心跳检查间隔 */
  491. HPSOCKET_API DWORD __stdcall HP_UdpServer_GetDetectInterval(HP_UdpServer pServer);
  492. /**************************************************************************/
  493. /***************************** Agent 操作方法 *****************************/
  494. /*
  495. * 名称:启动通信组件
  496. * 描述:启动通信代理组件,启动完成后可开始连接远程服务器
  497. *
  498. * 参数: lpszBindAddress -- 绑定地址(默认:nullptr,绑定 0.0.0.0)
  499. * bAsyncConnect -- 是否采用异步 Connect
  500. * 返回值: TRUE -- 成功
  501. * FALSE -- 失败,可通过 HP_Agent_GetLastError() 获取错误代码
  502. */
  503. HPSOCKET_API BOOL __stdcall HP_Agent_Start(HP_Agent pAgent, LPCTSTR lpszBindAddress, BOOL bAsyncConnect);
  504. /*
  505. * 名称:关闭通信组件
  506. * 描述:关闭通信组件,关闭完成后断开所有连接并释放所有资源
  507. *
  508. * 参数:
  509. * 返回值: TRUE -- 成功
  510. * FALSE -- 失败,可通过 HP_Agent_GetLastError() 获取错误代码
  511. */
  512. HPSOCKET_API BOOL __stdcall HP_Agent_Stop(HP_Agent pAgent);
  513. /*
  514. * 名称:连接服务器
  515. * 描述:连接服务器,连接成功后 IAgentListener 会接收到 OnConnect() / OnHandShake() 事件
  516. *
  517. * 参数: lpszRemoteAddress -- 服务端地址
  518. * usPort -- 服务端端口
  519. * pdwConnID -- 连接 ID(默认:nullptr,不获取连接 ID)
  520. * 返回值: TRUE -- 成功
  521. * FALSE -- 失败,可通过函数 SYS_GetLastError() 获取 Windows 错误代码
  522. */
  523. HPSOCKET_API BOOL __stdcall HP_Agent_Connect(HP_Agent pAgent, LPCTSTR lpszRemoteAddress, USHORT usPort, HP_CONNID* pdwConnID);
  524. /*
  525. * 名称:发送数据
  526. * 描述:向指定连接发送数据
  527. *
  528. * 参数: dwConnID -- 连接 ID
  529. * pBuffer -- 发送缓冲区
  530. * iLength -- 发送缓冲区长度
  531. * 返回值: TRUE -- 成功
  532. * FALSE -- 失败,可通过 SYS_GetLastError() 获取 Windows 错误代码
  533. */
  534. HPSOCKET_API BOOL __stdcall HP_Agent_Send(HP_Agent pAgent, HP_CONNID dwConnID, const BYTE* pBuffer, int iLength);
  535. /*
  536. * 名称:发送数据
  537. * 描述:向指定连接发送数据
  538. *
  539. * 参数: dwConnID -- 连接 ID
  540. * pBuffer -- 发送缓冲区
  541. * iLength -- 发送缓冲区长度
  542. * iOffset -- 发送缓冲区指针偏移量
  543. * 返回值: TRUE -- 成功
  544. * FALSE -- 失败,可通过 SYS_GetLastError() 获取 Windows 错误代码
  545. */
  546. HPSOCKET_API BOOL __stdcall HP_Agent_SendPart(HP_Agent pAgent, HP_CONNID dwConnID, const BYTE* pBuffer, int iLength, int iOffset);
  547. /*
  548. * 名称:发送多组数据
  549. * 描述:向指定连接发送多组数据
  550. * TCP - 顺序发送所有数据包
  551. * UDP - 把所有数据包组合成一个数据包发送(数据包的总长度不能大于设置的 UDP 包最大长度)
  552. *
  553. * 参数: dwConnID -- 连接 ID
  554. * pBuffers -- 发送缓冲区数组
  555. * iCount -- 发送缓冲区数目
  556. * 返回值: TRUE -- 成功
  557. * FALSE -- 失败,可通过 SYS_GetLastError() 获取 Windows 错误代码
  558. */
  559. HPSOCKET_API BOOL __stdcall HP_Agent_SendPackets(HP_Agent pAgent, HP_CONNID dwConnID, const WSABUF pBuffers[], int iCount);
  560. /*
  561. * 名称:断开连接
  562. * 描述:断开某个连接
  563. *
  564. * 参数: dwConnID -- 连接 ID
  565. * bForce -- 是否强制断开连接
  566. * 返回值: TRUE -- 成功
  567. * FALSE -- 失败
  568. */
  569. HPSOCKET_API BOOL __stdcall HP_Agent_Disconnect(HP_Agent pAgent, HP_CONNID dwConnID, BOOL bForce);
  570. /*
  571. * 名称:断开超时连接
  572. * 描述:断开超过指定时长的连接
  573. *
  574. * 参数: dwPeriod -- 时长(毫秒)
  575. * bForce -- 是否强制断开连接
  576. * 返回值: TRUE -- 成功
  577. * FALSE -- 失败
  578. */
  579. HPSOCKET_API BOOL __stdcall HP_Agent_DisconnectLongConnections(HP_Agent pAgent, DWORD dwPeriod, BOOL bForce);
  580. /*
  581. * 名称:断开静默连接
  582. * 描述:断开超过指定时长的静默连接
  583. *
  584. * 参数: dwPeriod -- 时长(毫秒)
  585. * bForce -- 是否强制断开连接
  586. * 返回值: TRUE -- 成功
  587. * FALSE -- 失败
  588. */
  589. HPSOCKET_API BOOL __stdcall HP_Agent_DisconnectSilenceConnections(HP_Agent pAgent, DWORD dwPeriod, BOOL bForce);
  590. /******************************************************************************/
  591. /***************************** Agent 属性访问方法 *****************************/
  592. /*
  593. * 名称:设置连接的附加数据
  594. * 描述:是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
  595. *
  596. * 参数: dwConnID -- 连接 ID
  597. * pv -- 数据
  598. * 返回值: TRUE -- 成功
  599. * FALSE -- 失败(无效的连接 ID)
  600. */
  601. HPSOCKET_API BOOL __stdcall HP_Agent_SetConnectionExtra(HP_Agent pAgent, HP_CONNID dwConnID, PVOID pExtra);
  602. /*
  603. * 名称:获取连接的附加数据
  604. * 描述:是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
  605. *
  606. * 参数: dwConnID -- 连接 ID
  607. * ppv -- 数据指针
  608. * 返回值: TRUE -- 成功
  609. * FALSE -- 失败(无效的连接 ID)
  610. */
  611. HPSOCKET_API BOOL __stdcall HP_Agent_GetConnectionExtra(HP_Agent pAgent, HP_CONNID dwConnID, PVOID* ppExtra);
  612. /* 检查通信组件是否已启动 */
  613. HPSOCKET_API BOOL __stdcall HP_Agent_HasStarted(HP_Agent pAgent);
  614. /* 查看通信组件当前状态 */
  615. HPSOCKET_API En_HP_ServiceState __stdcall HP_Agent_GetState(HP_Agent pAgent);
  616. /* 获取连接数 */
  617. HPSOCKET_API DWORD __stdcall HP_Agent_GetConnectionCount(HP_Agent pAgent);
  618. /* 获取所有连接的 HP_CONNID */
  619. HPSOCKET_API BOOL __stdcall HP_Agent_GetAllConnectionIDs(HP_Agent pAgent, HP_CONNID pIDs[], DWORD* pdwCount);
  620. /* 获取某个连接时长(毫秒) */
  621. HPSOCKET_API BOOL __stdcall HP_Agent_GetConnectPeriod(HP_Agent pAgent, HP_CONNID dwConnID, DWORD* pdwPeriod);
  622. /* 获取某个连接静默时间(毫秒) */
  623. HPSOCKET_API BOOL __stdcall HP_Agent_GetSilencePeriod(HP_Agent pAgent, HP_CONNID dwConnID, DWORD* pdwPeriod);
  624. /* 获取某个连接的本地地址信息 */
  625. HPSOCKET_API BOOL __stdcall HP_Agent_GetLocalAddress(HP_Agent pAgent, HP_CONNID dwConnID, TCHAR lpszAddress[], int* piAddressLen, USHORT* pusPort);
  626. /* 获取某个连接的远程地址信息 */
  627. HPSOCKET_API BOOL __stdcall HP_Agent_GetRemoteAddress(HP_Agent pAgent, HP_CONNID dwConnID, TCHAR lpszAddress[], int* piAddressLen, USHORT* pusPort);
  628. /* 获取最近一次失败操作的错误代码 */
  629. HPSOCKET_API En_HP_SocketError __stdcall HP_Agent_GetLastError(HP_Agent pAgent);
  630. /* 获取最近一次失败操作的错误描述 */
  631. HPSOCKET_API LPCTSTR __stdcall HP_Agent_GetLastErrorDesc(HP_Agent pAgent);
  632. /* 获取连接中未发出数据的长度 */
  633. HPSOCKET_API BOOL __stdcall HP_Agent_GetPendingDataLength(HP_Agent pAgent, HP_CONNID dwConnID, int* piPending);
  634. /* 设置数据发送策略 */
  635. HPSOCKET_API void __stdcall HP_Agent_SetSendPolicy(HP_Agent pAgent, En_HP_SendPolicy enSendPolicy);
  636. /* 设置 Socket 缓存对象锁定时间(毫秒,在锁定期间该 Socket 缓存对象不能被获取使用) */
  637. HPSOCKET_API void __stdcall HP_Agent_SetFreeSocketObjLockTime(HP_Agent pAgent, DWORD dwFreeSocketObjLockTime);
  638. /* 设置 Socket 缓存池大小(通常设置为平均并发连接数量的 1/3 - 1/2) */
  639. HPSOCKET_API void __stdcall HP_Agent_SetFreeSocketObjPool(HP_Agent pAgent, DWORD dwFreeSocketObjPool);
  640. /* 设置内存块缓存池大小(通常设置为 Socket 缓存池大小的 2 - 3 倍) */
  641. HPSOCKET_API void __stdcall HP_Agent_SetFreeBufferObjPool(HP_Agent pAgent, DWORD dwFreeBufferObjPool);
  642. /* 设置 Socket 缓存池回收阀值(通常设置为 Socket 缓存池大小的 3 倍) */
  643. HPSOCKET_API void __stdcall HP_Agent_SetFreeSocketObjHold(HP_Agent pAgent, DWORD dwFreeSocketObjHold);
  644. /* 设置内存块缓存池回收阀值(通常设置为内存块缓存池大小的 3 倍) */
  645. HPSOCKET_API void __stdcall HP_Agent_SetFreeBufferObjHold(HP_Agent pAgent, DWORD dwFreeBufferObjHold);
  646. /* 设置最大连接数(组件会根据设置值预分配内存,因此需要根据实际情况设置,不宜过大)*/
  647. HPSOCKET_API void __stdcall HP_Agent_SetMaxConnectionCount(HP_Agent pAgent, DWORD dwMaxConnectionCount);
  648. /* 设置工作线程数量(通常设置为 2 * CPU + 2) */
  649. HPSOCKET_API void __stdcall HP_Agent_SetWorkerThreadCount(HP_Agent pAgent, DWORD dwWorkerThreadCount);
  650. /* 设置是否标记静默时间(设置为 TRUE 时 DisconnectSilenceConnections() 和 GetSilencePeriod() 才有效,默认:TRUE) */
  651. HPSOCKET_API void __stdcall HP_Agent_SetMarkSilence(HP_Agent pAgent, BOOL bMarkSilence);
  652. /* 获取数据发送策略 */
  653. HPSOCKET_API En_HP_SendPolicy __stdcall HP_Agent_GetSendPolicy(HP_Agent pAgent);
  654. /* 获取 Socket 缓存对象锁定时间 */
  655. HPSOCKET_API DWORD __stdcall HP_Agent_GetFreeSocketObjLockTime(HP_Agent pAgent);
  656. /* 获取 Socket 缓存池大小 */
  657. HPSOCKET_API DWORD __stdcall HP_Agent_GetFreeSocketObjPool(HP_Agent pAgent);
  658. /* 获取内存块缓存池大小 */
  659. HPSOCKET_API DWORD __stdcall HP_Agent_GetFreeBufferObjPool(HP_Agent pAgent);
  660. /* 获取 Socket 缓存池回收阀值 */
  661. HPSOCKET_API DWORD __stdcall HP_Agent_GetFreeSocketObjHold(HP_Agent pAgent);
  662. /* 获取内存块缓存池回收阀值 */
  663. HPSOCKET_API DWORD __stdcall HP_Agent_GetFreeBufferObjHold(HP_Agent pAgent);
  664. /* 获取最大连接数 */
  665. HPSOCKET_API DWORD __stdcall HP_Agent_GetMaxConnectionCount(HP_Agent pAgent);
  666. /* 获取工作线程数量 */
  667. HPSOCKET_API DWORD __stdcall HP_Agent_GetWorkerThreadCount(HP_Agent pAgent);
  668. /* 检测是否标记静默时间 */
  669. HPSOCKET_API BOOL __stdcall HP_Agent_IsMarkSilence(HP_Agent pAgent);
  670. /**********************************************************************************/
  671. /******************************* TCP Agent 操作方法 *******************************/
  672. /*
  673. * 名称:发送小文件
  674. * 描述:向指定连接发送 4096 KB 以下的小文件
  675. *
  676. * 参数: dwConnID -- 连接 ID
  677. * lpszFileName -- 文件路径
  678. * pHead -- 头部附加数据
  679. * pTail -- 尾部附加数据
  680. * 返回值: TRUE -- 成功
  681. * FALSE -- 失败,可通过 SYS_GetLastError() 获取 Windows 错误代码
  682. */
  683. HPSOCKET_API BOOL __stdcall HP_TcpAgent_SendSmallFile(HP_Agent pAgent, HP_CONNID dwConnID, LPCTSTR lpszFileName, const LPWSABUF pHead, const LPWSABUF pTail);
  684. /**********************************************************************************/
  685. /***************************** TCP Agent 属性访问方法 *****************************/
  686. /* 设置是否启用地址重用机制(默认:不启用) */
  687. HPSOCKET_API void __stdcall HP_TcpAgent_SetReuseAddress(HP_TcpAgent pAgent, BOOL bReuseAddress);
  688. /* 检测是否启用地址重用机制 */
  689. HPSOCKET_API BOOL __stdcall HP_TcpAgent_IsReuseAddress(HP_TcpAgent pAgent);
  690. /* 设置通信数据缓冲区大小(根据平均通信数据包大小调整设置,通常设置为 1024 的倍数) */
  691. HPSOCKET_API void __stdcall HP_TcpAgent_SetSocketBufferSize(HP_TcpAgent pAgent, DWORD dwSocketBufferSize);
  692. /* 设置正常心跳包间隔(毫秒,0 则不发送心跳包,默认:30 * 1000) */
  693. HPSOCKET_API void __stdcall HP_TcpAgent_SetKeepAliveTime(HP_TcpAgent pAgent, DWORD dwKeepAliveTime);
  694. /* 设置异常心跳包间隔(毫秒,0 不发送心跳包,,默认:10 * 1000,如果超过若干次 [默认:WinXP 5 次, Win7 10 次] 检测不到心跳确认包则认为已断线) */
  695. HPSOCKET_API void __stdcall HP_TcpAgent_SetKeepAliveInterval(HP_TcpAgent pAgent, DWORD dwKeepAliveInterval);
  696. /* 获取通信数据缓冲区大小 */
  697. HPSOCKET_API DWORD __stdcall HP_TcpAgent_GetSocketBufferSize(HP_TcpAgent pAgent);
  698. /* 获取正常心跳包间隔 */
  699. HPSOCKET_API DWORD __stdcall HP_TcpAgent_GetKeepAliveTime(HP_TcpAgent pAgent);
  700. /* 获取异常心跳包间隔 */
  701. HPSOCKET_API DWORD __stdcall HP_TcpAgent_GetKeepAliveInterval(HP_TcpAgent pAgent);
  702. /******************************************************************************/
  703. /***************************** Client 组件操作方法 *****************************/
  704. /*
  705. * 名称:启动通信组件
  706. * 描述:启动客户端通信组件并连接服务端,启动完成后可开始收发数据
  707. *
  708. * 参数: lpszRemoteAddress -- 服务端地址
  709. * usPort -- 服务端端口
  710. * bAsyncConnect -- 是否采用异步 Connect
  711. * 返回值: TRUE -- 成功
  712. * FALSE -- 失败,可通过 HP_Client_GetLastError() 获取错误代码
  713. */
  714. HPSOCKET_API BOOL __stdcall HP_Client_Start(HP_Client pClient, LPCTSTR lpszRemoteAddress, USHORT usPort, BOOL bAsyncConnect);
  715. /*
  716. * 名称:启动通信组件(并指定绑定地址)
  717. * 描述:启动客户端通信组件并连接服务端,启动完成后可开始收发数据
  718. *
  719. * 参数: lpszRemoteAddress -- 服务端地址
  720. * usPort -- 服务端端口
  721. * bAsyncConnect -- 是否采用异步 Connect
  722. * lpszBindAddress -- 绑定地址(默认:nullptr,TcpClient/UdpClient -> 不执行绑定操作,UdpCast 绑定 -> 0.0.0.0)
  723. * 返回值: TRUE -- 成功
  724. * FALSE -- 失败,可通过 HP_Client_GetLastError() 获取错误代码
  725. */
  726. HPSOCKET_API BOOL __stdcall HP_Client_StartWithBindAddress(HP_Client pClient, LPCTSTR lpszRemoteAddress, USHORT usPort, BOOL bAsyncConnect, LPCTSTR lpszBindAddress);
  727. /*
  728. * 名称:关闭通信组件
  729. * 描述:关闭客户端通信组件,关闭完成后断开与服务端的连接并释放所有资源
  730. *
  731. * 参数:
  732. * 返回值: TRUE -- 成功
  733. * FALSE -- 失败,可通过 HP_Client_GetLastError() 获取错误代码
  734. */
  735. HPSOCKET_API BOOL __stdcall HP_Client_Stop(HP_Client pClient);
  736. /*
  737. * 名称:发送数据
  738. * 描述:向服务端发送数据
  739. *
  740. * 参数: pBuffer -- 发送缓冲区
  741. * iLength -- 发送缓冲区长度
  742. * 返回值: TRUE -- 成功
  743. * FALSE -- 失败,可通过 SYS_GetLastError() 获取 Windows 错误代码
  744. */
  745. HPSOCKET_API BOOL __stdcall HP_Client_Send(HP_Client pClient, const BYTE* pBuffer, int iLength);
  746. /*
  747. * 名称:发送数据
  748. * 描述:向服务端发送数据
  749. *
  750. * 参数: pBuffer -- 发送缓冲区
  751. * iLength -- 发送缓冲区长度
  752. * iOffset -- 发送缓冲区指针偏移量
  753. * 返回值: TRUE -- 成功
  754. * FALSE -- 失败,可通过 SYS_GetLastError() 获取 Windows 错误代码
  755. */
  756. HPSOCKET_API BOOL __stdcall HP_Client_SendPart(HP_Client pClient, const BYTE* pBuffer, int iLength, int iOffset);
  757. /*
  758. * 名称:发送多组数据
  759. * 描述:向服务端发送多组数据
  760. * TCP - 顺序发送所有数据包
  761. * UDP - 把所有数据包组合成一个数据包发送(数据包的总长度不能大于设置的 UDP 包最大长度)
  762. *
  763. * 参数: pBuffers -- 发送缓冲区数组
  764. * iCount -- 发送缓冲区数目
  765. * 返回值: TRUE -- 成功
  766. * FALSE -- 失败,可通过 SYS_GetLastError() 获取 Windows 错误代码
  767. */
  768. HPSOCKET_API BOOL __stdcall HP_Client_SendPackets(HP_Client pClient, const WSABUF pBuffers[], int iCount);
  769. /******************************************************************************/
  770. /***************************** Client 属性访问方法 *****************************/
  771. /* 设置连接的附加数据 */
  772. HPSOCKET_API void __stdcall HP_Client_SetExtra(HP_Client pClient, PVOID pExtra);
  773. /* 获取连接的附加数据 */
  774. HPSOCKET_API PVOID __stdcall HP_Client_GetExtra(HP_Client pClient);
  775. /* 检查通信组件是否已启动 */
  776. HPSOCKET_API BOOL __stdcall HP_Client_HasStarted(HP_Client pClient);
  777. /* 查看通信组件当前状态 */
  778. HPSOCKET_API En_HP_ServiceState __stdcall HP_Client_GetState(HP_Client pClient);
  779. /* 获取最近一次失败操作的错误代码 */
  780. HPSOCKET_API En_HP_SocketError __stdcall HP_Client_GetLastError(HP_Client pClient);
  781. /* 获取最近一次失败操作的错误描述 */
  782. HPSOCKET_API LPCTSTR __stdcall HP_Client_GetLastErrorDesc(HP_Client pClient);
  783. /* 获取该组件对象的连接 ID */
  784. HPSOCKET_API HP_CONNID __stdcall HP_Client_GetConnectionID(HP_Client pClient);
  785. /* 获取 Client Socket 的地址信息 */
  786. HPSOCKET_API BOOL __stdcall HP_Client_GetLocalAddress(HP_Client pClient, TCHAR lpszAddress[], int* piAddressLen, USHORT* pusPort);
  787. /* 获取连接中未发出数据的长度 */
  788. HPSOCKET_API BOOL __stdcall HP_Client_GetPendingDataLength(HP_Client pClient, int* piPending);
  789. /* 设置内存块缓存池大小(通常设置为 -> PUSH 模型:5 - 10;PULL 模型:10 - 20 ) */
  790. HPSOCKET_API void __stdcall HP_Client_SetFreeBufferPoolSize(HP_Client pClient, DWORD dwFreeBufferPoolSize);
  791. /* 设置内存块缓存池回收阀值(通常设置为内存块缓存池大小的 3 倍) */
  792. HPSOCKET_API void __stdcall HP_Client_SetFreeBufferPoolHold(HP_Client pClient, DWORD dwFreeBufferPoolHold);
  793. /* 获取内存块缓存池大小 */
  794. HPSOCKET_API DWORD __stdcall HP_Client_GetFreeBufferPoolSize(HP_Client pClient);
  795. /* 获取内存块缓存池回收阀值 */
  796. HPSOCKET_API DWORD __stdcall HP_Client_GetFreeBufferPoolHold(HP_Client pClient);
  797. /**********************************************************************************/
  798. /******************************* TCP Client 操作方法 *******************************/
  799. /*
  800. * 名称:发送小文件
  801. * 描述:向服务端发送 4096 KB 以下的小文件
  802. *
  803. * 参数: lpszFileName -- 文件路径
  804. * pHead -- 头部附加数据
  805. * pTail -- 尾部附加数据
  806. * 返回值: TRUE -- 成功
  807. * FALSE -- 失败,可通过 SYS_GetLastError() 获取 Windows 错误代码
  808. */
  809. HPSOCKET_API BOOL __stdcall HP_TcpClient_SendSmallFile(HP_Client pClient, LPCTSTR lpszFileName, const LPWSABUF pHead, const LPWSABUF pTail);
  810. /**********************************************************************************/
  811. /***************************** TCP Client 属性访问方法 *****************************/
  812. /* 设置通信数据缓冲区大小(根据平均通信数据包大小调整设置,通常设置为:(N * 1024) - sizeof(TBufferObj)) */
  813. HPSOCKET_API void __stdcall HP_TcpClient_SetSocketBufferSize(HP_TcpClient pClient, DWORD dwSocketBufferSize);
  814. /* 设置正常心跳包间隔(毫秒,0 则不发送心跳包,默认:30 * 1000) */
  815. HPSOCKET_API void __stdcall HP_TcpClient_SetKeepAliveTime(HP_TcpClient pClient, DWORD dwKeepAliveTime);
  816. /* 设置异常心跳包间隔(毫秒,0 不发送心跳包,,默认:10 * 1000,如果超过若干次 [默认:WinXP 5 次, Win7 10 次] 检测不到心跳确认包则认为已断线) */
  817. HPSOCKET_API void __stdcall HP_TcpClient_SetKeepAliveInterval(HP_TcpClient pClient, DWORD dwKeepAliveInterval);
  818. /* 获取通信数据缓冲区大小 */
  819. HPSOCKET_API DWORD __stdcall HP_TcpClient_GetSocketBufferSize(HP_TcpClient pClient);
  820. /* 获取正常心跳包间隔 */
  821. HPSOCKET_API DWORD __stdcall HP_TcpClient_GetKeepAliveTime(HP_TcpClient pClient);
  822. /* 获取异常心跳包间隔 */
  823. HPSOCKET_API DWORD __stdcall HP_TcpClient_GetKeepAliveInterval(HP_TcpClient pClient);
  824. /**********************************************************************************/
  825. /***************************** UDP Client 属性访问方法 *****************************/
  826. /* 设置数据报文最大长度(建议在局域网环境下不超过 1472 字节,在广域网环境下不超过 548 字节) */
  827. HPSOCKET_API void __stdcall HP_UdpClient_SetMaxDatagramSize(HP_UdpClient pClient, DWORD dwMaxDatagramSize);
  828. /* 获取数据报文最大长度 */
  829. HPSOCKET_API DWORD __stdcall HP_UdpClient_GetMaxDatagramSize(HP_UdpClient pClient);
  830. /* 设置监测包尝试次数(0 则不发送监测跳包,如果超过最大尝试次数则认为已断线) */
  831. HPSOCKET_API void __stdcall HP_UdpClient_SetDetectAttempts(HP_UdpClient pClient, DWORD dwDetectAttempts);
  832. /* 设置监测包发送间隔(秒,0 不发送监测包) */
  833. HPSOCKET_API void __stdcall HP_UdpClient_SetDetectInterval(HP_UdpClient pClient, DWORD dwDetectInterval);
  834. /* 获取心跳检查次数 */
  835. HPSOCKET_API DWORD __stdcall HP_UdpClient_GetDetectAttempts(HP_UdpClient pClient);
  836. /* 获取心跳检查间隔 */
  837. HPSOCKET_API DWORD __stdcall HP_UdpClient_GetDetectInterval(HP_UdpClient pClient);
  838. /**********************************************************************************/
  839. /****************************** UDP Cast 属性访问方法 ******************************/
  840. /* 设置数据报文最大长度(建议在局域网环境下不超过 1472 字节,在广域网环境下不超过 548 字节) */
  841. HPSOCKET_API void __stdcall HP_UdpCast_SetMaxDatagramSize(HP_UdpCast pCast, DWORD dwMaxDatagramSize);
  842. /* 获取数据报文最大长度 */
  843. HPSOCKET_API DWORD __stdcall HP_UdpCast_GetMaxDatagramSize(HP_UdpCast pCast);
  844. /* 获取当前数据报的远程地址信息(通常在 OnReceive 事件中调用) */
  845. HPSOCKET_API BOOL __stdcall HP_UdpCast_GetRemoteAddress(HP_UdpCast pCast, TCHAR lpszAddress[], int* piAddressLen, USHORT* pusPort);
  846. /* 设置是否启用地址重用机制(默认:不启用) */
  847. HPSOCKET_API void __stdcall HP_UdpCast_SetReuseAddress(HP_UdpCast pCast, BOOL bReuseAddress);
  848. /* 检测是否启用地址重用机制 */
  849. HPSOCKET_API BOOL __stdcall HP_UdpCast_IsReuseAddress(HP_UdpCast pCast);
  850. /* 设置传播模式(组播或广播) */
  851. HPSOCKET_API void __stdcall HP_UdpCast_SetCastMode(HP_UdpCast pCast, En_HP_CastMode enCastMode);
  852. /* 获取传播模式 */
  853. HPSOCKET_API En_HP_CastMode __stdcall HP_UdpCast_GetCastMode(HP_UdpCast pCast);
  854. /* 设置组播报文的 TTL(0 - 255) */
  855. HPSOCKET_API void __stdcall HP_UdpCast_SetMultiCastTtl(HP_UdpCast pCast, int iMCTtl);
  856. /* 获取组播报文的 TTL */
  857. HPSOCKET_API int __stdcall HP_UdpCast_GetMultiCastTtl(HP_UdpCast pCast);
  858. /* 设置是否启用组播环路(TRUE or FALSE) */
  859. HPSOCKET_API void __stdcall HP_UdpCast_SetMultiCastLoop(HP_UdpCast pCast, BOOL bMCLoop);
  860. /* 检测是否启用组播环路 */
  861. HPSOCKET_API BOOL __stdcall HP_UdpCast_IsMultiCastLoop(HP_UdpCast pCast);
  862. /***************************************************************************************/
  863. /***************************** TCP Pull Server 组件操作方法 *****************************/
  864. /*
  865. * 名称:抓取数据
  866. * 描述:用户通过该方法从 Socket 组件中抓取数据
  867. *
  868. * 参数: dwConnID -- 连接 ID
  869. * pData -- 抓取缓冲区
  870. * iLength -- 抓取数据长度
  871. * 返回值: En_HP_FetchResult
  872. */
  873. HPSOCKET_API En_HP_FetchResult __stdcall HP_TcpPullServer_Fetch(HP_TcpPullServer pServer, HP_CONNID dwConnID, BYTE* pData, int iLength);
  874. /*
  875. * 名称:窥探数据(不会移除缓冲区数据)
  876. * 描述:用户通过该方法从 Socket 组件中窥探数据
  877. *
  878. * 参数: dwConnID -- 连接 ID
  879. * pData -- 窥探缓冲区
  880. * iLength -- 窥探数据长度
  881. * 返回值: En_HP_FetchResult
  882. */
  883. HPSOCKET_API En_HP_FetchResult __stdcall HP_TcpPullServer_Peek(HP_TcpPullServer pServer, HP_CONNID dwConnID, BYTE* pData, int iLength);
  884. /***************************************************************************************/
  885. /***************************** TCP Pull Server 属性访问方法 *****************************/
  886. /***************************************************************************************/
  887. /***************************** TCP Pull Agent 组件操作方法 *****************************/
  888. /*
  889. * 名称:抓取数据
  890. * 描述:用户通过该方法从 Socket 组件中抓取数据
  891. *
  892. * 参数: dwConnID -- 连接 ID
  893. * pData -- 抓取缓冲区
  894. * iLength -- 抓取数据长度
  895. * 返回值: En_HP_FetchResult
  896. */
  897. HPSOCKET_API En_HP_FetchResult __stdcall HP_TcpPullAgent_Fetch(HP_TcpPullAgent pAgent, HP_CONNID dwConnID, BYTE* pData, int iLength);
  898. /*
  899. * 名称:窥探数据(不会移除缓冲区数据)
  900. * 描述:用户通过该方法从 Socket 组件中窥探数据
  901. *
  902. * 参数: dwConnID -- 连接 ID
  903. * pData -- 窥探缓冲区
  904. * iLength -- 窥探数据长度
  905. * 返回值: En_HP_FetchResult
  906. */
  907. HPSOCKET_API En_HP_FetchResult __stdcall HP_TcpPullAgent_Peek(HP_TcpPullAgent pAgent, HP_CONNID dwConnID, BYTE* pData, int iLength);
  908. /***************************************************************************************/
  909. /***************************** TCP Pull Agent 属性访问方法 *****************************/
  910. /***************************************************************************************/
  911. /***************************** TCP Pull Client 组件操作方法 *****************************/
  912. /*
  913. * 名称:抓取数据
  914. * 描述:用户通过该方法从 Socket 组件中抓取数据
  915. *
  916. * 参数: dwConnID -- 连接 ID
  917. * pData -- 抓取缓冲区
  918. * iLength -- 抓取数据长度
  919. * 返回值: En_HP_FetchResult
  920. */
  921. HPSOCKET_API En_HP_FetchResult __stdcall HP_TcpPullClient_Fetch(HP_TcpPullClient pClient, BYTE* pData, int iLength);
  922. /*
  923. * 名称:窥探数据(不会移除缓冲区数据)
  924. * 描述:用户通过该方法从 Socket 组件中窥探数据
  925. *
  926. * 参数: dwConnID -- 连接 ID
  927. * pData -- 窥探缓冲区
  928. * iLength -- 窥探数据长度
  929. * 返回值: En_HP_FetchResult
  930. */
  931. HPSOCKET_API En_HP_FetchResult __stdcall HP_TcpPullClient_Peek(HP_TcpPullClient pClient, BYTE* pData, int iLength);
  932. /***************************************************************************************/
  933. /***************************** TCP Pull Client 属性访问方法 *****************************/
  934. /***************************************************************************************/
  935. /***************************** TCP Pack Server 组件操作方法 *****************************/
  936. /***************************************************************************************/
  937. /***************************** TCP Pack Server 属性访问方法 *****************************/
  938. /* 设置数据包最大长度(有效数据包最大长度不能超过 4194303/0x3FFFFF 字节,默认:262144/0x40000) */
  939. HPSOCKET_API void __stdcall HP_TcpPackServer_SetMaxPackSize(HP_TcpPackServer pServer, DWORD dwMaxPackSize);
  940. /* 设置包头标识(有效包头标识取值范围 0 ~ 1023/0x3FF,当包头标识为 0 时不校验包头,默认:0) */
  941. HPSOCKET_API void __stdcall HP_TcpPackServer_SetPackHeaderFlag(HP_TcpPackServer pServer, USHORT usPackHeaderFlag);
  942. /* 获取数据包最大长度 */
  943. HPSOCKET_API DWORD __stdcall HP_TcpPackServer_GetMaxPackSize(HP_TcpPackServer pServer);
  944. /* 获取包头标识 */
  945. HPSOCKET_API USHORT __stdcall HP_TcpPackServer_GetPackHeaderFlag(HP_TcpPackServer pServer);
  946. /***************************************************************************************/
  947. /***************************** TCP Pack Agent 组件操作方法 *****************************/
  948. /***************************************************************************************/
  949. /***************************** TCP Pack Agent 属性访问方法 *****************************/
  950. /* 设置数据包最大长度(有效数据包最大长度不能超过 4194303/0x3FFFFF 字节,默认:262144/0x40000) */
  951. HPSOCKET_API void __stdcall HP_TcpPackAgent_SetMaxPackSize(HP_TcpPackAgent pAgent, DWORD dwMaxPackSize);
  952. /* 设置包头标识(有效包头标识取值范围 0 ~ 1023/0x3FF,当包头标识为 0 时不校验包头,默认:0) */
  953. HPSOCKET_API void __stdcall HP_TcpPackAgent_SetPackHeaderFlag(HP_TcpPackAgent pAgent, USHORT usPackHeaderFlag);
  954. /* 获取数据包最大长度 */
  955. HPSOCKET_API DWORD __stdcall HP_TcpPackAgent_GetMaxPackSize(HP_TcpPackAgent pAgent);
  956. /* 获取包头标识 */
  957. HPSOCKET_API USHORT __stdcall HP_TcpPackAgent_GetPackHeaderFlag(HP_TcpPackAgent pAgent);
  958. /***************************************************************************************/
  959. /***************************** TCP Pack Client 组件操作方法 *****************************/
  960. /***************************************************************************************/
  961. /***************************** TCP Pack Client 属性访问方法 *****************************/
  962. /* 设置数据包最大长度(有效数据包最大长度不能超过 4194303/0x3FFFFF 字节,默认:262144/0x40000) */
  963. HPSOCKET_API void __stdcall HP_TcpPackClient_SetMaxPackSize(HP_TcpPackClient pClient, DWORD dwMaxPackSize);
  964. /* 设置包头标识(有效包头标识取值范围 0 ~ 1023/0x3FF,当包头标识为 0 时不校验包头,默认:0) */
  965. HPSOCKET_API void __stdcall HP_TcpPackClient_SetPackHeaderFlag(HP_TcpPackClient pClient, USHORT usPackHeaderFlag);
  966. /* 获取数据包最大长度 */
  967. HPSOCKET_API DWORD __stdcall HP_TcpPackClient_GetMaxPackSize(HP_TcpPackClient pClient);
  968. /* 获取包头标识 */
  969. HPSOCKET_API USHORT __stdcall HP_TcpPackClient_GetPackHeaderFlag(HP_TcpPackClient pClient);
  970. /*****************************************************************************************************************************************************/
  971. /******************************************************************** HTTP Exports *******************************************************************/
  972. /*****************************************************************************************************************************************************/
  973. /****************************************************/
  974. /******************* HTTP 回调函数 *******************/
  975. /* Complex HTTP 回调函数 */
  976. typedef En_HP_HttpParseResult (__stdcall *HP_FN_ComplexHttp_OnMessageBegin) (HP_CONNID dwConnID);
  977. typedef En_HP_HttpParseResult (__stdcall *HP_FN_ComplexHttp_OnRequestLine) (HP_CONNID dwConnID, LPCSTR lpszMethod, LPCSTR lpszUrl);
  978. typedef En_HP_HttpParseResult (__stdcall *HP_FN_ComplexHttp_OnStatusLine) (HP_CONNID dwConnID, USHORT usStatusCode, LPCSTR lpszDesc);
  979. typedef En_HP_HttpParseResult (__stdcall *HP_FN_ComplexHttp_OnHeader) (HP_CONNID dwConnID, LPCSTR lpszName, LPCSTR lpszValue);
  980. typedef En_HP_HttpParseResult (__stdcall *HP_FN_ComplexHttp_OnHeadersComplete) (HP_CONNID dwConnID);
  981. typedef En_HP_HttpParseResult (__stdcall *HP_FN_ComplexHttp_OnBody) (HP_CONNID dwConnID, const BYTE* pData, int iLength);
  982. typedef En_HP_HttpParseResult (__stdcall *HP_FN_ComplexHttp_OnChunkHeader) (HP_CONNID dwConnID, int iLength);
  983. typedef En_HP_HttpParseResult (__stdcall *HP_FN_ComplexHttp_OnChunkComplete) (HP_CONNID dwConnID);
  984. typedef En_HP_HttpParseResult (__stdcall *HP_FN_ComplexHttp_OnMessageComplete) (HP_CONNID dwConnID);
  985. typedef En_HP_HttpParseResult (__stdcall *HP_FN_ComplexHttp_OnUpgrade) (HP_CONNID dwConnID, En_HP_HttpUpgradeType enUpgradeType);
  986. typedef En_HP_HttpParseResult (__stdcall *HP_FN_ComplexHttp_OnParseError) (HP_CONNID dwConnID, int iErrorCode, LPCSTR lpszErrorDesc);
  987. /* Single HTTP 回调函数 */
  988. typedef En_HP_HttpParseResult (__stdcall *HP_FN_SingleHttp_OnMessageBegin) (HP_HttpClient pClient);
  989. typedef En_HP_HttpParseResult (__stdcall *HP_FN_SingleHttp_OnRequestLine) (HP_HttpClient pClient, LPCSTR lpszMethod, LPCSTR lpszUrl);
  990. typedef En_HP_HttpParseResult (__stdcall *HP_FN_SingleHttp_OnStatusLine) (HP_HttpClient pClient, USHORT usStatusCode, LPCSTR lpszDesc);
  991. typedef En_HP_HttpParseResult (__stdcall *HP_FN_SingleHttp_OnHeader) (HP_HttpClient pClient, LPCSTR lpszName, LPCSTR lpszValue);
  992. typedef En_HP_HttpParseResult (__stdcall *HP_FN_SingleHttp_OnHeadersComplete) (HP_HttpClient pClient);
  993. typedef En_HP_HttpParseResult (__stdcall *HP_FN_SingleHttp_OnBody) (HP_HttpClient pClient, const BYTE* pData, int iLength);
  994. typedef En_HP_HttpParseResult (__stdcall *HP_FN_SingleHttp_OnChunkHeader) (HP_HttpClient pClient, int iLength);
  995. typedef En_HP_HttpParseResult (__stdcall *HP_FN_SingleHttp_OnChunkComplete) (HP_HttpClient pClient);
  996. typedef En_HP_HttpParseResult (__stdcall *HP_FN_SingleHttp_OnMessageComplete) (HP_HttpClient pClient);
  997. typedef En_HP_HttpParseResult (__stdcall *HP_FN_SingleHttp_OnUpgrade) (HP_HttpClient pClient, En_HP_HttpUpgradeType enUpgradeType);
  998. typedef En_HP_HttpParseResult (__stdcall *HP_FN_SingleHttp_OnParseError) (HP_HttpClient pClient, int iErrorCode, LPCSTR lpszErrorDesc);
  999. /* HTTP Server 回调函数 */
  1000. typedef HP_FN_ComplexHttp_OnMessageBegin HP_FN_HttpServer_OnMessageBegin;
  1001. typedef HP_FN_ComplexHttp_OnRequestLine HP_FN_HttpServer_OnRequestLine;
  1002. typedef HP_FN_ComplexHttp_OnHeader HP_FN_HttpServer_OnHeader;
  1003. typedef HP_FN_ComplexHttp_OnHeadersComplete HP_FN_HttpServer_OnHeadersComplete;
  1004. typedef HP_FN_ComplexHttp_OnBody HP_FN_HttpServer_OnBody;
  1005. typedef HP_FN_ComplexHttp_OnChunkHeader HP_FN_HttpServer_OnChunkHeader;
  1006. typedef HP_FN_ComplexHttp_OnChunkComplete HP_FN_HttpServer_OnChunkComplete;
  1007. typedef HP_FN_ComplexHttp_OnMessageComplete HP_FN_HttpServer_OnMessageComplete;
  1008. typedef HP_FN_ComplexHttp_OnUpgrade HP_FN_HttpServer_OnUpgrade;
  1009. typedef HP_FN_ComplexHttp_OnParseError HP_FN_HttpServer_OnParseError;
  1010. typedef HP_FN_Server_OnPrepareListen HP_FN_HttpServer_OnPrepareListen;
  1011. typedef HP_FN_Server_OnAccept HP_FN_HttpServer_OnAccept;
  1012. typedef HP_FN_Server_OnHandShake HP_FN_HttpServer_OnHandShake;
  1013. typedef HP_FN_Server_OnSend HP_FN_HttpServer_OnSend;
  1014. typedef HP_FN_Server_OnClose HP_FN_HttpServer_OnClose;
  1015. typedef HP_FN_Server_OnShutdown HP_FN_HttpServer_OnShutdown;
  1016. /* HTTP Agent 回调函数 */
  1017. typedef HP_FN_ComplexHttp_OnMessageBegin HP_FN_HttpAgent_OnMessageBegin;
  1018. typedef HP_FN_ComplexHttp_OnStatusLine HP_FN_HttpAgent_OnStatusLine;
  1019. typedef HP_FN_ComplexHttp_OnHeader HP_FN_HttpAgent_OnHeader;
  1020. typedef HP_FN_ComplexHttp_OnHeadersComplete HP_FN_HttpAgent_OnHeadersComplete;
  1021. typedef HP_FN_ComplexHttp_OnBody HP_FN_HttpAgent_OnBody;
  1022. typedef HP_FN_ComplexHttp_OnChunkHeader HP_FN_HttpAgent_OnChunkHeader;
  1023. typedef HP_FN_ComplexHttp_OnChunkComplete HP_FN_HttpAgent_OnChunkComplete;
  1024. typedef HP_FN_ComplexHttp_OnMessageComplete HP_FN_HttpAgent_OnMessageComplete;
  1025. typedef HP_FN_ComplexHttp_OnUpgrade HP_FN_HttpAgent_OnUpgrade;
  1026. typedef HP_FN_ComplexHttp_OnParseError HP_FN_HttpAgent_OnParseError;
  1027. typedef HP_FN_Agent_OnPrepareConnect HP_FN_HttpAgent_OnPrepareConnect;
  1028. typedef HP_FN_Agent_OnConnect HP_FN_HttpAgent_OnConnect;
  1029. typedef HP_FN_Agent_OnHandShake HP_FN_HttpAgent_OnHandShake;
  1030. typedef HP_FN_Agent_OnSend HP_FN_HttpAgent_OnSend;
  1031. typedef HP_FN_Agent_OnClose HP_FN_HttpAgent_OnClose;
  1032. typedef HP_FN_Agent_OnShutdown HP_FN_HttpAgent_OnShutdown;
  1033. /* HTTP Client 回调函数 */
  1034. typedef HP_FN_SingleHttp_OnMessageBegin HP_FN_HttpClient_OnMessageBegin;
  1035. typedef HP_FN_SingleHttp_OnStatusLine HP_FN_HttpClient_OnStatusLine;
  1036. typedef HP_FN_SingleHttp_OnHeader HP_FN_HttpClient_OnHeader;
  1037. typedef HP_FN_SingleHttp_OnHeadersComplete HP_FN_HttpClient_OnHeadersComplete;
  1038. typedef HP_FN_SingleHttp_OnBody HP_FN_HttpClient_OnBody;
  1039. typedef HP_FN_SingleHttp_OnChunkHeader HP_FN_HttpClient_OnChunkHeader;
  1040. typedef HP_FN_SingleHttp_OnChunkComplete HP_FN_HttpClient_OnChunkComplete;
  1041. typedef HP_FN_SingleHttp_OnMessageComplete HP_FN_HttpClient_OnMessageComplete;
  1042. typedef HP_FN_SingleHttp_OnUpgrade HP_FN_HttpClient_OnUpgrade;
  1043. typedef HP_FN_SingleHttp_OnParseError HP_FN_HttpClient_OnParseError;
  1044. typedef HP_FN_Client_OnPrepareConnect HP_FN_HttpClient_OnPrepareConnect;
  1045. typedef HP_FN_Client_OnConnect HP_FN_HttpClient_OnConnect;
  1046. typedef HP_FN_Client_OnHandShake HP_FN_HttpClient_OnHandShake;
  1047. typedef HP_FN_Client_OnSend HP_FN_HttpClient_OnSend;
  1048. typedef HP_FN_Client_OnClose HP_FN_HttpClient_OnClose;
  1049. /****************************************************/
  1050. /***************** HTTP 对象创建函数 *****************/
  1051. // 创建 HP_HttpServer 对象
  1052. HPSOCKET_API HP_HttpServer __stdcall Create_HP_HttpServer(HP_HttpServerListener pListener);
  1053. // 创建 HP_HttpAgent 对象
  1054. HPSOCKET_API HP_HttpAgent __stdcall Create_HP_HttpAgent(HP_HttpAgentListener pListener);
  1055. // 创建 HP_HttpClient 对象
  1056. HPSOCKET_API HP_HttpClient __stdcall Create_HP_HttpClient(HP_HttpClientListener pListener);
  1057. // 销毁 HP_HttpServer 对象
  1058. HPSOCKET_API void __stdcall Destroy_HP_HttpServer(HP_HttpServer pServer);
  1059. // 销毁 HP_HttpAgent 对象
  1060. HPSOCKET_API void __stdcall Destroy_HP_HttpAgent(HP_HttpAgent pAgent);
  1061. // 销毁 HP_HttpClient 对象
  1062. HPSOCKET_API void __stdcall Destroy_HP_HttpClient(HP_HttpClient pClient);
  1063. // 创建 HP_HttpServerListener 对象
  1064. HPSOCKET_API HP_HttpServerListener __stdcall Create_HP_HttpServerListener();
  1065. // 创建 HP_HttpAgentListener 对象
  1066. HPSOCKET_API HP_HttpAgentListener __stdcall Create_HP_HttpAgentListener();
  1067. // 创建 HP_HttpClientListener 对象
  1068. HPSOCKET_API HP_HttpClientListener __stdcall Create_HP_HttpClientListener();
  1069. // 销毁 HP_HttpServerListener 对象
  1070. HPSOCKET_API void __stdcall Destroy_HP_HttpServerListener(HP_HttpServerListener pListener);
  1071. // 销毁 HP_HttpAgentListener 对象
  1072. HPSOCKET_API void __stdcall Destroy_HP_HttpAgentListener(HP_HttpAgentListener pListener);
  1073. // 销毁 HP_HttpClientListener 对象
  1074. HPSOCKET_API void __stdcall Destroy_HP_HttpClientListener(HP_HttpClientListener pListener);
  1075. /**********************************************************************************/
  1076. /*************************** HTTP Server 回调函数设置方法 **************************/
  1077. HPSOCKET_API void __stdcall HP_Set_FN_HttpServer_OnMessageBegin(HP_HttpServerListener pListener , HP_FN_HttpServer_OnMessageBegin fn);
  1078. HPSOCKET_API void __stdcall HP_Set_FN_HttpServer_OnRequestLine(HP_HttpServerListener pListener , HP_FN_HttpServer_OnRequestLine fn);
  1079. HPSOCKET_API void __stdcall HP_Set_FN_HttpServer_OnHeader(HP_HttpServerListener pListener , HP_FN_HttpServer_OnHeader fn);
  1080. HPSOCKET_API void __stdcall HP_Set_FN_HttpServer_OnHeadersComplete(HP_HttpServerListener pListener , HP_FN_HttpServer_OnHeadersComplete fn);
  1081. HPSOCKET_API void __stdcall HP_Set_FN_HttpServer_OnBody(HP_HttpServerListener pListener , HP_FN_HttpServer_OnBody fn);
  1082. HPSOCKET_API void __stdcall HP_Set_FN_HttpServer_OnChunkHeader(HP_HttpServerListener pListener , HP_FN_HttpServer_OnChunkHeader fn);
  1083. HPSOCKET_API void __stdcall HP_Set_FN_HttpServer_OnChunkComplete(HP_HttpServerListener pListener , HP_FN_HttpServer_OnChunkComplete fn);
  1084. HPSOCKET_API void __stdcall HP_Set_FN_HttpServer_OnMessageComplete(HP_HttpServerListener pListener , HP_FN_HttpServer_OnMessageComplete fn);
  1085. HPSOCKET_API void __stdcall HP_Set_FN_HttpServer_OnUpgrade(HP_HttpServerListener pListener , HP_FN_HttpServer_OnUpgrade fn);
  1086. HPSOCKET_API void __stdcall HP_Set_FN_HttpServer_OnParseError(HP_HttpServerListener pListener , HP_FN_HttpServer_OnParseError fn);
  1087. HPSOCKET_API void __stdcall HP_Set_FN_HttpServer_OnPrepareListen(HP_HttpServerListener pListener , HP_FN_HttpServer_OnPrepareListen fn);
  1088. HPSOCKET_API void __stdcall HP_Set_FN_HttpServer_OnAccept(HP_HttpServerListener pListener , HP_FN_HttpServer_OnAccept fn);
  1089. HPSOCKET_API void __stdcall HP_Set_FN_HttpServer_OnHandShake(HP_HttpServerListener pListener , HP_FN_HttpServer_OnHandShake fn);
  1090. HPSOCKET_API void __stdcall HP_Set_FN_HttpServer_OnSend(HP_HttpServerListener pListener , HP_FN_HttpServer_OnSend fn);
  1091. HPSOCKET_API void __stdcall HP_Set_FN_HttpServer_OnClose(HP_HttpServerListener pListener , HP_FN_HttpServer_OnClose fn);
  1092. HPSOCKET_API void __stdcall HP_Set_FN_HttpServer_OnShutdown(HP_HttpServerListener pListener , HP_FN_HttpServer_OnShutdown fn);
  1093. /**********************************************************************************/
  1094. /**************************** HTTP Agent 回调函数设置方法 **************************/
  1095. HPSOCKET_API void __stdcall HP_Set_FN_HttpAgent_OnMessageBegin(HP_HttpAgentListener pListener , HP_FN_HttpAgent_OnMessageBegin fn);
  1096. HPSOCKET_API void __stdcall HP_Set_FN_HttpAgent_OnStatusLine(HP_HttpAgentListener pListener , HP_FN_HttpAgent_OnStatusLine fn);
  1097. HPSOCKET_API void __stdcall HP_Set_FN_HttpAgent_OnHeader(HP_HttpAgentListener pListener , HP_FN_HttpAgent_OnHeader fn);
  1098. HPSOCKET_API void __stdcall HP_Set_FN_HttpAgent_OnHeadersComplete(HP_HttpAgentListener pListener , HP_FN_HttpAgent_OnHeadersComplete fn);
  1099. HPSOCKET_API void __stdcall HP_Set_FN_HttpAgent_OnBody(HP_HttpAgentListener pListener , HP_FN_HttpAgent_OnBody fn);
  1100. HPSOCKET_API void __stdcall HP_Set_FN_HttpAgent_OnChunkHeader(HP_HttpAgentListener pListener , HP_FN_HttpAgent_OnChunkHeader fn);
  1101. HPSOCKET_API void __stdcall HP_Set_FN_HttpAgent_OnChunkComplete(HP_HttpAgentListener pListener , HP_FN_HttpAgent_OnChunkComplete fn);
  1102. HPSOCKET_API void __stdcall HP_Set_FN_HttpAgent_OnMessageComplete(HP_HttpAgentListener pListener , HP_FN_HttpAgent_OnMessageComplete fn);
  1103. HPSOCKET_API void __stdcall HP_Set_FN_HttpAgent_OnUpgrade(HP_HttpAgentListener pListener , HP_FN_HttpAgent_OnUpgrade fn);
  1104. HPSOCKET_API void __stdcall HP_Set_FN_HttpAgent_OnParseError(HP_HttpAgentListener pListener , HP_FN_HttpAgent_OnParseError fn);
  1105. HPSOCKET_API void __stdcall HP_Set_FN_HttpAgent_OnPrepareConnect(HP_HttpAgentListener pListener , HP_FN_HttpAgent_OnPrepareConnect fn);
  1106. HPSOCKET_API void __stdcall HP_Set_FN_HttpAgent_OnConnect(HP_HttpAgentListener pListener , HP_FN_HttpAgent_OnConnect fn);
  1107. HPSOCKET_API void __stdcall HP_Set_FN_HttpAgent_OnHandShake(HP_HttpAgentListener pListener , HP_FN_HttpAgent_OnHandShake fn);
  1108. HPSOCKET_API void __stdcall HP_Set_FN_HttpAgent_OnSend(HP_HttpAgentListener pListener , HP_FN_HttpAgent_OnSend fn);
  1109. HPSOCKET_API void __stdcall HP_Set_FN_HttpAgent_OnClose(HP_HttpAgentListener pListener , HP_FN_HttpAgent_OnClose fn);
  1110. HPSOCKET_API void __stdcall HP_Set_FN_HttpAgent_OnShutdown(HP_HttpAgentListener pListener , HP_FN_HttpAgent_OnShutdown fn);
  1111. /**********************************************************************************/
  1112. /*************************** HTTP Client 回调函数设置方法 **************************/
  1113. HPSOCKET_API void __stdcall HP_Set_FN_HttpClient_OnMessageBegin(HP_HttpClientListener pListener , HP_FN_HttpClient_OnMessageBegin fn);
  1114. HPSOCKET_API void __stdcall HP_Set_FN_HttpClient_OnStatusLine(HP_HttpClientListener pListener , HP_FN_HttpClient_OnStatusLine fn);
  1115. HPSOCKET_API void __stdcall HP_Set_FN_HttpClient_OnHeader(HP_HttpClientListener pListener , HP_FN_HttpClient_OnHeader fn);
  1116. HPSOCKET_API void __stdcall HP_Set_FN_HttpClient_OnHeadersComplete(HP_HttpClientListener pListener , HP_FN_HttpClient_OnHeadersComplete fn);
  1117. HPSOCKET_API void __stdcall HP_Set_FN_HttpClient_OnBody(HP_HttpClientListener pListener , HP_FN_HttpClient_OnBody fn);
  1118. HPSOCKET_API void __stdcall HP_Set_FN_HttpClient_OnChunkHeader(HP_HttpClientListener pListener , HP_FN_HttpClient_OnChunkHeader fn);
  1119. HPSOCKET_API void __stdcall HP_Set_FN_HttpClient_OnChunkComplete(HP_HttpClientListener pListener , HP_FN_HttpClient_OnChunkComplete fn);
  1120. HPSOCKET_API void __stdcall HP_Set_FN_HttpClient_OnMessageComplete(HP_HttpClientListener pListener , HP_FN_HttpClient_OnMessageComplete fn);
  1121. HPSOCKET_API void __stdcall HP_Set_FN_HttpClient_OnUpgrade(HP_HttpClientListener pListener , HP_FN_HttpClient_OnUpgrade fn);
  1122. HPSOCKET_API void __stdcall HP_Set_FN_HttpClient_OnParseError(HP_HttpClientListener pListener , HP_FN_HttpClient_OnParseError fn);
  1123. HPSOCKET_API void __stdcall HP_Set_FN_HttpClient_OnPrepareConnect(HP_HttpClientListener pListener , HP_FN_HttpClient_OnPrepareConnect fn);
  1124. HPSOCKET_API void __stdcall HP_Set_FN_HttpClient_OnConnect(HP_HttpClientListener pListener , HP_FN_HttpClient_OnConnect fn);
  1125. HPSOCKET_API void __stdcall HP_Set_FN_HttpClient_OnHandShake(HP_HttpClientListener pListener , HP_FN_HttpClient_OnHandShake fn);
  1126. HPSOCKET_API void __stdcall HP_Set_FN_HttpClient_OnSend(HP_HttpClientListener pListener , HP_FN_HttpClient_OnSend fn);
  1127. HPSOCKET_API void __stdcall HP_Set_FN_HttpClient_OnClose(HP_HttpClientListener pListener , HP_FN_HttpClient_OnClose fn);
  1128. /**************************************************************************/
  1129. /***************************** Server 操作方法 *****************************/
  1130. /*
  1131. * 名称:回复请求
  1132. * 描述:向客户端回复 HTTP 请求
  1133. *
  1134. * 参数: dwConnID -- 连接 ID
  1135. * usStatusCode -- HTTP 状态码
  1136. * lpszDesc -- HTTP 状态描述
  1137. * lpHeaders -- 回复请求头
  1138. * iHeaderCount -- 回复请求头数量
  1139. * pData -- 回复请求体
  1140. * iLength -- 回复请求体长度
  1141. * 返回值: TRUE -- 成功
  1142. * FALSE -- 失败
  1143. */
  1144. HPSOCKET_API BOOL __stdcall HP_HttpServer_SendResponse(HP_HttpServer pServer, HP_CONNID dwConnID, USHORT usStatusCode, LPCSTR lpszDesc, const HP_THeader lpHeaders[], int iHeaderCount, const BYTE* pData, int iLength);
  1145. /*
  1146. * 名称:释放连接
  1147. * 描述:把连接放入释放队列,等待某个时间(通过 SetReleaseDelay() 设置)关闭连接
  1148. *
  1149. * 参数: dwConnID -- 连接 ID
  1150. * 返回值: TRUE -- 成功
  1151. * FALSE -- 失败
  1152. */
  1153. HPSOCKET_API BOOL __stdcall HP_HttpServer_Release(HP_HttpServer pServer, HP_CONNID dwConnID);
  1154. /******************************************************************************/
  1155. /***************************** Server 属性访问方法 *****************************/
  1156. /* 设置连接释放延时(默认:3000 毫秒) */
  1157. HPSOCKET_API void __stdcall HP_HttpServer_SetReleaseDelay(HP_HttpServer pServer, DWORD dwReleaseDelay);
  1158. /* 获取连接释放延时 */
  1159. HPSOCKET_API DWORD __stdcall HP_HttpServer_GetReleaseDelay(HP_HttpServer pServer);
  1160. /* 获取请求行 URL 域掩码(URL 域参考:EnHttpUrlField) */
  1161. HPSOCKET_API USHORT __stdcall HP_HttpServer_GetUrlFieldSet(HP_HttpServer pServer, HP_CONNID dwConnID);
  1162. /* 获取某个 URL 域值 */
  1163. HPSOCKET_API LPCSTR __stdcall HP_HttpServer_GetUrlField(HP_HttpServer pServer, HP_CONNID dwConnID, En_HP_HttpUrlField enField);
  1164. /* 获取请求方法 */
  1165. HPSOCKET_API LPCSTR __stdcall HP_HttpServer_GetMethod(HP_HttpServer pServer, HP_CONNID dwConnID);
  1166. /* 设置本地协议版本 */
  1167. HPSOCKET_API void __stdcall HP_HttpServer_SetLocalVersion(HP_HttpServer pServer, En_HP_HttpVersion usVersion);
  1168. /* 获取本地协议版本 */
  1169. HPSOCKET_API En_HP_HttpVersion __stdcall HP_HttpServer_GetLocalVersion(HP_HttpServer pServer);
  1170. /* 检查是否升级协议 */
  1171. HPSOCKET_API BOOL __stdcall HP_HttpServer_IsUpgrade(HP_HttpServer pServer, HP_CONNID dwConnID);
  1172. /* 检查是否有 Keep-Alive 标识 */
  1173. HPSOCKET_API BOOL __stdcall HP_HttpServer_IsKeepAlive(HP_HttpServer pServer, HP_CONNID dwConnID);
  1174. /* 获取协议版本 */
  1175. HPSOCKET_API USHORT __stdcall HP_HttpServer_GetVersion(HP_HttpServer pServer, HP_CONNID dwConnID);
  1176. /* 获取内容长度 */
  1177. HPSOCKET_API ULONGLONG __stdcall HP_HttpServer_GetContentLength(HP_HttpServer pServer, HP_CONNID dwConnID);
  1178. /* 获取内容类型 */
  1179. HPSOCKET_API LPCSTR __stdcall HP_HttpServer_GetContentType(HP_HttpServer pServer, HP_CONNID dwConnID);
  1180. /* 获取协议升级类型 */
  1181. HPSOCKET_API En_HP_HttpUpgradeType __stdcall HP_HttpServer_GetUpgradeType(HP_HttpServer pServer, HP_CONNID dwConnID);
  1182. /* 获取解析错误代码 */
  1183. HPSOCKET_API USHORT __stdcall HP_HttpServer_GetParseErrorCode(HP_HttpServer pServer, HP_CONNID dwConnID, LPCSTR* lpszErrorDesc);
  1184. /* 获取某个请求头(单值) */
  1185. HPSOCKET_API BOOL __stdcall HP_HttpServer_GetHeader(HP_HttpServer pServer, HP_CONNID dwConnID, LPCSTR lpszName, LPCSTR* lpszValue);
  1186. /* 获取某个请求头(多值) */
  1187. HPSOCKET_API BOOL __stdcall HP_HttpServer_GetHeaders(HP_HttpServer pServer, HP_CONNID dwConnID, LPCSTR lpszName, LPCSTR lpszValue[], DWORD* pdwCount);
  1188. /* 获取所有请求头 */
  1189. HPSOCKET_API BOOL __stdcall HP_HttpServer_GetAllHeaders(HP_HttpServer pServer, HP_CONNID dwConnID, HP_THeader lpHeaders[], DWORD* pdwCount);
  1190. /* 获取所有请求头名称 */
  1191. HPSOCKET_API BOOL __stdcall HP_HttpServer_GetAllHeaderNames(HP_HttpServer pServer, HP_CONNID dwConnID, LPCSTR lpszName[], DWORD* pdwCount);
  1192. /* 获取 Cookie */
  1193. HPSOCKET_API BOOL __stdcall HP_HttpServer_GetCookie(HP_HttpServer pServer, HP_CONNID dwConnID, LPCSTR lpszName, LPCSTR* lpszValue);
  1194. /* 获取所有 Cookie */
  1195. HPSOCKET_API BOOL __stdcall HP_HttpServer_GetAllCookies(HP_HttpServer pServer, HP_CONNID dwConnID, HP_TCookie lpCookies[], DWORD* pdwCount);
  1196. /**************************************************************************/
  1197. /***************************** Agent 操作方法 ******************************/
  1198. /*
  1199. * 名称:发送请求
  1200. * 描述:向服务端发送 HTTP 请求
  1201. *
  1202. * 参数: dwConnID -- 连接 ID
  1203. * lpszMethod -- 请求方法
  1204. * lpszPath -- 请求路径
  1205. * lpHeaders -- 请求头
  1206. * iHeaderCount -- 请求头数量
  1207. * pBody -- 请求体
  1208. * iLength -- 请求体长度
  1209. * 返回值: TRUE -- 成功
  1210. * FALSE -- 失败
  1211. */
  1212. HPSOCKET_API BOOL __stdcall HP_HttpAgent_SendRequest(HP_HttpAgent pAgent, HP_CONNID dwConnID, LPCSTR lpszMethod, LPCSTR lpszPath, const HP_THeader lpHeaders[], int iHeaderCount, const BYTE* pData, int iLength);
  1213. /* 发送 POST 请求 */
  1214. HPSOCKET_API BOOL __stdcall HP_HttpAgent_SendPost(HP_HttpAgent pAgent, HP_CONNID dwConnID, LPCSTR lpszPath, const HP_THeader lpHeaders[], int iHeaderCount, const BYTE* pBody, int iLength);
  1215. /* 发送 PUT 请求 */
  1216. HPSOCKET_API BOOL __stdcall HP_HttpAgent_SendPut(HP_HttpAgent pAgent, HP_CONNID dwConnID, LPCSTR lpszPath, const HP_THeader lpHeaders[], int iHeaderCount, const BYTE* pBody, int iLength);
  1217. /* 发送 PATCH 请求 */
  1218. HPSOCKET_API BOOL __stdcall HP_HttpAgent_SendPatch(HP_HttpAgent pAgent, HP_CONNID dwConnID, LPCSTR lpszPath, const HP_THeader lpHeaders[], int iHeaderCount, const BYTE* pBody, int iLength);
  1219. /* 发送 GET 请求 */
  1220. HPSOCKET_API BOOL __stdcall HP_HttpAgent_SendGet(HP_HttpAgent pAgent, HP_CONNID dwConnID, LPCSTR lpszPath, const HP_THeader lpHeaders[], int iHeaderCount);
  1221. /* 发送 DELETE 请求 */
  1222. HPSOCKET_API BOOL __stdcall HP_HttpAgent_SendDelete(HP_HttpAgent pAgent, HP_CONNID dwConnID, LPCSTR lpszPath, const HP_THeader lpHeaders[], int iHeaderCount);
  1223. /* 发送 HEAD 请求 */
  1224. HPSOCKET_API BOOL __stdcall HP_HttpAgent_SendHead(HP_HttpAgent pAgent, HP_CONNID dwConnID, LPCSTR lpszPath, const HP_THeader lpHeaders[], int iHeaderCount);
  1225. /* 发送 TRACE 请求 */
  1226. HPSOCKET_API BOOL __stdcall HP_HttpAgent_SendTrace(HP_HttpAgent pAgent, HP_CONNID dwConnID, LPCSTR lpszPath, const HP_THeader lpHeaders[], int iHeaderCount);
  1227. /* 发送 OPTIONS 请求 */
  1228. HPSOCKET_API BOOL __stdcall HP_HttpAgent_SendOptions(HP_HttpAgent pAgent, HP_CONNID dwConnID, LPCSTR lpszPath, const HP_THeader lpHeaders[], int iHeaderCount);
  1229. /* 发送 CONNECT 请求 */
  1230. HPSOCKET_API BOOL __stdcall HP_HttpAgent_SendConnect(HP_HttpAgent pAgent, HP_CONNID dwConnID, LPCSTR lpszHost, const HP_THeader lpHeaders[], int iHeaderCount);
  1231. /******************************************************************************/
  1232. /***************************** Agent 属性访问方法 ******************************/
  1233. /* 获取 HTTP 状态码 */
  1234. HPSOCKET_API USHORT __stdcall HP_HttpAgent_GetStatusCode(HP_HttpAgent pAgent, HP_CONNID dwConnID);
  1235. /* 设置本地协议版本 */
  1236. HPSOCKET_API void __stdcall HP_HttpAgent_SetLocalVersion(HP_HttpAgent pAgent, En_HP_HttpVersion usVersion);
  1237. /* 获取本地协议版本 */
  1238. HPSOCKET_API En_HP_HttpVersion __stdcall HP_HttpAgent_GetLocalVersion(HP_HttpAgent pAgent);
  1239. /* 检查是否升级协议 */
  1240. HPSOCKET_API BOOL __stdcall HP_HttpAgent_IsUpgrade(HP_HttpAgent pAgent, HP_CONNID dwConnID);
  1241. /* 检查是否有 Keep-Alive 标识 */
  1242. HPSOCKET_API BOOL __stdcall HP_HttpAgent_IsKeepAlive(HP_HttpAgent pAgent, HP_CONNID dwConnID);
  1243. /* 获取协议版本 */
  1244. HPSOCKET_API USHORT __stdcall HP_HttpAgent_GetVersion(HP_HttpAgent pAgent, HP_CONNID dwConnID);
  1245. /* 获取内容长度 */
  1246. HPSOCKET_API ULONGLONG __stdcall HP_HttpAgent_GetContentLength(HP_HttpAgent pAgent, HP_CONNID dwConnID);
  1247. /* 获取内容类型 */
  1248. HPSOCKET_API LPCSTR __stdcall HP_HttpAgent_GetContentType(HP_HttpAgent pAgent, HP_CONNID dwConnID);
  1249. /* 获取协议升级类型 */
  1250. HPSOCKET_API En_HP_HttpUpgradeType __stdcall HP_HttpAgent_GetUpgradeType(HP_HttpAgent pAgent, HP_CONNID dwConnID);
  1251. /* 获取解析错误代码 */
  1252. HPSOCKET_API USHORT __stdcall HP_HttpAgent_GetParseErrorCode(HP_HttpAgent pAgent, HP_CONNID dwConnID, LPCSTR* lpszErrorDesc);
  1253. /* 获取某个请求头(单值) */
  1254. HPSOCKET_API BOOL __stdcall HP_HttpAgent_GetHeader(HP_HttpAgent pAgent, HP_CONNID dwConnID, LPCSTR lpszName, LPCSTR* lpszValue);
  1255. /* 获取某个请求头(多值) */
  1256. HPSOCKET_API BOOL __stdcall HP_HttpAgent_GetHeaders(HP_HttpAgent pAgent, HP_CONNID dwConnID, LPCSTR lpszName, LPCSTR lpszValue[], DWORD* pdwCount);
  1257. /* 获取所有请求头 */
  1258. HPSOCKET_API BOOL __stdcall HP_HttpAgent_GetAllHeaders(HP_HttpAgent pAgent, HP_CONNID dwConnID, HP_THeader lpHeaders[], DWORD* pdwCount);
  1259. /* 获取所有请求头名称 */
  1260. HPSOCKET_API BOOL __stdcall HP_HttpAgent_GetAllHeaderNames(HP_HttpAgent pAgent, HP_CONNID dwConnID, LPCSTR lpszName[], DWORD* pdwCount);
  1261. /* 获取 Cookie */
  1262. HPSOCKET_API BOOL __stdcall HP_HttpAgent_GetCookie(HP_HttpAgent pAgent, HP_CONNID dwConnID, LPCSTR lpszName, LPCSTR* lpszValue);
  1263. /* 获取所有 Cookie */
  1264. HPSOCKET_API BOOL __stdcall HP_HttpAgent_GetAllCookies(HP_HttpAgent pAgent, HP_CONNID dwConnID, HP_TCookie lpCookies[], DWORD* pdwCount);
  1265. /* 添加 Cookie */
  1266. HPSOCKET_API BOOL __stdcall HP_HttpAgent_AddCookie(HP_HttpAgent pAgent, HP_CONNID dwConnID, LPCSTR lpszName, LPCSTR lpszValue, BOOL bRelpace);
  1267. /* 删除 Cookie */
  1268. HPSOCKET_API BOOL __stdcall HP_HttpAgent_DeleteCookie(HP_HttpAgent pAgent, HP_CONNID dwConnID, LPCSTR lpszName);
  1269. /* 删除所有 Cookie */
  1270. HPSOCKET_API BOOL __stdcall HP_HttpAgent_DeleteAllCookies(HP_HttpAgent pAgent, HP_CONNID dwConnID);
  1271. /**************************************************************************/
  1272. /***************************** Client 操作方法 *****************************/
  1273. /*
  1274. * 名称:发送请求
  1275. * 描述:向服务端发送 HTTP 请求
  1276. *
  1277. * 参数: lpszMethod -- 请求方法
  1278. * lpszPath -- 请求路径
  1279. * lpHeaders -- 请求头
  1280. * iHeaderCount -- 请求头数量
  1281. * pBody -- 请求体
  1282. * iLength -- 请求体长度
  1283. * 返回值: TRUE -- 成功
  1284. * FALSE -- 失败
  1285. */
  1286. HPSOCKET_API BOOL __stdcall HP_HttpClient_SendRequest(HP_HttpClient pClient, LPCSTR lpszMethod, LPCSTR lpszPath, const HP_THeader lpHeaders[], int iHeaderCount, const BYTE* pBody, int iLength);
  1287. /* 发送 POST 请求 */
  1288. HPSOCKET_API BOOL __stdcall HP_HttpClient_SendPost(HP_HttpClient pClient, LPCSTR lpszPath, const HP_THeader lpHeaders[], int iHeaderCount, const BYTE* pBody, int iLength);
  1289. /* 发送 PUT 请求 */
  1290. HPSOCKET_API BOOL __stdcall HP_HttpClient_SendPut(HP_HttpClient pClient, LPCSTR lpszPath, const HP_THeader lpHeaders[], int iHeaderCount, const BYTE* pBody, int iLength);
  1291. /* 发送 PATCH 请求 */
  1292. HPSOCKET_API BOOL __stdcall HP_HttpClient_SendPatch(HP_HttpClient pClient, LPCSTR lpszPath, const HP_THeader lpHeaders[], int iHeaderCount, const BYTE* pBody, int iLength);
  1293. /* 发送 GET 请求 */
  1294. HPSOCKET_API BOOL __stdcall HP_HttpClient_SendGet(HP_HttpClient pClient, LPCSTR lpszPath, const HP_THeader lpHeaders[], int iHeaderCount);
  1295. /* 发送 DELETE 请求 */
  1296. HPSOCKET_API BOOL __stdcall HP_HttpClient_SendDelete(HP_HttpClient pClient, LPCSTR lpszPath, const HP_THeader lpHeaders[], int iHeaderCount);
  1297. /* 发送 HEAD 请求 */
  1298. HPSOCKET_API BOOL __stdcall HP_HttpClient_SendHead(HP_HttpClient pClient, LPCSTR lpszPath, const HP_THeader lpHeaders[], int iHeaderCount);
  1299. /* 发送 TRACE 请求 */
  1300. HPSOCKET_API BOOL __stdcall HP_HttpClient_SendTrace(HP_HttpClient pClient, LPCSTR lpszPath, const HP_THeader lpHeaders[], int iHeaderCount);
  1301. /* 发送 OPTIONS 请求 */
  1302. HPSOCKET_API BOOL __stdcall HP_HttpClient_SendOptions(HP_HttpClient pClient, LPCSTR lpszPath, const HP_THeader lpHeaders[], int iHeaderCount);
  1303. /* 发送 CONNECT 请求 */
  1304. HPSOCKET_API BOOL __stdcall HP_HttpClient_SendConnect(HP_HttpClient pClient, LPCSTR lpszHost, const HP_THeader lpHeaders[], int iHeaderCount);
  1305. /******************************************************************************/
  1306. /***************************** Client 属性访问方法 *****************************/
  1307. /* 获取 HTTP 状态码 */
  1308. HPSOCKET_API USHORT __stdcall HP_HttpClient_GetStatusCode(HP_HttpClient pClient);
  1309. /* 设置本地协议版本 */
  1310. HPSOCKET_API void __stdcall HP_HttpClient_SetLocalVersion(HP_HttpClient pClient, En_HP_HttpVersion usVersion);
  1311. /* 获取本地协议版本 */
  1312. HPSOCKET_API En_HP_HttpVersion __stdcall HP_HttpClient_GetLocalVersion(HP_HttpClient pClient);
  1313. /* 检查是否升级协议 */
  1314. HPSOCKET_API BOOL __stdcall HP_HttpClient_IsUpgrade(HP_HttpClient pClient);
  1315. /* 检查是否有 Keep-Alive 标识 */
  1316. HPSOCKET_API BOOL __stdcall HP_HttpClient_IsKeepAlive(HP_HttpClient pClient);
  1317. /* 获取协议版本 */
  1318. HPSOCKET_API USHORT __stdcall HP_HttpClient_GetVersion(HP_HttpClient pClient);
  1319. /* 获取内容长度 */
  1320. HPSOCKET_API ULONGLONG __stdcall HP_HttpClient_GetContentLength(HP_HttpClient pClient);
  1321. /* 获取内容类型 */
  1322. HPSOCKET_API LPCSTR __stdcall HP_HttpClient_GetContentType(HP_HttpClient pClient);
  1323. /* 获取协议升级类型 */
  1324. HPSOCKET_API En_HP_HttpUpgradeType __stdcall HP_HttpClient_GetUpgradeType(HP_HttpClient pClient);
  1325. /* 获取解析错误代码 */
  1326. HPSOCKET_API USHORT __stdcall HP_HttpClient_GetParseErrorCode(HP_HttpClient pClient, LPCSTR* lpszErrorDesc);
  1327. /* 获取某个请求头(单值) */
  1328. HPSOCKET_API BOOL __stdcall HP_HttpClient_GetHeader(HP_HttpClient pClient, LPCSTR lpszName, LPCSTR* lpszValue);
  1329. /* 获取某个请求头(多值) */
  1330. HPSOCKET_API BOOL __stdcall HP_HttpClient_GetHeaders(HP_HttpClient pClient, LPCSTR lpszName, LPCSTR lpszValue[], DWORD* pdwCount);
  1331. /* 获取所有请求头 */
  1332. HPSOCKET_API BOOL __stdcall HP_HttpClient_GetAllHeaders(HP_HttpClient pClient, HP_THeader lpHeaders[], DWORD* pdwCount);
  1333. /* 获取所有请求头名称 */
  1334. HPSOCKET_API BOOL __stdcall HP_HttpClient_GetAllHeaderNames(HP_HttpClient pClient, LPCSTR lpszName[], DWORD* pdwCount);
  1335. /* 获取 Cookie */
  1336. HPSOCKET_API BOOL __stdcall HP_HttpClient_GetCookie(HP_HttpClient pClient, LPCSTR lpszName, LPCSTR* lpszValue);
  1337. /* 获取所有 Cookie */
  1338. HPSOCKET_API BOOL __stdcall HP_HttpClient_GetAllCookies(HP_HttpClient pClient, HP_TCookie lpCookies[], DWORD* pdwCount);
  1339. /* 添加 Cookie */
  1340. HPSOCKET_API BOOL __stdcall HP_HttpClient_AddCookie(HP_HttpClient pClient, LPCSTR lpszName, LPCSTR lpszValue, BOOL bRelpace);
  1341. /* 删除 Cookie */
  1342. HPSOCKET_API BOOL __stdcall HP_HttpClient_DeleteCookie(HP_HttpClient pClient, LPCSTR lpszName);
  1343. /* 删除所有 Cookie */
  1344. HPSOCKET_API BOOL __stdcall HP_HttpClient_DeleteAllCookies(HP_HttpClient pClient);
  1345. /*****************************************************************************************************************************************************/
  1346. /*************************************************************** Global Function Exports *************************************************************/
  1347. /*****************************************************************************************************************************************************/
  1348. /* 获取错误描述文本 */
  1349. HPSOCKET_API LPCTSTR __stdcall HP_GetSocketErrorDesc(En_HP_SocketError enCode);
  1350. /* 调用系统的 GetLastError() 方法获取系统错误代码 */
  1351. HPSOCKET_API DWORD __stdcall SYS_GetLastError();
  1352. // 调用系统的 WSAGetLastError() 方法获取系统错误代码
  1353. HPSOCKET_API int __stdcall SYS_WSAGetLastError();
  1354. // 调用系统的 setsockopt()
  1355. HPSOCKET_API int __stdcall SYS_SetSocketOption(SOCKET sock, int level, int name, LPVOID val, int len);
  1356. // 调用系统的 getsockopt()
  1357. HPSOCKET_API int __stdcall SYS_GetSocketOption(SOCKET sock, int level, int name, LPVOID val, int* len);
  1358. // 调用系统的 ioctlsocket()
  1359. HPSOCKET_API int __stdcall SYS_IoctlSocket(SOCKET sock, long cmd, u_long* arg);
  1360. // 调用系统的 WSAIoctl()
  1361. HPSOCKET_API int __stdcall SYS_WSAIoctl(SOCKET sock, DWORD dwIoControlCode, LPVOID lpvInBuffer, DWORD cbInBuffer, LPVOID lpvOutBuffer, DWORD cbOutBuffer, LPDWORD lpcbBytesReturned);
  1362. // 设置 socket 选项:IPPROTO_TCP -> TCP_NODELAY
  1363. HPSOCKET_API int __stdcall SYS_SSO_NoDelay(SOCKET sock, BOOL bNoDelay);
  1364. // 设置 socket 选项:SOL_SOCKET -> SO_DONTLINGER
  1365. HPSOCKET_API int __stdcall SYS_SSO_DontLinger(SOCKET sock, BOOL bDont);
  1366. // 设置 socket 选项:SOL_SOCKET -> SO_LINGER
  1367. HPSOCKET_API int __stdcall SYS_SSO_Linger(SOCKET sock, USHORT l_onoff, USHORT l_linger);
  1368. // 设置 socket 选项:SOL_SOCKET -> SO_RCVBUF
  1369. HPSOCKET_API int __stdcall SYS_SSO_RecvBuffSize(SOCKET sock, int size);
  1370. // 设置 socket 选项:SOL_SOCKET -> SO_SNDBUF
  1371. HPSOCKET_API int __stdcall SYS_SSO_SendBuffSize(SOCKET sock, int size);
  1372. // 设置 socket 选项:SOL_SOCKET -> SO_REUSEADDR
  1373. HPSOCKET_API int __stdcall SYS_SSO_ReuseAddress(SOCKET sock, BOOL bReuse);
  1374. // 获取 SOCKET 本地地址信息
  1375. HPSOCKET_API BOOL __stdcall SYS_GetSocketLocalAddress(SOCKET socket, TCHAR lpszAddress[], int* piAddressLen, USHORT* pusPort);
  1376. // 获取 SOCKET 远程地址信息
  1377. HPSOCKET_API BOOL __stdcall SYS_GetSocketRemoteAddress(SOCKET socket, TCHAR lpszAddress[], int* piAddressLen, USHORT* pusPort);