Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

C# - .NET Core 2.0 이하의 Unix Domain Socket 사용 시 System.IndexOutOfRangeException 오류

이전 글의 마지막에서,

C# - .NET Core Unix Domain Socket 사용 예제
; https://www.sysnet.pe.kr/2/0/11963

.NET Core 2.0 이하의 경우 다음에 공개된 UnixEndPoint 소스 코드를 사용하면 된다고 했는데요.

How to connect to a Unix Domain Socket in .NET Core in C#
; https://stackoverflow.com/questions/40195290/how-to-connect-to-a-unix-domain-socket-in-net-core-in-c-sharp

그 당시에는 사용할 일이 없다가 최근에 한 번 써봤는데 Accept 시에 ^^; 다음과 같은 예외가 발생합니다.

using (Socket clntSocket = _serverSocket.Accept())

/*
System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at System.Net.Internals.SocketAddress.get_Item(Int32 offset)
   at System.Net.Sockets.IPEndPointExtensions.GetNetSocketAddress(SocketAddress address)
   at System.Net.Sockets.IPEndPointExtensions.Create(EndPoint thisObj, SocketAddress socketAddress)
   at System.Net.Sockets.Socket.Accept()
   at ConsoleApp1.Program.serverSockFunc(Object obj) in c:\temp\ConsoleApp1\ConsoleApp1\Program.cs:line 72
*/

에러를 없애려면 해당 소스 코드에서 2군데를 수정해야 합니다.

public UnixEndPoint(string filename)
{
    //if (filename == null)
    //    throw new ArgumentNullException("filename");

    //if (filename == "")
    //    throw new ArgumentException("Cannot be empty.", "filename");
    this.filename = filename;
}

public override SocketAddress Serialize()
{
    byte[] bytes = Encoding.Default.GetBytes(filename);
    SocketAddress sa = new SocketAddress(AddressFamily, 0x6c + 2);
    // sa [0] -> family low byte, sa [1] -> family high byte
    for (int i = 0; i < bytes.Length; i++)
        sa[2 + i] = bytes[i];

    //NULL suffix for non-abstract path
    sa[2 + bytes.Length] = 0;

    return sa;
}

이 중에서 0x6c가 나온 이유를 검색해 보니 다음과 같이 나오는군요. ^^

Why is the maximal path length allowed for unix-sockets on linux 108?
; https://stackoverflow.com/questions/34829600/why-is-the-maximal-path-length-allowed-for-unix-sockets-on-linux-108

수정한 전체 소스 코드는 다음의 github에 올려 두었습니다.

DotNetSamples/NetCore/UnixDomainSocketSample
; https://github.com/stjeong/DotNetSamples/tree/master/NetCore/UnixDomainSocketSample




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 8/1/2019]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 166  167  168  169  170  171  172  173  174  175  [176]  177  178  179  180  ...
NoWriterDateCnt.TitleFile(s)
638정성태1/3/200926315.NET Framework: 119. WPF - 의존 속성 정의에서 XamlParseException 발생하는 예 [2]
637정성태1/1/200928605기타: 26. 2008년 인기 순위 정리
636정성태12/31/200823864.NET Framework: 118. 2진 검색을 이용한 리스트 정렬 삽입파일 다운로드1
635정성태12/29/200826535오류 유형: 66. 파일 암호화 오류 - Recovery policy configured for this system contains invalid recovery certificate
634정성태12/29/200840843기타: 25. 가상 키보드 관련 정리 [4]
633정성태12/20/200826256기타: 24. RMClock for x64 [2]
632정성태12/19/200834737기타: 23. D820 - 배터리 없이 바이오스 업데이트 방법 [2]파일 다운로드1
631정성태12/10/200843810VC++: 36. Detours 라이브러리를 이용한 Win32 API - Sleep 호출 가로채기 [3]
630정성태12/9/200824550.NET Framework: 117. WPF - TreeView에서 항목이 펼쳐질 때 Cursors.Wait 사용파일 다운로드1
629정성태12/7/200833911.NET Framework: 116. 소켓 연결 시간 제한
628정성태12/6/200822317.NET Framework: 115. Marshal 타입 관련 2가지 자원 해제 메서드파일 다운로드1
627정성태12/6/200824946VS.NET IDE: 58. VS.NET IDE 팁 - 커서 위치 이동 [1]
626정성태12/6/200825097오류 유형: 65. TF53018: The application tier XXXXXXX is attempting to connect to a data tier with an incompatible version
625정성태12/6/200825271오류 유형: 64. TFS 2008 SP1 설치 - MsiApplyMultiplePatches returned 0x643
624정성태12/5/200826169.NET Framework: 114. WPF 이벤트에 속한 핸들러 확인 [2]파일 다운로드1
623정성태12/4/200830638디버깅 기술: 22. VS.NET SP1 + .NET Framework 소스 코드 디버깅 [2]파일 다운로드1
622정성태12/1/200832899오류 유형: 63. WPF - XamlParseException 대응 방법 [2]
621정성태11/30/200824990Team Foundation Server: 27. TeamBuild + VDPROJ 셋업 프로젝트 [1]
620정성태11/30/200823831디버깅 기술: 21. 올바른 이벤트 예외 정보 출력
619정성태11/30/200823941디버깅 기술: 20. 예외 처리를 방해하는 WPF Modal 대화창파일 다운로드1
618정성태11/29/200824278.NET Framework: 113. 이벤트에 속한 이벤트 핸들러 확인파일 다운로드1
617정성태11/26/200830517.NET Framework: 112. How to Interop DISPPARAMS [2]파일 다운로드2
616정성태11/26/200823802디버깅 기술: 19. C++/CLI - F11 디버깅 시의 변수 초기화파일 다운로드1
615정성태11/9/200833370.NET Framework: 111. WPF - Window, UserControl 클래스 상속 [1]
614정성태11/9/200833294.NET Framework: 110. WPF - 전역 예외 처리 [4]파일 다운로드1
613정성태11/8/200822827.NET Framework: 109. WPF - SystemColors 색상표파일 다운로드1
... 166  167  168  169  170  171  172  173  174  175  [176]  177  178  179  180  ...