Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
SetSockOpt이라는 API를 사용하고 싶은데요...
델파이에서 기본적으로 선언되어 있지 않은 API인가 봅니다..
어떻게 해야 사용할 수 있는지..
고수님들 부탁드립니다..
2
COMMENTS
구창민
•
2000.07.28 13:06
장식원 wrote:
> 델파이에서 기본적으로 선언되어 있지 않은 API인가 봅니다..
> 어떻게 해야 사용할 수 있는지..
> 고수님들 부탁드립니다..
uses WinSock;
//선언부..
function setsockopt(s: TSocket; level, optname: Integer; optval: PChar;
optlen: Integer): Integer; stdcall;
//사용예
아래는 영대님이 예전에 socket 핸들의 blocking 없이
강제로 종료하는 루틴을 작성하신 겁니다.
보시고 참고하세요~
{parameter로 지정한 소켓을 강제로 즉시 닫는다(블록킹 해제됨)}
procedure TMainForm.DOclosesocket(var socket_id: TSocket);
var
lingerinfo : Tlinger;
begin
// 블록킹(blocking)된 소켓함수가 있다면 이를 취소시킨다
// 어느 경우에나 WSACancelBlockingCall() 이 호출되면 Block이 진행 중이던
// 원래의 함수는 에러로 리턴하고, 이 때 에러 코드는 WSAEINTR이 된다
// 이식성이 높은 응용 프로그램을 개발하기 위하여 WSACancelBlockingCall() 후에
// closesocket() 이외의 다른 소켓 함수 호출은 하지 않는 것이 좋다.
if socket_id <> INVALID_SOCKET then
if WSAISBlocking then // 어떤 소켓 함수가 Block 상태에 있는 가를 검사
begin
WSACancelBlockingCall;
DOAddLine(HOST_M+'Cancelled blocking call');
end;
lingerinfo.l_onoff := 1; {소켓을 강제로 즉시 종료}
lingerinfo.l_linger := 0; {시간지연 없음}
// setsockopt() 는 지정된 소켓의 형태, 상태와 관계 없이 소켓 옵션을 소켓에
// 지정한다
SetSockopt(socket_id, SOL_SOCKET, SO_LINGER, Pchar(@lingerinfo), sizeof(lingerinfo));
CloseSocket(socket_id);
socket_id := INVALID_SOCKET;
end;
즐거운 프로그래밍 하시길~
0
0
삭제
수정
댓글
장식원
•
2000.07.29 00:40
답변해 주셔서 감사합니다.
그런데 초보가 이해하기에는 너무 어려운 소스군요...
제 나름대로 수정하기에는 제 실력이 너무 모자랍니다..
번거로우시겠지만 좀 자세히 설명해 주실 수는 없으신지요...
부탁 드리겠습니다.
구창민 wrote:
> 장식원 wrote:
> > 델파이에서 기본적으로 선언되어 있지 않은 API인가 봅니다..
> > 어떻게 해야 사용할 수 있는지..
> > 고수님들 부탁드립니다..
>
> uses WinSock;
>
> //선언부..
> function setsockopt(s: TSocket; level, optname: Integer; optval: PChar;
> optlen: Integer): Integer; stdcall;
>
> //사용예
> 아래는 영대님이 예전에 socket 핸들의 blocking 없이
> 강제로 종료하는 루틴을 작성하신 겁니다.
>
> 보시고 참고하세요~
>
> {parameter로 지정한 소켓을 강제로 즉시 닫는다(블록킹 해제됨)}
> procedure TMainForm.DOclosesocket(var socket_id: TSocket);
> var
> lingerinfo : Tlinger;
> begin
> // 블록킹(blocking)된 소켓함수가 있다면 이를 취소시킨다
> // 어느 경우에나 WSACancelBlockingCall() 이 호출되면 Block이 진행 중이던
> // 원래의 함수는 에러로 리턴하고, 이 때 에러 코드는 WSAEINTR이 된다
> // 이식성이 높은 응용 프로그램을 개발하기 위하여 WSACancelBlockingCall() 후에
> // closesocket() 이외의 다른 소켓 함수 호출은 하지 않는 것이 좋다.
> if socket_id <> INVALID_SOCKET then
> if WSAISBlocking then // 어떤 소켓 함수가 Block 상태에 있는 가를 검사
> begin
> WSACancelBlockingCall;
> DOAddLine(HOST_M+'Cancelled blocking call');
> end;
>
> lingerinfo.l_onoff := 1; {소켓을 강제로 즉시 종료}
> lingerinfo.l_linger := 0; {시간지연 없음}
> // setsockopt() 는 지정된 소켓의 형태, 상태와 관계 없이 소켓 옵션을 소켓에
> // 지정한다
> SetSockopt(socket_id, SOL_SOCKET, SO_LINGER, Pchar(@lingerinfo), sizeof(lingerinfo));
>
> CloseSocket(socket_id);
> socket_id := INVALID_SOCKET;
> end;
>
>
> 즐거운 프로그래밍 하시길~
0
0
삭제
수정
댓글
(NOTICE) You must be
logged in
to comment on this post.
최종륜
2000.07.28 08:42
0
COMMENTS
/
0
LIKES
양식작성기를 올린 (김종은 : blueje@channeli.net )연락처?
임규완
•
2000.07.28 08:23
1
COMMENTS
/
0
LIKES
최용일님 너무 감사합니다. 하나만 더 물어볼께요.
최용일
•
2000.07.28 21:20
안녕하세요. 최용일입니다. 보내주신 소스느 저에게 없는 컴포넌트를 사용하셔서 제대로 확인은 못했지...
castle road
•
2000.07.28 08:05
1
COMMENTS
/
0
LIKES
findfirst(), findnext()에서....
유수
•
2000.07.28 11:44
정상적으로 작동한다면 읽은 파일 또 읽는 경우는 없으니깐여, 괜찮으시다면 문제가 되는 부분의 소스...
초보 100
•
2000.07.28 08:05
3
COMMENTS
/
0
LIKES
시스템 디렉토리의 위치는여?
초보 100
•
2000.07.29 01:56
초보 100 wrote: 많은 도움이 되었구여..... 좋은 하루되시길 바랍니다.
4master
•
2000.07.28 09:29
초보 100 wrote: > 사용자들이 윈도우즈를 설치할때 반드시 C:windows에 설치하는게 아니자나여? > 그래...
parkisu
•
2000.07.28 09:38
4master wrote: > 초보 100 wrote: > > 사용자들이 윈도우즈를 설치할때 반드시 C:windows에 설치하는게 ...
space4
•
2000.07.28 07:08
1
COMMENTS
/
0
LIKES
뭐가 뭔지 모르겠네요.. 델파이 모른다니까? 억지로시켜놓고.
구창민
•
2000.07.28 12:47
space4 wrote: > GetMem StrPCopy FindWindow 이것은 또 뭐꼬? > > 에이 짜증나 사표낼까?? ...
space4
2000.07.28 07:06
0
COMMENTS
/
0
LIKES
기본적인 질문.....
space4
•
2000.07.28 07:02
1
COMMENTS
/
0
LIKES
variant 은 무엇입니까?
4master
•
2000.07.28 09:27
space4 wrote: > variant 라는 변수에 대해서 자세히 알고 싶은데.. > 예제와 함께면 더 좋고요... > ...
빈거울
•
2000.07.28 07:01
2
COMMENTS
/
0
LIKES
키 조합(BackSpace구현)..
Mr.Q
•
2000.07.28 10:07
빈거울 wrote: > 백스페이스로는 삭제가 안되는 것이 있어 delete키로 백스페이스 기능을 > 구현하려고 ...
parkisu
•
2000.07.28 09:32
빈거울 wrote: > 백스페이스로는 삭제가 안되는 것이 있어 delete키로 백스페이스 기능을 > 구현하려고 ...
장식원
•
2000.07.28 05:41
2
COMMENTS
/
0
LIKES
SetSockOpt이라는 API를 사용하고 싶은데요...
델파이에서 기본적으로 선언되어 있지 않은 API인가 봅니다.. 어떻게 해야 사용할 수 있는지.. 고수님들 부탁드립니다..
구창민
•
2000.07.28 13:06
장식원 wrote: > 델파이에서 기본적으로 선언되어 있지 않은 API인가 봅니다.. > 어떻게 해야 사용할 수 ...
장식원
•
2000.07.29 00:40
답변해 주셔서 감사합니다. 그런데 초보가 이해하기에는 너무 어려운 소스군요... 제 나름대로 수정하기...
델피
2000.07.28 05:38
0
COMMENTS
/
0
LIKES
분류먼저 해주시길 부탁드립니다.
김재억
2000.07.28 05:06
0
COMMENTS
/
0
LIKES
ASP Comp에서 TStringList, TList 사용법
수연이
2000.07.28 05:03
0
COMMENTS
/
0
LIKES
변수가 배열인 C++ Dll을 델파이로 불러오려면?
혀기
•
2000.07.28 04:17
1
COMMENTS
/
0
LIKES
유닛이름 변경후..
parkisu
•
2000.07.28 09:34
혀기 wrote: > 폼이름 , 유닛이름 등 모두 변경을 하고 나니 > 컴파일 시에 자꾸 에러가 나오네요.. > ...
최병희
2000.07.28 04:06
0
COMMENTS
/
0
LIKES
InstallShield에 대한 질문입니다..
유인희
•
2000.07.28 04:15
1
COMMENTS
/
0
LIKES
초보입니다...왜 에러가 ......
타락천사
•
2000.07.28 05:30
안녕하세여.. 타락임다..^^ 가령 Query를 쓴다면... Query1.Edit; DBEdit.Text := '이때 입력된다';...
칠돌이
2000.07.28 03:42
0
COMMENTS
/
0
LIKES
Copy, Paste에서...
김원석
•
2000.07.28 03:19
1
COMMENTS
/
0
LIKES
시간되면 윈도우 자동종료 ..그런데 ~흑!
yoonty
•
2000.07.28 03:42
김원석 wrote: > > 아래 함수를 이용해서 시간이 되면 컴퓨터가 자동으로 꺼지도록 해 > 보았습니...
황은주
•
2000.07.28 02:50
1
COMMENTS
/
0
LIKES
Re: ^^ 에러가 떴는데... 처리할 방법을 몰라서요.
김만성
•
2000.07.31 19:52
하하 ^^ 왜 웃냐고요... 문제가 해결이 되었거든요... 알고보니 어이가 없어서요.. 헤헤 ^^; ...
김만업
•
2000.07.28 02:07
1
COMMENTS
/
0
LIKES
value out of bounds
BENGI
•
2001.03.02 05:54
김만업 wrote: > translate error, value out of bounds란 에러에 대해서 설명 좀 부탁합니다. > 그리고 ...
jody
2000.07.28 01:48
0
COMMENTS
/
0
LIKES
EInOutError with message I/O error 122
장식원
2000/07/28 05:41
Views
580
Likes
0
Comments
2
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
> 델파이에서 기본적으로 선언되어 있지 않은 API인가 봅니다..
> 어떻게 해야 사용할 수 있는지..
> 고수님들 부탁드립니다..
uses WinSock;
//선언부..
function setsockopt(s: TSocket; level, optname: Integer; optval: PChar;
optlen: Integer): Integer; stdcall;
//사용예
아래는 영대님이 예전에 socket 핸들의 blocking 없이
강제로 종료하는 루틴을 작성하신 겁니다.
보시고 참고하세요~
{parameter로 지정한 소켓을 강제로 즉시 닫는다(블록킹 해제됨)}
procedure TMainForm.DOclosesocket(var socket_id: TSocket);
var
lingerinfo : Tlinger;
begin
// 블록킹(blocking)된 소켓함수가 있다면 이를 취소시킨다
// 어느 경우에나 WSACancelBlockingCall() 이 호출되면 Block이 진행 중이던
// 원래의 함수는 에러로 리턴하고, 이 때 에러 코드는 WSAEINTR이 된다
// 이식성이 높은 응용 프로그램을 개발하기 위하여 WSACancelBlockingCall() 후에
// closesocket() 이외의 다른 소켓 함수 호출은 하지 않는 것이 좋다.
if socket_id <> INVALID_SOCKET then
if WSAISBlocking then // 어떤 소켓 함수가 Block 상태에 있는 가를 검사
begin
WSACancelBlockingCall;
DOAddLine(HOST_M+'Cancelled blocking call');
end;
lingerinfo.l_onoff := 1; {소켓을 강제로 즉시 종료}
lingerinfo.l_linger := 0; {시간지연 없음}
// setsockopt() 는 지정된 소켓의 형태, 상태와 관계 없이 소켓 옵션을 소켓에
// 지정한다
SetSockopt(socket_id, SOL_SOCKET, SO_LINGER, Pchar(@lingerinfo), sizeof(lingerinfo));
CloseSocket(socket_id);
socket_id := INVALID_SOCKET;
end;
즐거운 프로그래밍 하시길~