Alternate e697dbe9c5997e35395fe158628dd8c5209481da
for Visual Studio 2022 and Windows 11.
読み取り中…
検索中…
一致する文字列を見つけられません
TCPPerformanceCheck.cpp
[詳解]
1
5
6#include "pch.h"
8
9using namespace PerfCheck;
10
11// --------------------------------------------------------------------
15// --------------------------------------------------------------------
16
18 :PerformanceCheck (console)
19{
20
21}
22
24{
25
26}
27
29{
30 alt::Thread threadServer;
31 alt::Thread threadProxy;
32 alt::Thread threadClient;
33
34 auto funcServer = [](LPVOID lpvParam)->DWORD { DriveTcpServer (); return 0; };
35 auto funcProxy = [](LPVOID lpvParam)->DWORD { DriveTcpProxy (); return 0; };
36 auto funcClient = [](LPVOID lpvParam)->DWORD { DriveTcpClient (); return 0; };
37
38 threadServer.Create (funcServer);
39 threadServer.Create (funcProxy);
40 threadServer.Create (funcClient);
41
42 threadClient.Wait ();
43
44 return TRUE;
45}
46
48{
49 _tprintf (_T ("DriveTcpServer() IN.\n"));
50
51 alt::TString ipAddress (MAX_PATH);
52 USHORT wPort;
53
54 DWORD dwRet = ::GetPrivateProfileString (SECTION_TCP_SERVER, KEYWORD_IP_ADDRESS, nullptr, ipAddress.Ptr (), MAX_PATH, CONFIG_FILE);
55 if (dwRet == 0)
56 {
57 _tprintf (_T ("IPAddressの指定が見つかりません。\n"));
58 return;
59 }
60
61 wPort = ::GetPrivateProfileInt (SECTION_TCP_SERVER, KEYWORD_PORT, 0, CONFIG_FILE);
62 if (wPort == 0)
63 {
64 _tprintf (_T ("Portの指定が見つかりません。\n"));
65 return;
66 }
67
68 auto object = std::make_unique<TcpServer> ();
69 __tcpServer = object.get ();
70
71 SetConsoleCtrlHandler (DriveTcpServerConsoleHandler, TRUE);
72
73 object->Init (ipAddress.Ctr (), wPort);
74 object->Start ();
75 object->Wait ();
76
77 _tprintf (_T ("DriveTcpServer() OUT.\n"));
78}
79
81{
82 _tprintf (_T ("DriveTcpClient() IN.\n"));
83
84 alt::TString ipAddress (MAX_PATH);
85 USHORT wPort;
86 int retryCount;
87 int retryInterval;
88
89 DWORD dwRet = ::GetPrivateProfileString (SECTION_TCP_CLIENT, KEYWORD_IP_ADDRESS, nullptr, ipAddress.Ptr (), MAX_PATH, CONFIG_FILE);
90 if (dwRet == 0)
91 {
92 _tprintf (_T ("Not found IPAddress.\n"));
93 return;
94 }
95
96 wPort = ::GetPrivateProfileInt (SECTION_TCP_CLIENT, KEYWORD_PORT, 0, CONFIG_FILE);
97 if (wPort == 0)
98 {
99 _tprintf (_T ("Not found Port.\n"));
100 return;
101 }
102
103 retryInterval = ::GetPrivateProfileInt (SECTION_TCP_CLIENT, KEYWORD_RETRY_INTERVAL, -1, CONFIG_FILE);
104
105 retryCount = ::GetPrivateProfileInt (SECTION_TCP_CLIENT, KEYWORD_RETRY_COUNT, -1, CONFIG_FILE);
106
107 int kickOffValue = ::GetPrivateProfileInt (SECTION_TCP_CLIENT, KEYWORD_KICK_OFF, 0, CONFIG_FILE);
108 bool kickOff = kickOffValue == 1 ? true : false;
109
110 auto object = std::make_unique<TcpClient> ();
111 __tcpClient = object.get ();
112
113 SetConsoleCtrlHandler (DriveTcpClientConsoleHandler, TRUE);
114
115 object->Init ();
116 object->Start (ipAddress.Ctr (), wPort, retryInterval, retryCount, kickOff);
117
118 _tprintf (_T ("DriveTcpClient() OUT.\n"));
119}
120
122{
123 _tprintf (_T ("DriveTcpProxy() IN.\n"));
124
125 alt::TString ServerAddress (MAX_PATH);
126 alt::TString ClientAddress (MAX_PATH);
127 USHORT wServerPort;
128 USHORT wClientPort;
129 DWORD dwRet;
130
131 dwRet = ::GetPrivateProfileString (SECTION_TCP_PROXY, KEYWORD_SERVER_ADDRESS, nullptr, ServerAddress.Ptr (), MAX_PATH, CONFIG_FILE);
132 if (dwRet == 0)
133 {
134 _tprintf (_T ("ServerAddressの指定が見つかりません。\n"));
135 return;
136 }
137
138 dwRet = ::GetPrivateProfileString (SECTION_TCP_PROXY, KEYWORD_CLIENT_ADDRESS, nullptr, ClientAddress.Ptr (), MAX_PATH, CONFIG_FILE);
139 if (dwRet == 0)
140 {
141 _tprintf (_T ("ClientAddressの指定が見つかりません。\n"));
142 return;
143 }
144
145 wServerPort = ::GetPrivateProfileInt (SECTION_TCP_PROXY, KEYWORD_SERVER_PORT, 0, CONFIG_FILE);
146 if (wServerPort == 0)
147 {
148 _tprintf (_T ("ServerPortの指定が見つかりません。\n"));
149 return;
150 }
151
152 wClientPort = ::GetPrivateProfileInt (SECTION_TCP_PROXY, KEYWORD_CLIENT_PORT, 0, CONFIG_FILE);
153 if (wClientPort == 0)
154 {
155 _tprintf (_T ("ClientPortの指定が見つかりません。\n"));
156 return;
157 }
158
159 auto object = std::make_unique<TcpProxy> ();
160 object->Init (ClientAddress.Ctr (), wClientPort, ServerAddress.Ctr (), wServerPort);
161 object->Start ();
162
163 _tprintf (_T ("DriveTcpProxy() OUT.\n"));
164}
165
166// --------------------------------------------------------------------
167
169{
170 _tprintf (_T ("DriveTcpServerConsoleHandler(%d) IN.\n"), dwType);
171
172 BOOL ret = FALSE;
173
174 switch (dwType)
175 {
176 case 0: // Ctrl + C
177 case 1: // Ctrl + Break
178 __tcpServer->Stop ();
179 ret = TRUE; // 終了させません。
180 break;
181
182 case 2: // Console Close
183 case 3: // Log off
184 case 4: // Shut down
185 ret = FALSE; // 次に委ねます。
186 break;
187 }
188
189 _tprintf (_T ("DriveTcpServerConsoleHandler(%d) OUT.\n"), dwType);
190 return ret;
191}
192
194{
195 _tprintf (_T ("DriveTcpProxyConsoleHandler(%d) IN.\n"), dwType);
196
197 BOOL ret = FALSE;
198
199 switch (dwType)
200 {
201 case 0: // Ctrl + C
202 case 1: // Ctrl + Break
203 __tcpProxy->Stop ();
204 ret = TRUE; // 終了させません。
205 break;
206
207 case 2: // Console Close
208 case 3: // Log off
209 case 4: // Shut down
210 ret = FALSE; // 次に委ねます。
211 break;
212 }
213
214 _tprintf (_T ("DriveTcpProxyConsoleHandler(%d) OUT.\n"), dwType);
215 return ret;
216}
217
219{
220 _tprintf (_T ("DriveTcpClientConsoleHandler(%d) IN.\n"), dwType);
221
222 BOOL ret = FALSE;
223
224 switch (dwType)
225 {
226 case 0: // Ctrl + C
227 case 1: // Ctrl + Break
228 __tcpClient->Stop ();
229 ret = TRUE; // 終了させません。
230 break;
231
232 case 2: // Console Close
233 case 3: // Log off
234 case 4: // Shut down
235 ret = FALSE; // 次に委ねます。
236 break;
237 }
238
239 _tprintf (_T ("DriveTcpClientConsoleHandler(%d) OUT.\n"), dwType);
240 return ret;
241}
242
243// --------------------------------------------------------------------
244
245int MakeData (BYTE byData[])
246{
247 SYSTEMTIME t;
248
249 FillMemory (byData, sizeof (byData), 'X');
250 GetLocalTime (&t);
251 wsprintfA ((LPSTR)byData, "%02d/%02d/%02d %02d:%02d:%02d.%03d_",
252 t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute,
253 t.wSecond, t.wMilliseconds);
254
255 return DATA_SIZE;
256}
257
264void DumpData (LPCTSTR lpctszFrom, int direction, BYTE byData[], int iDataLen) // 0:Down 1:Up
265{
266 LPCTSTR lpctszMsg =
267 (direction == 0 ? _T (" Down:(%04d)") : _T (" Up :(%04d)"));
268
269 _tprintf (lpctszFrom);
270 _tprintf (lpctszMsg, iDataLen);
271 for (int i = 0; i < DUMP_COUNT; i++)
272 {
273 _tprintf (_T ("%02X "), byData[i]);
274 }
275 _tprintf (_T ("|| "));
276 for (int i = 0; i < DUMP_COUNT; i++)
277 {
278 _tprintf (_T ("%c"), byData[i]);
279 }
280 _tprintf (_T ("\n"));
281}
282
283// --------------------------------------------------------------------
284
286{
287 _tprintf (_T ("ServerWorker::ServerWorker(TcpConnector*) IN.\n"));
288
289 _connector = connector;
291 _stop = false;
292
293 _tprintf (_T ("ServerWorker::ServerWorker(TcpConnector*) OUT.\n"));
294}
295
297{
298 _connector = nullptr;
299 _thread = nullptr;
300 _stop = true;
301}
302
304{
305 _tprintf (_T ("ServerWorker::~ServerWorker() IN.\n"));
306
307 _connector->Close ();
308 _thread->Close ();
309
310 delete _connector;
311 delete _thread;
312
313 _tprintf (_T ("ServerWorker::~ServerWorker() OUT.\n"));
314}
315
317{
318 _tprintf (_T ("ServerWorker::Start() CALL.\n"));
319
320 return _thread->Create ();
321}
322
324{
325 _tprintf (_T ("ServerWorker::Stop() CALL.\n"));
326
327 _stop = true;
328}
329
330DWORD ServerWorker::Invoke (LPVOID lpvParam)
331{
332 _tprintf (_T ("ServerWorker::Invoke() IN.\n"));
333
334 BYTE byData[DATA_SIZE]{ 0 };
335 int count = 0;
336
337 while (_stop == false)
338 {
339 INT recvSize = _connector->Recv (byData, sizeof (byData), 0);
340 if (recvSize <= 0)
341 {
342 _tprintf (_T ("ServerWorker::Invoke() recvSize=%d recv() failed. reason:%d\n"),
343 recvSize, _connector->GetErrNo ());
344 break;
345 }
346
347#ifdef _DUMP_DATA
348 DumpData (_T ("SVR"), 1, byData, recvSize);
349#else
350 _tprintf (_T ("%s %d\r"), _T ("SVR"), count++);
351#endif
352
353 INT sendSize = _connector->Send (byData, recvSize);
354 if (sendSize != recvSize)
355 {
356 _tprintf (_T ("send=%d sended=%d send failed. reason:%d\n"),
357 recvSize, sendSize, _connector->GetErrNo ());
358 break;
359 }
360 }
361
362 _tprintf (_T ("ServerWorker::Invoke() OUT.\n"));
363 return 0;
364}
365
366// --------------------------------------------------------------------
367
369{
370 _tprintf (_T ("TcpServer::TcpServer() IN.\n"));
371
372 _stop = false;
374 _thread = new alt::Thread ((ICallback*)this);
375
376 _tprintf (_T ("TcpServer::TcpServer() OUT.\n"));
377}
378
380{
381 _tprintf (_T ("TcpServer::~TcpServer() IN.\n"));
382
383 _thread->Close ();
384
385 delete _builder;
386 delete _thread;
387
388 _tprintf (_T ("TcpServer::~TcpServer() OUT.\n"));
389}
390
391bool TcpServer::Init (LPCTSTR lpctszIP, USHORT wPort)
392{
393 _tprintf (_T ("TcpServer::Init(%s, %d) IN.\n"), lpctszIP, wPort);
394
395 _stop = false;
396 _builder->Startup ();
397 _builder->Prepare (wPort, lpctszIP);
398
399 _tprintf (_T ("TcpServer::Init(%s, %d) OUT.\n"), lpctszIP, wPort);
400 return true;
401}
402
404{
405 _tprintf (_T ("TcpServer::Start() CALL.\n"));
406
407 return _thread->Create ();
408}
409
411{
412 _tprintf (_T ("TcpServer::Wait() CALL.\n"));
413
414 return _thread->Wait ();
415}
416
418{
419 _tprintf (_T ("TcpServer::Stop() IN.\n"));
420
421 _stop = true;
422 _builder->Close ();
423
424 for (int i = 0; i < _workerHolder.Size (); i++)
425 {
426 _workerHolder.Get (i)->Stop ();
427 }
428
429 _tprintf (_T ("TcpServer::Stop() OUT.\n"));
430}
431
432DWORD TcpServer::Invoke (LPVOID lpvParam)
433{
434 _tprintf (_T ("TcpServer::Invoke(LPVOID) IN.\n"));
435
436 while (_stop == false)
437 {
438 alt::TcpConnector* connector = _builder->Wait ();
439 if (connector)
440 {
441 _tprintf (_T (" _build->Wait() success.\n"));
442
443 connector->SetKeepAliveValue (1, 500, 300);
444
445 ServerWorker* worker = new ServerWorker (connector);
446 worker->Start ();
447 _workerHolder.Add (*worker);
448 }
449 else
450 {
451 _tprintf (_T (" _builder->Wait() failed. reason=%d\n"), _builder->GetErrNo ());
452
453 }
454 }
455
456 _tprintf (_T ("TcpServer::Invoke(LPVOID) stop detected.\n"));
457
458 Sleep (1000);
459
460 for (int i = 0; i < _workerHolder.Size (); i++)
461 {
462 _workerHolder.Get (i)->Stop ();
463 }
464
465 _tprintf (_T ("TcpServer::Invoke(LPVOID) worker->Stop() called.\n"));
466
467 Sleep (1000);
468
469 _workerHolder.Clear ();
470
471 _tprintf (_T ("TcpServer::Invoke(LPVOID) worker deleted.\n"));
472
473 _tprintf (_T ("TcpServer::Invoke(LPVOID) OUT.\n"));
474 return 0;
475}
476
477// --------------------------------------------------------------------
478
480{
481 _tprintf (_T ("TcpClient::TcpClient() IN.\n"));
482
483 _stop = false;
485 _connector = nullptr;
487
488 _tprintf (_T ("TcpClient::TcpClient() OUT.\n"));
489}
490
492{
493 _tprintf (_T ("TcpClient::~TcpClient() IN.\n"));
494
495 if (_connector) _connector->Close ();
496 _thread->Close ();
497
498 delete _connector;
499 delete _builder;
500 delete _thread;
501
502 _tprintf (_T ("TcpClient::~TcpClient() OUT.\n"));
503}
504
506{
507 _tprintf (_T ("TcpClient::Init() CALL.\n"));
508
509 return _builder->Startup () == 0 ? true : false;
510}
511
512bool TcpClient::Start (LPCTSTR lpctszIP, USHORT wPort, int retryInterval, int retryCount, bool kickOff)
513{
514 _tprintf (_T ("TcpClient::Start(IP:%s, Port:%d, RetryInterval:%d, RetryCount:%d) IN.\n"),
515 lpctszIP, wPort, retryInterval, retryCount);
516
517 _connector = _builder->CreateTcpConnector (lpctszIP, wPort, retryInterval, retryCount);
518 if (_connector)
519 {
520 _connector->SetKeepAliveValue (1, 500, 300);
521
522 if (kickOff)
523 {
524 BYTE byData[DATA_SIZE];
525 DWORD dwDataLen;
526 dwDataLen = MakeData (byData);
527
528 INT ret = _connector->Send (byData, dwDataLen);
529 if ((DWORD)ret != dwDataLen)
530 {
531 _tprintf (_T ("TcpClient::Start() Send() invalid send size (%d). reason=%d \n"), ret, _connector->GetErrNo ());
532 }
533 }
534
535 _thread->Create ();
536 _thread->Wait ();
537 }
538
539 _tprintf (_T ("TcpClient::Start(IP:%s, Port:%d, RetryInterval:%d, RetryCount:%d) OUT.\n"),
540 lpctszIP, wPort, retryInterval, retryCount);
541 return true;
542}
543
545{
546 _tprintf (_T ("TcpClient::Stop() CALL.\n"));
547 _stop = true;
548 _connector->Close ();
549}
550
551DWORD TcpClient::Invoke (LPVOID lpvParam)
552{
553 _tprintf (_T ("TcpClient::Invoke(LPVOID) IN.\n"));
554
555 BYTE byData[DATA_SIZE]{ 0 };
556
557 int count = 0;
558 while (_stop == false)
559 {
560 INT recvSize = _connector->Recv (byData, sizeof (byData), 0);
561 if (recvSize <= 0)
562 {
563 _tprintf (_T ("TcpClient::Invoke(LPVOID) recvSize=%d Socket disconnected. reason:%d\n"),
564 recvSize, _connector->GetErrNo ());
565 return -1;
566 }
567#ifdef _DUMP_DATA
568 DumpData (_T ("CLT"), 0, byData, recvSize);
569#else
570 _tprintf (_T ("%s %d\r"), _T ("CLT"), count++);
571#endif
572 int dataLen = MakeData (byData);
573
574 INT sendSize = _connector->Send (byData, dataLen);
575 if (sendSize != dataLen)
576 {
577 _tprintf (_T ("TcpClient::Invoke(LPVOID) send=%d sended=%d Invalid send size. reason:%d\n"),
578 dataLen, sendSize, _connector->GetErrNo ());
579 return -2;
580 }
581 }
582
583 _tprintf (_T ("TcpClient::Invoke(LPVOID) OUT.\n"));
584 return 0;
585}
586
587// --------------------------------------------------------------------
588
590{
591 _stop = false;
594 _connectorServer = nullptr;
595 _connectorClient = nullptr;
600}
601
603{
606
609
610 delete _driverUpstream;
611 delete _driverDownstream;
612 delete _threadUpstream;
613 delete _threadDownstream;
614 delete _builderServer;
615 delete _builderClient;
616}
617
618bool TcpProxy::Init (LPCTSTR lpctszClientIP, USHORT wClientPort, LPCTSTR lpctszServerIP, USHORT wServerPort)
619{
621 _connectorClient = _builderClient->CreateTcpConnector (lpctszClientIP, wClientPort, 3000, 5);
622
624 _builderServer->Prepare (wServerPort, lpctszServerIP);
626
631
634
635 return true;
636}
637
639{
640 HANDLE handles[2]{ INVALID_HANDLE_VALUE, INVALID_HANDLE_VALUE };
641 handles[0] = _threadUpstream->GetHandle ();
642 handles[1] = _threadDownstream->GetHandle ();
643
644 ::WaitForMultipleObjects (2, handles, FALSE, INFINITE);
645
646 return true;
647}
648
650{
651 _stop = true;
652}
653
654DWORD UpstreamDriver::Invoke (LPVOID lpvParam)
655{
656 BYTE byData[DATA_SIZE]{ 0 };
657 int count = 0;
658
659 for (;;)
660 {
661 int recvSize = _connectorClient->Recv (byData, sizeof (byData), 0);
662 if (recvSize <= 0)
663 {
664 _tprintf (_T ("Down:recvSize=%d Socket disconnected. reason:%d\n"),
665 recvSize, _connectorClient->GetErrNo ());
666 return -1;
667 }
668
669#ifdef _DUMP_DATA
670 DumpData (_T ("PXY"), 1, byData, recvSize);
671#else
672 _tprintf (_T ("%s %d\r"), _T ("PXY"), count++);
673#endif
674
675 int sendSize = _connectorServer->Send (&byData, recvSize);
676 if (sendSize != recvSize)
677 {
678 _tprintf (_T ("Down:send=%d sended=%d Invalid send size. reason:%d\n"),
679 recvSize, sendSize, _connectorServer->GetErrNo ());
680 return -2;
681 }
682 }
683
684 return 0;
685}
686
687DWORD DownstreamDriver::Invoke (LPVOID lpvParam)
688{
689 BYTE byData[DATA_SIZE]{ 0 };
690 int count = 0;
691
692 for (;;)
693 {
694 INT recvSize = _connectorServer->Recv (byData, sizeof (byData), 0);
695 if (recvSize <= 0)
696 {
697 _tprintf (_T ("Up :recvSize=%d Socket disconnected. reason:%d\n"),
698 recvSize, _connectorServer->GetErrNo ());
699 return -1;
700 }
701
702#ifdef _DUMP_DATA
703 DumpData (_T ("PXY"), 0, byData, recvSize);
704#else
705 _tprintf (_T ("%s %d\r"), _T ("PXY"), count++);
706#endif
707
708 INT sendSize = _connectorClient->Send (byData, recvSize);
709 if (sendSize != recvSize)
710 {
711 _tprintf (_T ("Up :send=%d sended=%d Invalid send size. reason:%d\n"),
712 recvSize, sendSize, _connectorClient->GetErrNo ());
713 return -2;
714 }
715 }
716
717 return 0;
718}
#define CONFIG_FILE
Definition: ConsoleDriver.h:10
BOOL DriveTcpClientConsoleHandler(DWORD dwType)
void DumpData(LPCTSTR lpctszFrom, int direction, BYTE byData[], int iDataLen)
バイナリデータをコンソールにダンプします。
TcpServer * __tcpServer
void DriveTcpServer()
TcpClient * __tcpClient
BOOL DriveTcpServerConsoleHandler(DWORD dwType)
TcpProxy * __tcpProxy
BOOL DriveTcpProxyConsoleHandler(DWORD dwType)
void DriveTcpClient()
int MakeData(BYTE byData[])
void DriveTcpProxy()
TCP性能測定用
#define DUMP_COUNT
#define KEYWORD_RETRY_INTERVAL
#define KEYWORD_KICK_OFF
#define KEYWORD_PORT
#define SECTION_TCP_SERVER
#define SECTION_TCP_CLIENT
#define KEYWORD_IP_ADDRESS
#define KEYWORD_CLIENT_PORT
#define KEYWORD_RETRY_COUNT
#define KEYWORD_SERVER_ADDRESS
#define SECTION_TCP_PROXY
#define KEYWORD_SERVER_PORT
#define DATA_SIZE
#define KEYWORD_CLIENT_ADDRESS
プリコンパイル済みヘッダー ファイルです。
TCP性能測定用(ダウンストリーム)
alt::TcpConnector * _connectorClient
void SetTcpClient(alt::TcpConnector *connector)
alt::TcpConnector * _connectorServer
virtual DWORD Invoke(LPVOID lpvParam)
コールバック関数プレースホルダ
void SetTcpServer(alt::TcpConnector *connector)
TCP性能測定用(サーバースレッド)
alt::TcpConnector * _connector
virtual DWORD Invoke(LPVOID lpvParam)
コールバック関数プレースホルダ
virtual BOOL DoAction()
処理開始
TCPPerformanceCheck(alt::Console &console)
TCP性能測定用(クライアント)
alt::TcpConnector * _connector
bool Start(LPCTSTR lpctszIP, USHORT wPort, int retryCount, int retryInterval, bool kickOff)
virtual DWORD Invoke(LPVOID lpvParam)
コールバック関数プレースホルダ
alt::SocketBuilder * _builder
TCP性能測定用(プロキシー)
alt::Thread * _threadDownstream
alt::SocketBuilder * _builderClient
UpstreamDriver * _driverUpstream
bool Init(LPCTSTR lpctszClientIP, USHORT wClientPort, LPCTSTR lpctszServerIP, USHORT wServerPort)
alt::TcpConnector * _connectorServer
alt::Thread * _threadUpstream
DownstreamDriver * _driverDownstream
alt::SocketBuilder * _builderServer
alt::TcpConnector * _connectorClient
TCP性能測定用(サーバー)
virtual DWORD Invoke(LPVOID lpvParam)
コールバック関数プレースホルダ
alt::SocketBuilder * _builder
alt::skeleton::Array< ServerWorker > _workerHolder
bool Init(LPCTSTR lpctszIP, USHORT wPort)
TCP性能測定用(アップストリーム)
alt::TcpConnector * _connectorServer
void SetTcpServer(alt::TcpConnector *connector)
alt::TcpConnector * _connectorClient
void SetTcpClient(alt::TcpConnector *connector)
virtual DWORD Invoke(LPVOID lpvParam)
コールバック関数プレースホルダ
コンソールに関するクラス
Definition: Console.h:88
HANDLE APIENTRY GetHandle() const
継承先はこの関数でハンドルを取得します。
BOOL APIENTRY Close()
使用しなくなったハンドルはこれでクローズします。
ソケットに関するWindowsAPIを集約したクラス
Definition: SocketBuilder.h:18
int APIENTRY Startup()
Windowsソケットの使用準備
BOOL APIENTRY Prepare(u_short portNo, LPCTSTR lpctszIpAddr=NULL)
TCPポートのlisten(),accept()の準備
TcpConnector *APIENTRY CreateTcpConnector(LPCTSTR lpctszIpAddr, u_short portNo, int retryInterval, int retryCount)
TcpConnectorの作成
TcpConnector *APIENTRY Wait()
TCP接続のlisten(),accept()待機関数
DWORD APIENTRY GetErrNo() const
WinSock API呼び出し時にエラーとなった時、 エラーの詳細を返します。
int APIENTRY Close()
ソケットが使用されていた場合、クローズします。
BOOL APIENTRY SetKeepAliveValue(ULONG onoff, ULONG time, ULONG interval) const
KeepAlive送出タイミング、間隔をセッション個別に設定します。
文字列に関するWindowsAPIを集約したクラス
Definition: TString.h:17
LPCTSTR APIENTRY Ctr() const
内部で確保している文字列ポインタを取得します。
Definition: TString.h:46
LPTSTR APIENTRY Ptr() const
内部で確保している文字列ポインタを取得します。
Definition: TString.h:42
TCP通信に関するWindowsAPIを集約したクラス
Definition: TcpConnector.h:17
INT APIENTRY Recv(LPVOID lpvBuf, DWORD dwSize, BOOL isBlocking=TRUE)
TCP受信処理
INT APIENTRY Send(LPVOID lpvBuf, DWORD dwSize) const
TCP送信処理
スレッドに関するWindowsAPIを集約したクラス
Definition: Thread.h:43
BOOL APIENTRY Create(PTHREAD_START_ROUTINE function=NULL, LPVOID lpvParam=NULL, DWORD dwCreationFlag=0)
スレッドを作成します。
Definition: Thread.cpp:24
DWORD APIENTRY Wait(DWORD dwWaitTime=INFINITE) const
シグナル状態になるとブロックを解除します。
Threadクラスのスレッド実行関数を設定します。