Linux 에서 특정 port를 listen 불가능 하게 될 때.

yykim의 이미지

종종 겪는 일입니다만,
간혹가다 linux에서 특정 포트를 listen할 수 없습니다.
물론 그 포트는 아파치에 필요한 부분의 모듈을 만들어서 다른 것을
테스트한 상태고요, 그 데몬이 이상해져서 완전 종료후,
netstat -na 나 socklist 등으로 찾아도 해당되는 port가 없을 때,
다시 실행하면 make_sock 을 할 수 없다고 나옵니다.

혹시나 하는 마음에, 직접 listen하는 프로그램을 짜봐도 같은 에러만
나오고 있습니다.

1~2달에 한번 정도 발생하는데, 이 문제를 아시는 분 도움을 부탁드리
겠습니다.....

ajoupark의 이미지

무슨 증상인지 잘 이해는 안되는데..
socket option 중에 SO_REUSEADDR 을 한번 보시지요...
http://www.ibrado.com/sock-faq/#faq44

/** 주워 들은 것도 내 것이다. 많이 주워 들어야지*/

yykim의 이미지

ajoupark wrote:
무슨 증상인지 잘 이해는 안되는데..
socket option 중에 SO_REUSEADDR 을 한번 보시지요...
http://www.ibrado.com/sock-faq/#faq44

^^ 물론 REUSE 중입니다... 해당되는 포트는 죽어도 Listen이 안되더군요
리붓을 하면 증상이 사라집니다... _-_.
dmesg나 /var/log/message secure 등에 특이한 로그도 없습니다.

verena의 이미지

윗분의 말에 덧붙여서...

윗분이 resueaddr을 사용하라고 한 의미를 설명해 드리겠습니다.

소켓이 bind한 address/port 패어에 대해서 reuseaddr을 사용하는것은 해당 소켓이 이 주소를 반환하고 나면 즉시 사용할 수 있는 기능도 포함되어 있습니다.

이와 관련된 사이트로는

http://www.sandelman.ottawa.on.ca/linux-ipsec/html/1999/04/msg00021.html

해당 사이트에 dead socket의 time out에 대한 내용이 나타나 있습니다. time out시간은 보통 시간단위라고 하는군요...

verena의 이미지

아 그리고 대부분의 소켓을 사용하는 어플리케이션이나 데몬들은 reuseaddr을 사용하지 않는다고 하더군요...

아무래도 제가 쓴글들은 도움이 되지 않을듯하네요... ㅡㅜ

yykim의 이미지

verena wrote:
윗분의 말에 덧붙여서...

윗분이 resueaddr을 사용하라고 한 의미를 설명해 드리겠습니다.

소켓이 bind한 address/port 패어에 대해서 reuseaddr을 사용하는것은 해당 소켓이 이 주소를 반환하고 나면 즉시 사용할 수 있는 기능도 포함되어 있습니다.

^^ 커널상의 문제인 것 같다는 것은 netstat 등에서 TIME_WAIT도 없는 깨끗한
상황이라는 뜻입니다.
혹시나 이런 상황을 겪으신 분이 있나 해서 여쭈어본거고요, reuseaddr 옵션을 준 테스트도 다 해보았습니다.. ^^.......

xfmulder의 이미지

make_sock 은 어떤건지 ...

또, 실패후 errno 가 어떤 값으로 되던가요?

내 자식들도 나처럼 !!

pynoos의 이미지

lsof -i

로 해도 발견이 안되던가요?

yykim의 이미지

lsof로는 체크를 못해봤고요,
Already Port Open 이 나는군요...
잦은건 아닙니다.. 2~3달에 한건 정도 발생을 하니...

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.