[질문] 리눅스 소켓 프로그래밍에서 기현상...
글쓴이: splendor / 작성시간: 수, 2004/09/01 - 4:55오후
리눅스에서 소켓프로그래밍에서 다음과 같은 기현상이 있습니다.
소켓을 통해 서버에 접속하는 프로그램입니다.
서버에 접속해서 통신하고 소켓 닫는 것을 반복합니다.
하나의 프로그램에서 똑같은 통신작업이 계속 반복됩니다.
그런데 어떤 상황이 발생하냐면...
서버에 접속해서 통신하는 함수를 여러번 실행시키는데요...
첫번째 접속에서는 잘되고 연결을 종료합니다.
두번째 접속에서는 timeout이 걸려버립니다.
connect 함수에서 블로킹이 되어 있다가 약 3분 10초정도 후 timeout이 발생합니다.
그후 세번째 접속부터는 항상 모두 잘 됩니다.
접속하는 서버 주소, 포트, 주고받는 메시지는 모두 동일합니다.
프로그램을 몇번 실행시키건 간에 항상 두번째 접속시도에서 timeout이 발생합니다.
혹시 이와같은 상황을 경험해 보신 분 계신지요?
서버측 구현에 문제가 있는 것 같지는 않습니다.
여러 웹서버 80port들(다음이나 야후 같은 곳)에 접속하는 테스트를 해봤는데 증상이 동일하거든요.
사정상 소스코드는 올릴 수 없습니다. ㅡㅡ;;
소스코드에 문제가 있을 가능성은 많지 않습니다.
소스코드보다는 외부적인 요인이 있는 것이 아닌지 궁금합니다.
Forums:
혹시 프로그램이 쓰레드 형식으로 돌고 있는 것인지요?접속하는 서버
혹시 프로그램이 쓰레드 형식으로 돌고 있는 것인지요?
접속하는 서버에 socket close를 잘 하고 있는 것인지 궁금하네여..
소스가 없으니 모라고 답변드리기가 참으로 애매합니다.
참 한가지 더 netstat -nap 로 소켓이 제대로 물고 있는지 살펴 봐야보시구여..
마지막으로 strace를 걸어봐서 내부적으로 패킷이 잘 가고 있는지 살펴 볼수 있겠네요.
그리고, 제가 어떤곳에서 테스트 해보니.
connect된 세션을 몇개까지만 허용하는 곳도 있었고,
파이어월에서 30분동안 아무데이터도 오가지 않으면, 허용하지 않는 그런 곳도 있었습니다..
좋은 답변 되지 못했네여.. ^^; 그럼 수고하세요..
https://github.com/la9527
서버가 select/no fork 기반인가요?
서버가 select/no fork 기반인가요?
strace 로 일단 소켓이 제대로 close되는지 확인해보세요.
strace 로 일단 소켓이 제대로 close되는지 확인해보세요.
---
http://coolengineer.com
서버측 구현 상황은 알 수 없구요.일반적인 웹서버들에 붙여서 테스
서버측 구현 상황은 알 수 없구요.
일반적인 웹서버들에 붙여서 테스트 중입니다.
다음이나 야후 같은 곳이요.
그리고...
strace는 옵션을 어떻게 줘야하나요...?? ㅡㅡa
PID를 안다면 strace -p <PID> 주세요자세
PID를 안다면 strace -p <PID> 주세요
자세한건 man strace
screen + vim + ctags 좋아요~
소스를 공개할 수 없다면, 그리고 소스상의 문제가 아니라고 생각되신다면
소스를 공개할 수 없다면, 그리고 소스상의 문제가 아니라고 생각되신다면 간단히 접속만 하는 부분만을 떼어서 문제가 발생하는 경우를 보여주는 것은 어렵지 않을텐데요.
소스는 이상이 없고, 공개할 수 없다. 뭐가 문제~게~. 날 잡아 봐~라~ 하는 식은 여러모로 좋지 않아 보입니다.
임베디드 환경에서 돌아가는 리눅스용 Sun 자바 버추얼 머신의 소스코드입
임베디드 환경에서 돌아가는 리눅스용 Sun 자바 버추얼 머신의 소스코드입니다. 이미 검증된 코드라는 거죠. 그리고 라이센스가 걸려있어서 공개하기는 곤란합니다.
저도 질문하면서 참 난감합니다. T_T
netstat으로 살펴본 결과는 SYN을 보낸 상태에서 블럭킹이 되어 있
netstat으로 살펴본 결과는 SYN을 보낸 상태에서 블럭킹이 되어 있는 상황이네요.
하나의 프로그램에서 똑같은 코드를 계속 실행하는 것인데, 왜 하필 두번째 시도에서만 timeout이 걸리는지 참 아리송하군요. T_T
댓글 달기