[질문]현재 사용중인 소켓의 수를 알려면...
안녕하세요.
아주 간단한 프로그램입니다...외부업체와의 통신으로 데이터를 받는데...
물론 "헤더+데이터"구조로 통신하죠..
현 시간 10:30에 문제가 발생했습니다... 방금 9시경에 테스트 할때는 잘 되었는데..지금은...요지는
if((ret=write(sok,COMBUF,send_len))!=send_len)
{ printf("write Error[%d] VS[%d]\n",ret,send_len); return -1; }
printf("writing OK[%d]iVS[send_len]\n",ret,send_len);
이렇게 상대서버에 보내고..
recv_len을 크게 잡아두고(상대방에서 write한후에 close(soket)하는 구조여서, 문제가 되지는 않았습니다)..
이것을 read_len(len만큼 읽도록)할려고 작업중이었는데...
reading Error[0] 이라고 에러가 떨어지는 데요..이거 상대방과 연결이 끊어진것으로 생각되거든요(??)
제쪽에서는 끊지 않았는데..(외부업체다 보니..컨트롤이 안되어서.)
만약 제쪽의 문제라면....시스템자원에 문제가 생겼다..라는 것 뿐이 안되는데??
현재 사용중인 소켓의 수를 어떻게 알수 없을까요??
(top으로 보아두 이상의 소지는 없는데...)
if( (ret=read(sok,COMBUF,recv_len))<= 0 )
{ printf("reading Error[%d]\n",ret);/* return -1;*/ }
printf("recving OK[%d]\n",ret);
/* if((ret=read_len(sok,COMBUF,6))<= 0 )
{ printf("===>reading Error[%d]\n",ret); return -1; }
recv_len=(unsigned char)COMBUF[0]*256*256*256
+(unsigned char)COMBUF[1]*256*256
+(unsigned char)COMBUF[2]*256
+(unsigned char)COMBUF[3];
printf("recv-len=[%d]",recv_len);
if( (ret=read_len(sok,&COMBUF[6],recv_len))!= recv_len )
*/
쉘에서 netstat -np 로 보십시오.
쉘에서 netstat -np 로 보십시오.
------------------------------------------------------------------------------------------------
Life is in 다즐링
그런데..sm,sp는 무었이죠??
예 답변감사드립니다..
말씀대로 했더니..마지막 Phys Addr의 갯수가 총 소캣의 갯수일것이구요...
그런데..flag라는 부분에서 sp,sm이 있는데..
앞부분은 IP인데..마지막 224의 부분은 해석이 좀....안되어서요??
어떻게 유추해 볼수 있을지?? 거듭 문의드립니다
hme0 211.XXX.XXX.XXX 255.255.255.255 SP 08:00:20:c2:93:48
hme0 224.0.0.0 240.0.0.0 SM 01:00:5e:00:00:00
언제나 즐프를 꿈꾸며~
솔라리스에서 netstat -p는....
netstat -np로 보신 건 ARP TABLE입니다.
님께서 원하시는 소켓개수와는 상관이 없습니다.
먼저, 소켓을 이용하는 프로그램이 일종의 데몬 프로세스로 활동합니까?
먼저, 소켓을 이용하는 프로그램이 일종의 데몬 프로세스로 활동합니까?
그렇지 않다면, 약간 까다로운데..^^
어찌 되었든 프로그램이 실행 프로세스로 활동할 때 그 프로세스의 pid를 알아낸 뒤, /proc 디렉토리에서 그 프로세스의 pid 디렉토리로 이도하십시요.
예를 들어, pid가 534라면 다음처럼 해보세요
ls -l /proc/534/fd
그럼 해당 프로세스가 열어놓은 파일 디스크립션에 대한 자세한 정보가 나옵니다.
그걸 참고하세요.
참, 224는 멀티캐스트 통신 할때 쓰는 주소입니다. :D
A few Good Man
lsof 로 보면 안되나요?
lsof 나 netstat 으로 보면 소켓연결 숫자가 나올 것 같은데.. ㅡ.ㅡ;;
netstat -np 는 -_-;
처음에 active internet connections 라고 연결된 소켓이 나옵니다.
그런데 지금 os가 solaris 이신거 같은데 그러면 안나올지도 모릅니다.
(현재 쉘이 있는 solaris가 없어서 모릅니다.)
lsof 유틸리티를 깔아보셔도 됩니다.
lsof | grep -i pid
이렇게 하면
ircd 11058 irc 234u IPv4 35106324 TCP 63.105.207.40:ircd->61.252.108.41:3041 (ESTABLISHED)
ircd 11058 irc 235u IPv4 36269071 TCP 63.105.207.40:ircd->220.76.95.86:1045 (ESTABLISHED)
ircd 11058 irc 236u IPv4 35636035 TCP 63.105.207.40:ircd->211.209.121.109:1028 (ESTABLISHED)
이런식으로 나옵니다.
단지 이건 리눅스에서니 딴 os에서는 다르게 나올수 있습니다.
하지만 lsof를 까시면 확실히 나올껍니다.
------------------------------------------------------------------------------------------------
Life is in 다즐링
댓글 달기