서버랑 클라이언트에서 통신하다가요 클라이언트에서 close를 안하고 그냥 죽거나 network 선이 끊어져서 통신이 투절됬을 때 서버에서 이것을 어떻게 쳐리해줘야 하나요... 좀 가르쳐 주세요
server.c ret=send(sok,buf,len,0); ret=write(sok,buf,len); ret=recv(sok,buf,len,0); ret=read_len(sok,buf,len); if(ret !=len) return error;
아래 참조하시고. . 조금만 더 찿아 보시면.. 많은 분이 답해주실거에요..
unsigned int read_len(int sok,char * buf,unsigned int len) { unsigned int r_len; unsigned int nleft,nread; char *p; int count=0; nleft=len; p=buf; while(nleft>0) { nread=read(sok,p,nleft); if(nread<0) { return ERROR; } else if(nread==0) { count++; return ERROR; /* EOF*/ } else { ; } nleft -=nread; p +=nread; count++; #ifdef NoUse if(count>10) return -1;/* 길이가 틀리기 때문에 에러로 처리된다 */ else usleep(1); #endif } return (len-nleft); }
언제나 즐프를 꿈꾸며~
select를 써보세요...
SO_KEEPALIVE로 검색 해보시기 바랍니다.
폴링하는 방법과 SO_KEEPALIVE를 사용하는 방법이 있습니다.
폴링은 주기적으로 소켓에 write하는 방법이 있고 SO_KEEPALIVE는 내부적으로 체크합니다.
그나저나 백수 언제 탈출하냐... ㅡㅡ; 배고파라.
이거 제대로 동작하나요? 쓰지않는게 속편하다는 결론을 얻은 이후에는 SO_KEEPALIVE를 고려해 본 적이 한번도 없는 것 같네요. 일정 시간마다 소켓에 직접 써보는게 제일 확실하고 속편합니다.
산넘어 산
왠만한 TCP 스택은 대부분 지원할 것입니다. 저 기능을 도입한 이후로 파이월이 일정 시간 데이터 없는 connection을 끊는 것을 2시간에 한 번 꼴로 확인하여 서버쪽에서도 제거해주는 기능을 구현한 적 있습니다.
---http://coolengineer.com
텍스트 포맷에 대한 자세한 정보
<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]
read문에서 return 값이 0보다 크지 않으면 나오시면 되요.
대충..이런 개념에서요.. write도 마찬가지지만... read시에 blocking되어서
문제 될 소지가 있으니.. usleep,count룰 사용해두 되구요..
아님 alarm(3); 뭐 이런 방법을 사용해도 되구요..
아래 참조하시고. . 조금만 더 찿아 보시면.. 많은 분이 답해주실거에요..
언제나 즐프를 꿈꾸며~
select를 써보세요...
select를 써보세요...
SO_KEEPALIVE로 검색 해보시기 바랍니다.폴링하는 방법과
SO_KEEPALIVE로 검색 해보시기 바랍니다.
폴링하는 방법과 SO_KEEPALIVE를 사용하는 방법이 있습니다.
폴링은 주기적으로 소켓에 write하는 방법이 있고
SO_KEEPALIVE는 내부적으로 체크합니다.
그나저나 백수 언제 탈출하냐... ㅡㅡ; 배고파라.
SO_KEEPALIVE
이거 제대로 동작하나요? 쓰지않는게 속편하다는 결론을 얻은 이후에는 SO_KEEPALIVE를 고려해 본 적이 한번도 없는 것 같네요. 일정 시간마다 소켓에 직접 써보는게 제일 확실하고 속편합니다.
산넘어 산
Re: SO_KEEPALIVE
왠만한 TCP 스택은 대부분 지원할 것입니다.
저 기능을 도입한 이후로 파이월이 일정 시간 데이터 없는 connection을 끊는 것을 2시간에 한 번 꼴로 확인하여 서버쪽에서도 제거해주는 기능을 구현한 적 있습니다.
---
http://coolengineer.com
댓글 달기