[재질문]libipq사용시 "No buffer space available" 에러! 재질문 있습니다
안녕하세요...저번에 동일한 제목으로 질문을 하였습니다.
그래서 bushi님께서 답변도 달아주셨는데요.. 다시한번 감사드립니다.
문제점이 있습니다.
우선 cat /proc/net/ip_queue 를 하면 ip_queue에 대한
정보가 출력되야 맞는데요, 제가 사용하는 시스템에는
해당 폴더에 ip_queue가 없습니다.
/proc/sys/net/ipv4에도 없구요...
그래서 선뜻 확인도 안해보고 sysctl을 사용하여
세팅을 바꾸기가 망설여지네요..시스템 검색을 해보아도
ip_queue에 대한건 헤더나 소스밖에 안나오네요
ip_queue 위치가 시스템마다 많이 틀린가요?
혹은 제가 필요한 패키지를 설치를 안한건가요?
아예 나오지를 않으니 답답하네요..
bushi님의 설명을 듣고 ip_queue를 늘여보려고 해외사이트를 찾아보니 위에 bushi님이 설명하셨듯이 버퍼사이즈를 시스템차원에서
늘려주는 방법과 실제 프로그램 소스에서
setsockopt에서 SO_RVCBUF를 사용하여 버퍼사이즈를
늘려줄수 있다는데, 사실 setsockopt에 대하여 감이 안잡힙니다
ipq_read전에 삽입하여넣어야 하는지?그리고 파일디스크립터를
임의로 만들어사용해야 하는지?(libipq.h에 보면 핸들 구조체에
fd라는 변수가 있기는 하더군요..이것을 이용해야하는지?)
궁금합니다.
구체적인 방법을 알고 싶습니다.(queue길이 늘여주기와 소스상에서 수정하는 방법둘다요..=_=욕심이 너무 많나요?)
bushi님 및 이 방면에 조애가 깊은 고수님들의 많은 지도 부탁드립니다.
흐음.. 웹에서 잘
흐음.. 웹에서 잘 찾아보면 나옵니다.. 일단, 기본 queue default setting 값은 1024인 걸로 알고 있습니다. 이 queue size는 테스트시에는 괜찮지만, 어떠한 목적을 위해서 사용하기에는 턱없이 부족합니다. 말씀을 드리면, queue length는 /proc/sys/net/ipv4/ip_queue_maxlen 이 부분을 원하시는 queue 크기로 설정하시면 됩니다.
그리고 위에 말씀하신, error size는 위 설정만으로 해결되는 것은 아닙니다. /proc/sys/net/core/rmem_default, rmem_max, wmem_default, wmem_max 이 4개의 파일에 해당 원하는 receive buffer size를 넣으시면 됩니다. 이건 maxqueue와도 상관이 있으니, 잘 고려하시면 될 거 같습니다.
음.. 그리고 프로그램상에서 늘리는 방법은 setsockopt( fd, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size) ); 이렇게만 설정해주시면 됩니다. 해당 option에 대해서는 man page를 찾아보세요.
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
답변에 감사드립니다
위에 제가 질문에도 이미 말씀드렸듯이 해당 폴더에는 ip_queue로 시작되는 파일이 없습니다
따라서 /proc/sys/net/ipv4/ip_queue_maxlen 이란 항목역시 없습니다.
궁금했던건 왜 없는지가 궁금했습니다. ip_queue ,ip_queue_maxlen 모두 없는데요 제가 있어야 할 패키지를
설치하지 않은건가요?
파일시스템 전체를 검색해봤지만 없었습니다. 우선 프로그램 내부상으로 늘려보고 다시 질문드리겠습니다.
답변 정말 감사합니다.^-^ 좋은하루 되세요
음.. 해당 파일은
음.. 해당 파일은 package가 아닙니다. 일단 proc filesystem은 kernel에서 사용하는 가상 파일시스템이며, proc을 사용해서 시스템의 정보 및 kernel의 동작에 관련된 설정을 제공해주는 interface입니다. 즉 현재 ip_queue, ip_queue_maxlen이 없다면, ip_queue module이 올라가지 않아서 ip_queue module에 proc filesystem에 ip_queue에 관련된 interface를 만들지 않아서 그런거지요. kernel configuration에서 ip_queue에 대한 설정이 되어 있는지 확인하시고, kernel에 builtin 되어 있다면, 당연히 있어야 하는데 없는거 보면, builtin은 아닌거 같네요. 그럼 모듈이거나 현재 설정이 안되어 있을텐데, module로 설정되어 있다면, modprobe ip_queue로 일단 module loading을 먼저 하시면 됩니다.
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
댓글 달기