2012-02-07 2 views
5

나는 이런 식으로 뭔가 할 경우Unsureness()

byte[] buffer = new byte[1024]; 
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
IPEndPoint remote = new IPEndPoint(IPAddress.Parse("12.34.56.78"), 1337); 
sock.ReceiveFrom(buffer, ref remote); 

는 ReceiveFrom 방법 만 전달되는 엔드 포인트에서 패킷을받을 것인가를? 다음 문서 상태 : 비 연결 프로토콜로

는 ReceiveFrom이 로컬 네트워크 버퍼에 수신 된 첫 번째 큐에 데이터 그램을 읽습니다.

전달 된 EndPoint는 패킷의 출처 인 호스트의 EndPoint 저장에만 사용되며 ReceiveFrom 메서드의 동작에는 전혀 영향을 미치지 않습니까? 그렇다면 왜 "out"대신에 "ref"로 전달되어야합니까?

+0

:-) 심지어 미래의 프로토콜은 몇 가지 테스트를 수행 한 후 내가 전달 된 엔드 포인트의 값은 문제가되지 않는다는 것을 알아 냈어요. 저장 용으로 만 사용됩니다. 그러나 나는 아직도 그것이 참조로서 전달되어야하는 이유를 모른다. – haiyyu

+0

EndPoint가 구조체가 아닌가요? – Joshua

+0

네 말이 맞아. 그것은 저의 경우에 차이를 만들어서는 안됩니다. – haiyyu

답변

1

ReceiveFrom 방법 recvfrom 윈속 기능 관리 래퍼 참고있다. 이 함수는 선택적이고 호출자 측에 할당/할당 해제 된 sockaddr 구조에 대한 포인터를 취합니다. 그걸 염두에두고

은 내가 EndPointref로 전달하지 out 이유 몇 가지 이론이 있습니다

  1. 의 WinSock와 일관성이 EndPoint 호출자에 의해 할당하기 때문에 ref에 의해 전달되는 기능 어쩌면하십시오.
  2. 어쩌면 EndPoint이 선택적 매개 변수로 간주 될 수도 있지만 구현되지 않았습니다 (null이 아니어야 함).
  3. 일부 프로토콜의 경우 처리 방향이 EndPoint 매개 변수를 통과했을 수 있습니다. 어쩌면