도와주세요!!
지금 컴퓨터와 보드 간 tcp/ip 통신 중입니다.
그런데 보드 쪽에 포트만 다르고 ip값만 같은 여러개의 서버를 두려고 했습니다만
문제가 생겨서 질문 드립니다.
서버가 연결되면 xPrintf( "Client connect enable passed (socket:%d) \r\n", client_socket); 에 의해
[client_socket = accept( server_socket, (struct sockaddr*)&client_addr, &client_addr_size );]
메세지가 나옵니다. 그런데 이게 원래라면 1... 접속 중인 서버가 1개 이므로 1이라고 나와야 하는데 계속 3만 나오더군요...
이러면 의심되는 건 제 컴퓨터에서 사용된 소켓 접속 프로그램이 안 닫혀서 계속 열려있다던가 아니면
보드에서 계속 열고 있다고 생각하는데 어떻게 해결해야 다시 초기화를 시키고 할 수 있을까요?
또 제가 부트로더 역시 TCP/IP 소켓으로 받아서 사용하고 있습니다.
이더넷을 100mbps를 써볼려고 그러는데 지금 속도가 10mbps로 날려야만 동작을 하더군요.
(다른 소켓 프로그램은 프로토콜을 주고받는데 정상적으로 문제 없이 동작하는데 로더만 그러더군요.)
10mbps에서 100mbps로 속도를 바꿀 경우 소켓을 사용해야 하는데 주의해야 할 것이 있는지 궁금합니다.
마지막으로
소켓 플래그(recv 혹은 send에 쓰이는 옵션)으로 보이는데 이걸 어떤 때에 사용해야 효율적으로 사용할수 있는지
예를 들어주실수 있을까요? MSG_DONTWAIT 는 이해했는데 다른 옵션들은 잘 이해가 안됩니다.
/*
* Option flags per-socket.
*/
#define SO_DEBUG 0x0001 /* turn on debugging info recording */
#define SO_ACCEPTCONN 0x0002 /* socket has had listen() */
#define SO_REUSEADDR 0x0004 /* allow local address reuse */
#define SO_KEEPALIVE 0x0008 /* keep connections alive */
#define SO_DONTROUTE 0x0010 /* just use interface addresses */
#define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */
#define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */
#define SO_LINGER 0x0080 /* linger on close if data present */
#define SO_OOBINLINE 0x0100 /* leave received OOB data in line */
#define SO_REUSEPORT 0x0200 /* allow local address & port reuse */
매번 이 홈페이지에서 많은걸 배우고 갑니다.
추위 조심하시구요. 즐거운 하루 되시길 바랍니다.