[TCP/IP] 클라이언트 connect 에러시 종료 안하고 재접속하면 안되나요?

-@Naver의 이미지

안녕하세요!

학교에서 작업을 하면서 회사 FTP 서버에 접속해서 주기적으로 파일을 받아오는 프로그램을 작성을 했습니다.!

단순 소켓 프로그래밍으로는 접속을 성공해서 RFC에서 알아낸 FTP 명령어를 서버 쪽으로 보내주게 됩니다.

FTP는 Passive모드로 파일을 다운받아오기 때문에 해당 경로나 파일 정보를 받아오기 위해서는 받아올 때마다 PASV 명령어를 보내줘서 데이터용 ip, port번호를 받아옵니다.

근데 제가 원하는 최종 경로는 년도, 월, 일이 포함되어있어서 계속 바뀌기 때문에 최종 경로를 알아내기 위해 주기적으로 PASV LIST 명령어를 보내주어서 ROOT 경로부터 가장 최근 년월일 인 폴더로 경로 설정을 해줘야 합니다.

중간 경로도 LIST 명령어로 받아오는데 이 중간 경로 정보도 데이터이기 때문에 LIST 명령어를 보낼 때마다 connect 함수를 사용하게 됩니다.

서버 쪽에 생성된 최근 경로를 예측해서 최종 파일을 받아오게 되면 하나의 주기가 끝이납니다.

문제는 이걸 주기적으로 FTP 서버에 접속을 하는 프로그램이라 가끔 가다가 이 LIST 명령어를 보내기 위해 connect 함수를 사용했을 때 connect 에러가 뜨고 프로그램이 죽어버립니다...

이게 프로그램이 자주 죽으면 안되는 거라, connect 에러가 뜨면 프로그램 종료 처리를 하지 않고 소켓 종료 후 바로 재접속을 시도하게 되면 문제가 생기는 건가요..?

그렇게 해보았는데 프로그램이 종료는 안하지만 멈춰버려서요..ㅠㅠ

고수님들 도와주십쇼...!

라스코니의 이미지

바로 재접속을 하지 마시고 한 5 ~ 10초 딜레이를 준 다음 재접속 해 보세요. 때로 OS에서 다 사용한 소켓을 바로 회수하지 않아서 그럴수도 있습니다.
소켓 종료 후 소켓 생성은 하셨겠죠?

-@Naver의 이미지

네! 소켓 종료 후 소켓 생성으로 다시 시작을 합니다!! 5~10초만 딜레이를 주면 안정성을 보장(?)까지는 아니더라도 프로그램이 죽는 경우는 많이 주는 거겠죠? 감사합니다!!!!ㅠㅠㅠㅠ

wfellow의 이미지

서버와의 네트웍 상태 변이를 잘 봐야겠지요. 한번 디버깅을 해 보세요. gracefuly shutdown이 잘 되어서 CLOSE_WAIT 상태로 남지는 않았는지를요. 확실한 이유를 알기 위해 디버깅을 하는 겁니다. 그냥 몇초 딜레이 줘서 해결하지 마시고요..

-----[꼬릿말 절취선 시작]-----
삽질전에 먼저 구글신께 기도하자.
-----[꼬릿말 절취선 끝]-----

-@Naver의 이미지

디버깅을 해주어도 종종 브레이크 되지 않고 프로그램이 그대로 멈춰버리는 경우가 있더라구요,, 이제까지 계속 디버깅을 해주면서 시도했었는데 디버깅 중 어디에서 프로그램이 멈췄는지 알 수 없는 경우도 있었습니다. 그 문제를 해결하기 위해 다시 여러가지 방법을 검색중입니다..

댓글 달기

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