2013-08-07 2 views
0

소켓을 통해 정기적으로 UDP 메시지를 보내려고합니다.길거나 짧은 UDP 소켓이 하나 이상 있습니까?

하나의 소켓을 사용하거나 각 메시지마다 소켓을 다시 만들고 그 후에 닫는 것이 더 좋습니까?

UDP는 상태 비 저장이므로 아무것도 변경하지 않습니까?

답변

1

소켓을 통해 무엇이든받을 것으로 예상되는 경우 수신 할 것으로 예상되는 전체 시간 동안 존재하는 것이 더 좋습니다.

답장을받지 않고 여러 개의 메시지를 보내려는 경우 이미 설계상의 실수가 있지만, 그 목적을 위해 UDP 소켓을 열고 닫는 데는 왜 좋은 이유가없는 것 같습니다. 반드시 소켓을 필요한만큼 길게 유지하는 것이 더 합리적입니까?

+0

통계를 보내는 라우터 일 뿐이므로 설계상의 실수는 아닙니다. 문제는 실제로 무한히 긴 소켓을 갖는 것이 더 센스가 되는가 아니면 짧은 소켓을 만드는 것이 더 나은가? – Shaac

+0

주위를 돌자. '무한히 긴 소켓'을 갖고 있지 않은 것이 실제로 의미가 있습니까? 전송마다 새 소켓을 만드시겠습니까? 아마도 실패할까요? 소켓을 이미 가지고 있다면 실패하지 않을 수 있습니까? – EJP

1

UDP는 패킷 지향 프로토콜이기 때문에 열거 나 닫는 "연결"이 없습니다. 특정 주소로 많은 메시지를 보내려면 UDP 소켓에서 connect으로 전화 한 다음 sendtorecvfrom 대신 통신하려면 sendrecv을 사용하십시오. 이렇게하면 모든 함수 호출에서 데이터를 전송할 주소를 지정할 필요가 없지만 연결이 설정되었다고 할 수는 없습니다. 그것은 하나 개의 소켓을 생성하고 재사용하거나 새로운 매번 작성하는 것이 좋습니다 여부를

그래서, 당신의 프로그래밍 스타일에 더 의존한다 : 당신은 소켓을 많이 만들고이를 사용하지 않고 장기간 보관하는 경우, 결국 소켓이 다 떨어질 수 있습니다. 그런 다음 운영 체제에 새 소켓을 자주 만들도록 요청하면 빈번한 루프에서 성능 병목 현상이 발생할 수 있습니다.

+0

그래서 소켓 생성 프로세스는 send 함수에서 사용할 매개 변수를 저장하는 중일뿐입니다. – Shaac

+0

나는 내 용어가 혼란스러워했다. OS와 대화 할 수 있도록 fd를 얻기 위해'socket'을 호출해야한다. 'connect'를 호출하면 매개 변수 만 저장됩니다. – Joni

관련 문제