Microsoft MVP성태의 닷넷 이야기
[답변]: 외부 자료 - SocketOptionName.KeepAlive 사용법 [링크 복사], [링크+제목 복사]
조회: 3032
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
부모글 보이기/감추기

Setting SOL_KEEPALIVE_VALS from managed socket class
; http://blogs.msdn.com/lcleeton/archive/2006/09/15/754932.aspx


A question came me today about if it was possible to do in managed code what the native winsock WSAIoctl(SOL_KEEPALIVE_VALS) function does. The answer is yes.

First, if you simply want to turn on keep-alives you can use this simple method in the Socket class:

Socket s;
// first you need to Connect, then...
s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);

Of course to turn it back off just change the last param to false.

However if you want to specify the timing parameters for keep-alive you can use the Socket.IOControl method. Here's a function that essentially duplicates what you can do with the native WSAIoctl function:

static void SetKeepAlive(Socket s, bool on, uint time, uint interval) {
/* the native structure
struct tcp_keepalive {
ULONG onoff;
ULONG keepalivetime;
ULONG keepaliveinterval;
};
*/

// marshal the equivalent of the native structure into a byte array
uint dummy = 0;
byte[] inOptionValues = new byte[Marshal.SizeOf(dummy) * 3];
BitConverter.GetBytes((uint)(on ? 1 : 0)).CopyTo(inOptionValues, 0);
BitConverter.GetBytes((uint)time).CopyTo(inOptionValues, Marshal.SizeOf(dummy));
BitConverter.GetBytes((uint)interval).CopyTo(inOptionValues, Marshal.SizeOf(dummy) * 2);
// of course there are other ways to marshal up this byte array, this is just one way

// call WSAIoctl via IOControl
int ignore = s.IOControl(IOControlCode.KeepAliveValues, inOptionValues, null);

}








[최초 등록일: ]
[최종 수정일: 9/15/2006]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

비밀번호

댓글 작성자
 




1  2  3  4  [5] 
NoWriterDateCnt.TitleFile(s)
30정성태5/5/20062085[질문] SocketOptionName.KeepAlive 사용법
31정성태5/5/20063602    답변글 [답변]: SocketOptionName.KeepAlive 사용법
32정성태5/5/20062114        답변글 [추가]: SocketOptionName.KeepAlive 사용법
127정성태9/15/20063032    답변글 [답변]: 외부 자료 - SocketOptionName.KeepAlive 사용법
28정성태5/5/20061560[질문] [assembly: AssemblyCompany("MyCompany")] 에서의 "MyCompany" 를 변경하는 방법
29정성태5/5/20061595    답변글 [답변]: [assembly: AssemblyCompany("MyCompany")] 에서의 "MyCompany" 를 변경하는 방법
26정성태5/5/20064662[질문] 웹 파일 이어받기에 관한 질문
27정성태5/5/20061905    답변글 [답변]: 웹 파일 이어받기에 관한 질문
24정성태5/5/20061734[질문] CodeFile 속성 에러 어떻게 처리해야 하나요?
25정성태5/5/20061745    답변글 [답변]: CodeFile 속성 에러 어떻게 처리해야 하나요?
22정성태5/5/20061802[질문] microsoft.windowsmediaservices.dll 참조가 안 걸립니다.
23정성태5/5/20061746    답변글 [답변]: microsoft.windowsmediaservices.dll 참조가 안 걸립니다.
20정성태5/5/20061543[질문] NDoc 사용하시는 분들 공백 ? 로 나오는 거 어떻게 처리하십니까?
21정성태5/5/20061456    답변글 [답변]: NDoc 사용하시는 분들 공백 ? 로 나오는 거 어떻게 처리하십니까?
18정성태5/5/20061865[질문] 웹서버와 파일서버가 분리되어 있을경우
19정성태5/5/20061741    답변글 [답변]: 웹서버와 파일서버가 분리되어 있을경우
16정성태5/5/20062038[질문] ToString(), (string) 캐스팅, Convert.ToString 의 차이.
17정성태5/5/20063366    답변글 [답변]: ToString(), (string) 캐스팅, Convert.ToString 의 차이.
14정성태5/5/20061799[질문] C# 으로 만든 COM+ 에서 함수 오버로딩 질문입니다.
15정성태5/5/20062019    답변글 [답변]: C# 으로 만든 COM+ 에서 함수 오버로딩 질문입니다.
12정성태5/5/20061408[질문] 새 웹프로젝트 추가시.. 디폴트로 포트 번호 없이 하려면...?
13정성태5/5/20061466    답변글 [답변]: 새 웹프로젝트 추가시.. 디폴트로 포트 번호 없이 하려면...?
10정성태5/5/20062537[질문] axWebBrowser3.Navigate 에서 파라미터를 POST로 보내는 방법
11정성태5/5/20061689    답변글 [답변]: axWebBrowser3.Navigate 에서 파라미터를 POST로 보내는 방법
8정성태5/5/20061663[질문] InitializeComponent 함수내부에 속성값에 대한 코드가 추가되는 문제
9정성태5/5/20061576    답변글 [답변]: InitializeComponent 함수내부에 속성값에 대한 코드가 추가되는 문제
1  2  3  4  [5]