안녕하세요.
먼저 간단한 답변 드린 후에, 자세한 답변에 필요한 내용을 질문하겠습니다.
-
socket 이라는 함수는 소켓을 open하는 기능입니다. socket에는 port정보가 필요합니다.
DHCP서버에 IP할당 요청을 하려면 디바이스도 소켓이 필요하기 때문에 이러한 과정을 거치는 것입니다.
그 소켓을 여는데 사용하는 정보 중 하나가 포트번호입니다.
하지만, DHCP는 사용하는 포트가 정해져 있습니다.
DHCP Server는 67번 포트를 사용하며, Client(장비)는 68번 포트를 사용합니다.
따라서 실제 소스라면, 68번으로 변경해주셔야 합니다.
1번 답변과 관련하여, 일반적으로 알려지거나 예약된 포트 정보에 대해서는 아래 링크를 참조하시면 되겠습니다.
[url]https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers[/url]
추가로, Client 포트번호를 고정해서 사용하는 이유에 대해서는 아래 링크를 참조하시면 되겠습니다.
[url]Why does DHCP have fixed client and server port numbers - Server Fault -
체크하신 Hex값으로는 0x01입니다. 즉 Sn_CR 레지스터 상태가 OPEN(0x01)이 되어야 합니다.
이는 Static과 DHCP와는 상관없이 동일합니다.
다만, 그 외의 레지스터 상태는 TCP/UDP 와 Server/Client에 따라 구분됩니다. -
코드 내용은 연결 시도 시 TimeOut이 발생한 경우에 실행됩니다. 이러한 이유로 표현하신대로 타임아웃으로 빠지는 것입니다.
질문자님의 상황을 빗대어 표현하면,
장비(client) - 서버(server) 연결을 시도할 때, client로부터 요청한 내용에 대한 server의 응답을 전혀 받지 못한 경우에 발생합니다.
client로부터 server로 연결신호가 닿지 않거나 server가 응답을 해주지 않는 경우가 되겠습니다.
2,3번에 대해서 자세한 내용은 아래 링크의 Sn_CR과 Sn_IR 레지스터를 참조하시면 되겠습니다.
[url]http://wizwiki.net/wiki/lib/exe/fetch.php?media=products:w5500:w5500_ds_v107e_160224.pdf[/url]
추가적으로, "기본적으로 제공받은 sample 소스"가 어떤 소스인지 알려주시거나 링크 주시면, 보다 정확하고 빠른 답변이 가능하겠습니다.
업무에 도움이 되셨길 바랍니다.
감사합니다.