W6100 Multicast 통신 시 수신 port와 송신 port를 다르게 설정할 수 있나요?

w6100 ic에서 multicast 통신을 구현중입니다.

1개의 소켓을 열어 12345 port번호를 통해서는 데이터를 수신하면
수신한 데이터를 동일한 multicast ip의 매번 다른 port에 전송하고 싶습니다.
해당 동작 구현 가능한가요?

위의 동작 구현을 위해 sendto() 함수를 사용해 sn_dportr 레지스터에 등록된 값을 바꿔보았는데
해당 레시스터를 read하면 변하지 않고 이전에 socket() 함수를 사용하여 등록한 port번호가 유지됩니다.
이유를 알 수 있을까요?

안녕하세요.

  1. 1개의 소켓을 열어 12345 port번호를 통해서는 데이터를 수신하면
    수신한 데이터를 동일한 multicast ip의 매번 다른 port에 전송하고 싶습니다.
    해당 동작 구현 가능한가요?
    → udp소켓을 열어 실행하면 구현 가능할 것 같습니다.

  2. 위의 동작 구현을 위해 sendto() 함수를 사용해 sn_dportr 레지스터에 등록된 값을 바꿔보았는데
    해당 레시스터를 read하면 변하지 않고 이전에 socket() 함수를 사용하여 등록한 port번호가 유지됩니다.
    이유를 알 수 있을까요?
    ->sendto() 함수를 통해 레지스터 값을 변경할 수 없는 걸로 알고 있습니다. 레지스터 값을 변경하시려면 setSn_DPORTR() 함수를 통해 변경하셔야합니다.

감사합니다

안녕하세요.
답변해 주신 내용에 대해 추가 질문이 생겨 댓글 남깁니다.

  1. 1번 답변의 말씀은 소켓을 총 2개 생성하여 수신용과 송신용 소켓을 구분하여 사용하는 방법을 말씀하시는 건가요?

  2. wiznet에서 제공하는 Libary의 sendto() 함수에서 setSn_DPORTR() 함수가 포함되어 있어 해당 설정을 실행하는데 getSn_DPORTR()함수를 통해 Read하여 확인해보면 변경되어 있지 않습니다.
    소켓 생성시에는 해당 함수동작이 적용되는데 sendto() 함수에서는 적용되지 않네요ㅠㅠ…

안녕하세요.

  1. 1번 답변의 말씀은 소켓을 총 2개 생성하여 수신용과 송신용 소켓을 구분하여 사용하는 방법을 말씀하시는 건가요?
    → IP Address와 Port는 하나의 소켓으로 열어야 하기 때문에 수신용과 송신용으로 나눌 수 없습니다.

  2. wiznet에서 제공하는 Libary의 sendto() 함수에서 setSn_DPORTR() 함수가 포함되어 있어 해당 설정을 실행하는데 getSn_DPORTR()함수를 통해 Read하여 확인해보면 변경되어 있지 않습니다.
    소켓 생성시에는 해당 함수동작이 적용되는데 sendto() 함수에서는 적용되지 않네요ㅠㅠ…
    → DPORT0과 DPORT1 레지스터에 아래와 같이 설정해보시면 될 것 같습니다 .
    image
    감사합니다

반복 질문하여 죄송합니다만…
그럼 1개의 소켓을 생성시킨 상태에서 단순히 PORT 설정값을 WRITE하는 레지스터에 데이터를 변경하여 해당 소켓에 대한 PORT 변경이 가능한건가요? PORT를 변경하기 위한 특별한 시퀀스가 없는건가요?

네 생성 뒤엔 포트 설정을 바꾸어도 사용하기 어렵습니다.
소켓을 Close하고 다시 열어야할 것 같습니다.

감사합니다.