select() 함수의 timeout 에 대해 다시 질문 드립니다. 제발 꼭

black0328의 이미지

tv.tv_sec = 60;
tv.tv_usec=0;


do{
  						
   FD_ZERO(&rfds);
   FD_SET(client_accept,&rfds); 


   if((ss=select(client_accept+1,&rfds,(fd_set *)0,(fd_set *)0,&tv))<1){
							close_socket();
  }else{ //select() >=1 인 경우
       if(FD_ISSET(client_accept,&rfds))
	{
                   recvByte += recv(client_accept, fileMessage+recvByte, MAX_PACKET_SIZE-recvByte, 0);
	}
     }
}while(recvByte !=MAX_PACKET_SIZE)

******************************************
이상 제가 구현한 코드입니다.
recv 를 받기 시작하고 60초가 지나면 무조건 타임아웃이 걸립니다. 제가 구현 하고 싶은 기능은 recv 가 아무런 것도 받지 않고 60초가 지나면 타임아웃이 걸리게 하려고 하는데....계속 데이타는 recv 하는데 타임아웃이 걸립니다. 무엇이 잘못된것일까요?
crimsoncream의 이미지

man에 return 값이 0일 때 타임아웃이라고 명시돼 있으니 그걸 사용하시는게 좋을 것 같습니다. 무엇보다 타임아웃이 걸렸을때 file descriptor set들이 어떤 상태를 가지는지가 표준화 돼 있을 것 같지는 않습니다.
그리고 linux에서는 문제가 생길 소지가 있는 부분이 linux에서는 i/o 작업이 발생했을 때 tv의 값이 변경됩니다. 따라서 반복적으로 호출되는 부분이라면 i/o작업 처리시에 이 값을 reset 해주셔야 합니다.

오늘 우리는 동지를 땅에 묻었습니다. 그러나 땅은 이제 우리들의 것입니다.
아직도 우리의 적은 강합니다. 그러나 우리는 그들보다 많습니다.
항상 많을 것입니다.

sangheon의 이미지

tv 값을 루프 매번 마다 초기화하세요.

--

Minimalist Programmer

tegdream의 이미지

tv 값 입력하는 부분을 select 바로 앞부분에 쓰세요.

위에 두분의 말씀의 뜻이 그렇네요
초보의 해석이였습니다. ^^;;

^^Y 재미있는 하루...

black0328의 이미지

do{ 
     tv.tv_sec = 60; 
     tv.tv_usec=0;  

           
    FD_ZERO(&rfds); 
    FD_SET(client_accept,&rfds); 


   if((ss=select(client_accept+1,&rfds,(fd_set *)0,(fd_set *)0,&tv))<1){ 
                     close_socket(); 
  }else{ //select() >=1 인 경우 
       if(FD_ISSET(client_accept,&rfds)) 
   { 
                   recvByte += recv(client_accept, fileMessage+recvByte, MAX_PACKET_SIZE-recvByte, 0); 
   } 
     } 
}while(recvByte !=MAX_PACKET_SIZE)

///////////////////////////////////////////////////////////////////////////

thanks !!!!

this code work well!!!

wooho47의 이미지

recv 후 60초 를 말하는거 같은데 ..
recv 바로 밑에 타임을 60으로 다시 셋팅 하시면 됩니다.

hi 용

댓글 달기

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