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

비밀번호

댓글 작성자
 




... 91  92  93  94  95  [96]  97  98  99  100  101  102  103  104  105  ...
NoWriterDateCnt.TitleFile(s)
11535정성태6/7/201823445.NET Framework: 759. C# - System.Span<T> 성능 [1]
11534정성태6/6/201829219.NET Framework: 758. C# 7.2 - Span<T> [6]
11533정성태6/5/201831788.NET Framework: 757. 포인터 형 매개 변수를 갖는 C++ DLL의 함수를 C#에서 호출하는 방법파일 다운로드1
11532정성태6/5/201821764.NET Framework: 756. JSON의 escape sequence 문자 처리 방식
11531정성태6/4/201826057오류 유형: 468. JSON.parse가 허용하지 않는 문자 [9]
11530정성태5/31/201826147.NET Framework: 755. C# 7.2 - 스택에만 생성할 수 있는 값 타입 지원 - "ref struct" [2]파일 다운로드1
11529정성태5/23/201823434.NET Framework: 754. 닷넷의 관리 포인터(Managed Pointer)와 System.TypedReference [6]파일 다운로드1
11528정성태5/17/201822977.NET Framework: 753. C# 7.2 - 3항 연산자에 ref 지원(conditional ref operator) [1]
11527정성태5/17/201820600오류 유형: 467. RDP 로그인 에러 - This could be due to CredSSP encryption oracle remediation.
11526정성태5/16/201820718.NET Framework: 752. C# 7.2 - 메서드의 반환값 및 로컬 변수에 ref readonly 기능 추가파일 다운로드1
11525정성태5/16/201824743.NET Framework: 751. C# 7.2 - 메서드의 매개 변수에 in 변경자 추가 [3]파일 다운로드1
11524정성태5/15/201823671.NET Framework: 750. C# 7.2 - readonly 구조체 [5]파일 다운로드1
11523정성태5/15/201821485.NET Framework: 749. C# - 값 형식의 readonly 인스턴스에 대한 메서드 호출 시 defensive copy 발생 [1]파일 다운로드1
11522정성태5/15/201819232개발 환경 구성: 378. Azure - VM 진단 설정 화면의 "This subscription is not registered with the Microsoft.Insights resource provider."
11521정성태5/15/201818237개발 환경 구성: 377. Azure - 원하는 성능 데이터로 모니터링 대시보드 구성
11520정성태5/12/201819760.NET Framework: 748. C# 7.1 - 참조 어셈블리(Ref Assemblies)
11519정성태5/12/201821461개발 환경 구성: 376. ASP.NET Web Application 프로젝트의 FileSystem 배포(Publish) 시 Before/After Task 설정 방법 [1]
11518정성태5/10/201819775.NET Framework: 747. C# 7.0에서도 부분적으로 가능해진 "타입 추론을 통한 튜플의 변수명 자동 지정"
11517정성태5/10/201818808.NET Framework: 746. Azure runbook 예제 - 6시간 동안 수행 중인 VM을 중지 [1]파일 다운로드1
11516정성태5/9/201819012.NET Framework: 745. Azure runbook을 PowerShell 또는 C# 코드로 실행하는 방법파일 다운로드1
11515정성태5/9/201821407.NET Framework: 744. C# 6 - Expression bodied function [1]
11514정성태5/3/201819511오류 유형: 466. Bitvise - Error in component session/transport/kexHandler [2]
11513정성태5/3/201826393.NET Framework: 743. C# 언어의 공변성과 반공변성 [9]파일 다운로드2
11512정성태5/2/201818516개발 환경 구성: 375. Azure runbook 실행 시 "Errors", "All Logs"에 오류 메시지가 출력되는 경우
11511정성태5/2/201820668개발 환경 구성: 374. Azure - Runbook 기능 소개
11510정성태4/30/201821776.NET Framework: 742. windbg로 확인하는 Finalizer를 가진 객체의 GC 과정파일 다운로드1
... 91  92  93  94  95  [96]  97  98  99  100  101  102  103  104  105  ...