[완료] HttpSendRequest() 함수의 멈춤 현상에 대해서
글쓴이: naito / 작성시간: 월, 2011/08/01 - 2:57오후
한 대의 Windows PC에서 Linux가 설치된 PC에 HttpSendRequest()함수를 사용하여 CGI 전송을 하고 있습니다.
처음 접속시 CGI 하나를 보내서 데이터를 끊임없이 받아 옵니다.
데이터가 오고 있는 도중에 다른 CGI를 날려서 필요한 동작을 하도록 컨트롤 하고 있습니다.
이 동작을 동시에 여러 Linux PC에 접속을 해서 CGI를 보내도 큰 이상은 없습니다.
그런데 동일한 IP를 가지는 PC에 CGI를 보내면 HttpSendRequest()함수에서 프로그램이 멈춥니다.
예를 들어 한 대의 공유기에 여러 대의 Linux PC가 물려 있는 경우입니다.
그런데 이상한 것은 처음 접속하여 데이터를 가져오는 것은 문제가 없는데,
도중에 다른 CGI를 추가로 날리려고 HttpSendRequest()함수를 호출하면 이 곳에서 프로그램이 멈춥니다.
관련 자료를 찾아보니 Timeout기능에 문제가 있으므로 쓰레드를 하나 생성해서 HttpSendRequest()함수 호출을 하고,
원래 쓰레드에서 Timeout 기능을 실행시켜 문제의 쓰레드를 강제 종료 하라고 하더라구요.
이렇게 사용을 하고는 있습니만 해당 쓰레드를 강제 종료 시킬 경우 CGI가 제대로 호출이 안되므로 어떠한 동작도 할 수가 없게 됩니다.
이 상황에서 CGI를 확실하게 전송하는 방법이 있을까요?
조언 부탁드립니다.
Forums:
그런 경우가 있었는데...
저의 꽁수는 ㅡ_ㅡ;;;
1. send에서 continue를 잘못적용해서. 반복문 처리'하느라 멈춘것처럼 보이는 경우.
- 적절한 실패'를 해서 멈추지 않도록 break 넣어주기
2. sleep등이 적용되지 않은 상태'에서 너무 빠르게 많은 양'을 무작정 전송한 경우.
- 적절한 sleep을 적용해줍니다. 0~300정도...
3. 최대한 점유율'이 100%가 되지 않고 90% 정도'에서 처리 될 수 있는 흐름'을 만들어 주면 좋습니다.
- 제한된 시간'안에 처리'되는 량'을 정해두고 개발하시면. 좋습니다.
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
CPU부하 때문에 그런 것은 아니구요.아래와 같이
CPU부하 때문에 그런 것은 아니구요.
아래와 같이 접속이 되면 잘 동작을 합니다.
http://1.1.1.1:80 접속 > PC http://2.2.2.2:80 접속 > —————————— PC 1.1.1.1 (Widows) http://3.3.3.3:80 접속 ==> | (Linux) | |———- PC 2.2.2.2 | (Linux) | ———- PC 3.3.3.3 (Linux)그런데 아래와 같이 접속이 된 상태에서 추가로 CGI호출을 위해 연결을 하나 만들어 HttpSendRequest()함수를 호출시 멈춰 버립니다.
http://1.1.1.1:80 접속 > 80포트 PC http://1.1.1.1:81 접속 > ———— 공유기 ——————- PC (Widows) http://1.1.1.1:82 접속 ==> 1.1.1.1 | (Linux) | 81포트 |———- PC | (Linux) | 82포트 ———- PC (Linux)이해가 가시려나 모르겠네요.
ip가 다른 Linux서버에 접속시에는 아무런 문제가 없습니다.
그런데 같은 ip를 가지는 Linux서버에 접속시 문제가 발생합니다.
아무래도 이 내용과 연관이 있는 것 같습니다.
http://support.microsoft.com/kb/183110#appliesto
각 Linux 서버에 대해서 데이터 스트림 전송을 위한 연결이 계속 되어 있는 상태구요.
추가로 CGI를 날리기 위해 연결을 새로 만들어 전송시 문제가 발생합니다.
MS의 내용에 의하면 접속 제한 때문에 그렇다는 것인데, 이상한 것은 같은 ip를 가지는 다른 Linux서버에 추가로 접속을 시도하면 접속은 됩니다.
다만 이미 접속된 Linux서버에 대해서 추가로 CGI전송시만 문제가 됩니다.
텍스트로 그렸더니 그림이 깨지네요. 아무튼 ip가
텍스트로 그렸더니 그림이 깨지네요.
아무튼 ip가 다른 여러대의 리눅스 서버에 접속시에는 동작이 잘 되지만
같은 ip를 가지는 리눅스 서버에 접속시에만 문제가 됩니다.
(ex:하나의 공유기에 리눅스 서버가 여러개 연결된 경우)
혹시 HttpSendRequest()함수를 대체할 만한 함수라도 없을까요?
그냥
그냥 http://support.microsoft.com/kb/183110/ko 에 나와 있는대로 연결 수를 늘려 버렸습니다.
HTTP 1.0을 사용하고 있기 때문에 MaxConnectionsPer1_0Server 값을 최대 연결 수보다 많도록 설정하니 별 다른 이상없이 동작하는 거 같네요.
댓글 달기