C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[76232] Re:[질문] WSAIoctl()을 사용하기 위한 환경 구성?
수달 [heaven2] 905 읽음    2022-01-06 18:12
#include <mstcpip.h>
#include <winsock2.h>
#pragma comment(lib, "Ws2_32.lib")     // 이 놈이 빠졌네요.. 4시간 삽질..하이고~~!!

수달 님이 쓰신 글 :
: 환경: C++ Builder XE5  (RADStudio XE5)
:
: TServerSocket을 이용하여 여러 단말 Unit(H/W장비)과 통신 구현 중입니다.
: 단말에서는 서버와 통신이 되지 않으면 Ethernet Module을 껐다가 켜기 때문에(Delay Time 1분),
: TServerSocket에서 Socket의 종료를 알수 없습니다.(Event가 발생하지 않음. 3-handshake-close 등의 소켓 종료가 안되는 상황)
: 그래서, Socket의 KeepAlive를 이용하여 Dead Socket을 강제적으로 정리하려고 하는데요..
: 아래와 같은 코드로 Socket의 옵션을 조정하려 합니다.
:
: 그런데, 아래와 같은 에러 코드가 보입니다.
:
:
[ilink32 Error] Error: Unresolved external 'WSAIoctl' referenced from D:\RMEASUREAWAC\TEST\BUILDER\TEST01\WIN32\DEBUG\UNITMAIN.OBJ

:
: 제가 작업한 것은 아래와 같습니다.
:
: // Tools Option에 Library Path Add : ws2_32.lib 있는 폴더..Library Path에 추가
: Tools => Options => Delphi Options => Library => Library Path 추가
:   - Selected Platform : 32-bit Windows
:   - C:\Program Files (x86)\Embarcadero\RAD Studio\12.0\lib\win32\release
:   - C:\Program Files (x86)\Embarcadero\RAD Studio\12.0\lib\win32\release\psdk
:
: Tools => Options => C++ Options => Paths and Directories => Library Path 에 추가
:   - Selected Platform : 32-bit Windows
:   - C:\Program Files (x86)\Embarcadero\RAD Studio\12.0\lib\win32\release
:   - C:\Program Files (x86)\Embarcadero\RAD Studio\12.0\lib\win32\release\psdk
:
: // Project Option 에 header file, library가 있는 곳 지정.
: Project => Options 에서 두 개의 Path에 Winsock2 관련 폴더 추가
: Include Path에 winsock2.h 이 있는 위치 추가
:   - C:\Program Files (x86)\Embarcadero\RAD Studio\12.0\include\windows\sdk
: Libary Path에 ws2_32.lib 이 있는 위치 추가
:   - C:\Program Files (x86)\Embarcadero\RAD Studio\12.0\lib\win32\release
:   - C:\Program Files (x86)\Embarcadero\RAD Studio\12.0\lib\win32\release\psdk
:
: 소스 코드는 아래와 같습니다.
:
:
: #include 
: #include 
: 
: ....
: 
: //---------------------------------------------------------------------------
: void __fastcall TForm1::ServerSocket1Accept(TObject *Sender, TCustomWinSocket *Socket)
: {
:   tcp_keepalive tcpkl;
:   tcpkl.onoff = 1;
:   tcpkl.keepalivetime = 20 * 1000;	// 20초마다 keepalive신호를 보내겠다. (Default 2시간)
:   tcpkl.keepaliveinterval = 1 * 1000; // keepalive 신호를 보내고 응답이 없으면 1초마다 재전송하겠다.(ms tcp 10회 재시도-고정)
: 
:   DWORD dwRet = 0;
:   int iResult = 0;
:   iResult = WSAIoctl(Socket->SocketHandle, SIO_KEEPALIVE_VALS, &tcpkl, sizeof(tcp_keepalive), 0, 0, &dwRet, NULL, NULL);
:   if ( iResult == 0 ) {
: 	ShowMessage("WSAloctl .. ok..");
:   }
: }
: 

:
: 뭐가 잘못된 것인 지 고수님들의 도움을 요청합니다.
: 감사합니다.
:

+ -

관련 글 리스트
76231 [질문] WSAIoctl()을 사용하기 위한 환경 구성? 수달 966 2022/01/06
76232     Re:[질문] WSAIoctl()을 사용하기 위한 환경 구성? 수달 905 2022/01/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.