여러개의 아이피에 접속을 시도할 경우 멈춤현상 발생....
글쓴이: alonecrow / 작성시간: 목, 2003/07/10 - 2:06오후
안녕하세요...
아래질문 "connection timeout ..."에 이어지는 질문일지 몰라도...
접속 아이피를 배열[80]로 가지고 있다가
for 문을 돌면서 배열에에 있는 아이피에 접속을 시도하는 프로그램을 짜고 있습니다.
block, Non-block, alarm 으로 모두 처리를 해봤으나... 중간에 멈춤현상이 발생하는데요... (블럭킹하고는 다른 멈춤현상인것 같습니다.)
왜 발생하는지 이유와... 해결방법을 알고 싶습니다.
for (i=0; i<sizeof(arry); i++) { sfd = socket()..... // ioctl, fcntl, alram중의 하나로 모드 변경.... ... address.sin_addr.s_addr = inet_addr(arry[i]); ... state = connec(sfd,..address,...)... //<-- 몇건 처리되다가 중간에 멈춤현상 발생 if (state < 0) { closes(sfd)... continue; } close(sfd).... }
Forums:
트레이스를 해보세요..
ltrace나 strace, tcpdump 등으로 트레이스를 해보세요.
http://bbs.kldp.org/viewtopic.php?t=1045&highlight=truss
울랄라~ 호기심 천국~!!
http://www.ezdoum.com
for문에 사용된 sizeof(arry)에서... arry가 어떻게 선언
for문에 사용된 sizeof(arry)에서... arry가 어떻게 선언되어 잇나요?
혹시 아래와 같이 되어 있는건 아닌지 모르겠네염...
위 코드를 보면 ptr의 개수는 10개 이지만, size를 구하면 40이 됩니다.. 왜냐면 포인터는 4바이트가 됩니다.
참고하세요~~~
connect에서 blocking이 발생하는 경우는SYN 패킷 전송
connect에서 blocking이 발생하는 경우는
SYN 패킷 전송 후 SYN,ACK 패킷을 기다리다가 생기는 경우가 많습니다.
만일 IP 배열 중 i 번째 서버에서 SYN/ACK을 보내지 않았다면
해당 i 번째 connect에서 블럭킹이 발생하겠지요.
strace 뿐만 아니라 tcpdump를 통해서도 SYN/ACK이 제대로 전송 되는지
확인할 필요가 있습니다.
不狂不及
댓글 달기