socket처리시 프로세스가 블록됩니다..
글쓴이: psjcap / 작성시간: 화, 2005/02/01 - 4:04오후
os는 솔라리스이구요..
client 프로세스가 종료되면(exit로 종료..)
server가 멈춰버립니다..(죽지는 않고.. 행되버립니다..)
socket은 server/client 모두 nonblock이구요..
select 돌면서 recv/send 상태를 확인합니다..
send/recv 시에 에러 체크는..
EINTR 발생하면 무시하고 다시 send/recv 처리하도록 되어있고..
0보다 작으면 로그 출력 후 shutdown, close 시킵니다..
SIGPIPE 처리는 fprintf로 출력하구요.. 별다른 처리 않합니다..
signal handler는 sigaction으로 달았습니다..
행되버렸을 때.. truss로 확인하여 보니 무한루프는 아니고..
lock이 걸린것 처럼 보이더군요..
특이한 점은 server 쪽의 socket의 send 버퍼가 거의 full 상태였을 때 이런 현상이 생깁니다..
그리고 thread 같은건 사용하지 않습니다..
semaaphore를 사용하는 부분이 있긴 한데..
수년간 사용한 거라서 문제일 것 같진 않습니다..
혹시 의심가는 부분 있으면 좀 알려주세요...ㅜㅡ;
Forums:
댓글 달기