select에서는..

익명 사용자의 이미지

안녕하세요..

서버 프로그램에서 클라이언트의 비정상 종료시 처리하기 위해서
select를 이용해봤습니다. 근데.
서버에 접속한 후 컴퓨터의 reset버튼을 눌렀을 경우
서버에서는 제대로 처리하지 못합니다. (아무런 반응이 없습니다.)

서버에서는 이렇게 했습니다.

#include `~~

fd_set read_fds;
int total;
int CSock[10];

FD_ZERO(&read_fds);

while(1)
{
for(i = 0; i < total; i++)
FD_SET(CSock[i], &read_fds);
FD_SET(server_sock, &read_fds);

n = select(maxdlf, &read_fds, NULL, NULL, (struct timeval *)0);

if(FD_ISSET(server_sock, &read_fds)
{
//accept
total++;
CSock[total] = client_sock;
}
else
{
if((read(~~~) == 0)
{
//disconnect
}
else
{
//처리...
}
}
}

select로는 해결할 수 없는건가요? 좋은 방법 있다면 좀 알려주세요..
부탁드립니다.

익명 사용자의 이미지

select 호출시 일정한 타임아웃을 주지않고 무한정 대기 상태로 호출하시
면 클라이언트에서 컴퓨터를 강제로 종료할때에 처리하기가 까다롭습니
다..그래서 select 호출시 일정한 타임을 주고 그 시간동안 아무런 패킷
이 들어오지 않으면 클라이언트의 비정상 종료로 처리하시면 됩니다..

익명 사용자의 이미지

답변 감사드립니다.
근데.. 음.. 염치없는 질문이지만..
클라이언트 연결이 언제 끊어질지 모르거든요..
하나의 클라이언트만 붙는것두 아니구.. 여러개가 붙어요..
접속이 끊어진 시간을 계산해서 디비에 저장해야 하는데요..
접속된 상태에서는.. 아무런 일도 하지 않습니다
그냥 접속만 된 상태.....

ㅜㅡ 넘 죄송합니다..
제가 님의 답변을 잘 이해하지 못한건지... 아님.. ^^;;;

다시한번 부탁드립니다..

익명 사용자의 이미지

tcp/ip에서 커넥션이 끊기는 경우 한쪽에서 모르는 경우도 있습니다.. 자
세한건 tcp/ip쪽을 보시구요..

꺙.. 가능하다면 먼가 커넥션을 확인해 볼 수 있는 코드를 넣어보는
건 어떨까요? select에 타임 기능을 이용하든지 알람을 이용하든지 해서
적당한 시간마다 한번씩 클라이언트들의 커넥션을 주욱 확인해
보는겁니다..

아무튼 님께 맞는 적당한 방법을 찾아보심이... v--;

익명 사용자의 이미지

아래 어떠분이 답변하셨듯이 방법은 여러가지가 있을수 있습니다..
상황에 따라서 적당한 방법을 선택하시면 됩니다..
참고로 제가 예전에 사용했던 방법은 각 클라이언트마다 타이밍을
관리하는 변수를 만들고 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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.