IP받아오는 시점과 Connection과의 관계.

익명 사용자의 이미지

어떤 네트웍 관련 프로그램을 만들었습니다.

이 프로그램은 매번 주기적으로 connection만을 취합니다.

gethostent / socket / bind / connect 등이 매번 호출하게 됩니다.
connection후 끊게 됩니다. close.

대략 이런 단순 기능인데

처음 부팅할때 이것이 실행되어 쭈욱 돌고 돌아서 영원히 돌아야 합니다.

Network 설정은 dhcp입니다.

중요한문제가 발생했습니다.

/sbin/dhcpcd 를 이용해 IP를 받기 전에 이 프로그램이 먼저 떠버린 겁니다.

그래도 /sbin/dhcpd가 IP를 받아오면 정상적으로 프로그램이 돌거라는

지극히 편안한 생각을 했는데

어쩔때는 이것이 '참' 이고 어쩔대는 이것이 '거짓' 이 됩니다.

IP받기전에 실행되면 당연히 connection이 되지 않습니다.

근데 이것이 IP를 받아온후도 계속 connection이 되지 않는 것입니다.

bind는 됩니다.

궁굼한것은 저 같은 경험을 하신분이 있으냐는 것과 

그렇다면 이것은 어떤것이 문제이고 어떻게 해결해야 하는지를 묻고 십습니다.

참고로 lo/eth0/eth1/wlan0/dummy0 가 있습니다.

여기서 eth1/wlan0/dummy0 는 DOWN 되어 있고 0.0.0.0으로 되어 있습니다.

eth0의 초기상태는 192.168.0.xxx 입니다.

nainu의 이미지

dhcpcd 가 동작하고 나서 아이피를 받아오고 말고가 여기서는 중요한 문제가 아닌 것 같고, dhcpcd 가 동작한 뒤에 만드신 프로그램을 실행하게 하는 것은 어렵지 않은 문제입니다.

부팅중에 어떤 프로그램이 먼저 실행되고 어떤 프로그램이 나중에 실행되는지에 대해서는 레드햇이나 데비안 등등 배포판에 관련된 개별적인 내용이므로 검색을 더 해보심이 좋을 듯 합니다.

익명 사용자의 이미지

중요한것은 /sbin/dhcpcd가 IP를 받아오는 시간이 길거나 짧거나
그냥 dhcp 받기까지 기다리게 되면 부팅시간이 길어집니다.
회피하는것보다는 원인을 알고 싶습니다.

nainu의 이미지

minzkn wrote:
중요한것은 /sbin/dhcpcd가 IP를 받아오는 시간이 길거나 짧거나
그냥 dhcp 받기까지 기다리게 되면 부팅시간이 길어집니다.
회피하는것보다는 원인을 알고 싶습니다.

원하시는 답변이 아니겠지만, ntpd나 fetchmaild 등등 네트웍이 기본적으로 붙었을 경우에 부팅시부터 제대로 동작하는 데몬들이 있습니다. 기본적으로는 dhcp 를 백그라운드가 아니라 작업을 완료한 후에 다른 작업으로 들어가는 것으로 알고 있는데... 한번 확인해보시기 바랍니다.
저는 네트웍을 잡고 그 다음 작업을 진행하는 것이 일반적이라고 생각하므로, 그것이 회피가 아니라 정석이라고 봅니다.

MasterQ의 이미지

그렇다면

$ cat run_this
#!/bin/sh
/sbin/dhcpd
/bin/program

이것을 run_this & 이런식으로 초기스크립트에서 돌려주면 되지 않을까요?

그러면 program은 dhcpd가 확실히 return됐을때 실행이 될테지만

이것과 Indepent한 프로그램들은 돌것 같은데요.

이건 회피하는건가요?

아니면 dhcpd 가 pid 파일을 확실히 리턴받을때 쓰는게 확실하면..

그것을 확인해서 실행하는것도 조심스럽게 생각해봅니다.

익명 사용자의 이미지

이런경우를 생각해보죠.
물론 이런경우는 아주 지저분한 경우지만....

누군가 선을 잠시 뽑았습니다. (허브를 딴데 잠깐 쓴다고....)

dhdpcd에서는 timeout이 지나서 IP를 없애버립니다.

다시 선을 꼽았습니다.

이런경우 그러면 프로그램을 반드시 다시 띄워줘야 할까요?

뭐 이런경우를 꼭 집어서 예기하는것은 아니지만

그래도 프로그램은 돌아야 되는게 만드는 사람의 입장에서는

충분히 고려해볼 필요가 있고 노력해봐야 하지 않을까요?

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.