인사말, 특정 IP/포트 조합에서 소켓을 '바인딩 해제'하는 방법을 찾으려고합니다. 내 의사 코드는 다음과 같습니다 :이 시점에서소켓을 기존 IP/포트 조합으로 다시 바인딩 할 수 없습니다.
ClassA a = new ClassA(); //(class A instantiates socket and binds it to 127.0.0.1:4567)
//do something
//...much later, a has been garbage-collected away.
ClassA aa = new ClassA(); //crash here.
은, 닷넷 내가 이미 기술적으로 사실이다 127.0.0.1:4567에 바인딩 소켓을 가지고 저를 알려줍니다. 그러나 ClassA의 소멸자에 어떤 코드를 넣든 상관없이 또는 소켓에서 호출 한 함수 (아무리 .Close() 및 .Disconnect (true)를 시도해도) 소켓은 자랑스럽게 127.0.0.1:4567에 바인딩됩니다. 소켓을 un-bind 할 수 있으려면 어떻게해야합니까?
EDIT : 전 가비지 수집에만 의존하지 않습니다. 나는 a.Close() 또는 a.Disconnect()를 호출하고 Aa를 인스턴스화했다. 이것은 문제를 해결하지 못합니다.
편집 : 나는 또한으로 IDisposable을 구현하려했지만, 코드 내가 (이 방법은 단순히 .Close 및 .Disconnect을 시도하는 것처럼 이전 시도의 상당했다) 메소드를 호출하지 않고 거기에 도착하지 않았다. 나에게 직접 전화 해보고 다시 연락하자.
EDIT (편집 많은, 사과) '는이'범위를 잃는 곳에서 구현으로 IDisposable 및 호출 a.Dispose()이 작동하지 않습니다 - 내 폐기 구현이 여전히 .Close 또는 .Disconnect 중 하나를 호출 할 수있다 (true) (또는 .Shutdown (Both))하지만 소켓의 바인딩을 해제하지 않습니다.
도움이 될 것입니다.
실제로 이전 소켓이 여전히 포트에 바인딩되어 있음을 의미하지는 않습니까? http://msdn.microsoft.com/en-us/library/cc319473.aspx ReuseAddress 이미 사용중인 주소에 바인딩을 허용하는 데 사용하는 값입니다. * * 사용중 *이 아니 * * – VolkerK
VolkerK; 내 생각 엔 당신이 맞다. 여기서주의해야하며 이전 인스턴스가 실제로 사라 졌는지 확인해야합니다. 기본적으로 버클리 소켓은 포트/소켓 조합을 해제하기 전에 5 분 동안 대기합니다. 이것이 내가 작동하는 유일한 해결 방법입니다. – AlexeyMK