[질문] Socket 통신 관련하여 질문 드립니다.

freemckang의 이미지

TCP/UDP 소켓 통신을 위해 select를 통한 서버를 구성하였습니다.

문제는, connect까지 성립되고, 물리적으로 이더넷 케이블을 뽑았을 때, select가 error를 리턴하지 못한다는 것입니다.

제 생각으로는 물리적으로 이더넷 케이블을 뽑게 되면 인터럽트가 발생하고, 해당 ISR이 해당 netdevice의 queue에 물려있는 모든 작업들에 fail 처리를 해줄 것으로 기대했었는데... 그렇지 않은 것인가요??

아니면 제 환경이 이상한 것인지... 조언 부탁드립니다 :)

spbrain의 이미지

우선 하드웨어적으로 이더넷 케이블을 뽑는다고 에러가 뜨진 않습니다.
예를 들어 로컬에서 TCP/IP 통신시에 이더넷 케이블 뽑으면 에러나면 안되잖아요?^^;
물론 디바이스 드라이버에서 그런 처리까지 다 해주면 고맙지만..

우선 UDP는 단방향이니 이런 상황은 처리가 안되고요
TCP가 문제인데 예전에 이 문제 때문에 상당히 고생을 했는데
운영체제마다 좀 다르긴 하지만 TCP인 경우에는 에러처리시에 10분정도 걸립니다.
커널에서 설정하는 부분이 있는것 같기도 한데 기억은 안나네요.
소켓 옵션에 KEEPALIVE옵션이 있지만 이것또한 그것과는 거리가 있는듯 하고요.
따라서 이런 문제로 인하여 고스트 문제또한 발생을 합니다.
따라서 이런 문제를 해결하려면

1. UDP 소켓을 이용하여 KEEPALIVE메시지를 주고 받아서 처리한다.(동기식 TCP방식에서) KEEPALIVE메시지가 해당 클라이언트로 부터 일정시간 도착하지 않으면 Retry후 소캣을 강제 종료한다.
2. 비동기 TCP방식이라면 TCP에서 KEEPALIVE메시지를 만들어서 주고 받는다. 처리는 1번과 같습니다.

이 두가지 방법으로 해결했던것 같습니다. 참고하시고요. 더 좋은 방법이 있으신 고수분들 좋은 방법좀 알려주세요~~

freemckang의 이미지

이런...

예를 들어 로컬에서 TCP/IP 통신시에 이더넷 케이블 뽑으면 에러나면 안되잖아요?^^;

이거 생각 못했군요.. ㅎㅎ 너무 아랫쪽으로만 생각하다보니... 조언 감사드립니다~~ :)

句日新, 日新 日新 又日新.

句日新, 日新 日新 又日新.

terzeron의 이미지

select()를 쓴다는 것은 여러 descriptor로부터 데이터를 읽어들일 때 뭔가 준비가 될 때까지 기다리겠다는 의미입니다.
물리적인 연결 단절이 select()에 영향을 주는 게 좀 이상하죠?

연결이 유효한지, read/write가 잘 되는지는 select와는 다른 방법으로 점검해야 할 것 같습니다.

댓글 달기

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