[질문]현재 사용중인 소켓의 수를 알려면...

shean0의 이미지

안녕하세요.
아주 간단한 프로그램입니다...외부업체와의 통신으로 데이터를 받는데...
물론 "헤더+데이터"구조로 통신하죠..
현 시간 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 로 보십시오.

------------------------------------------------------------------------------------------------
Life is in 다즐링

shean0의 이미지

예 답변감사드립니다..
말씀대로 했더니..마지막 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

언제나 즐프를 꿈꾸며~

jemiro의 이미지

netstat -np로 보신 건 ARP TABLE입니다.
님께서 원하시는 소켓개수와는 상관이 없습니다.

코퍼스의 이미지

먼저, 소켓을 이용하는 프로그램이 일종의 데몬 프로세스로 활동합니까?
그렇지 않다면, 약간 까다로운데..^^
어찌 되었든 프로그램이 실행 프로세스로 활동할 때 그 프로세스의 pid를 알아낸 뒤, /proc 디렉토리에서 그 프로세스의 pid 디렉토리로 이도하십시요.
예를 들어, pid가 534라면 다음처럼 해보세요

ls -l /proc/534/fd
그럼 해당 프로세스가 열어놓은 파일 디스크립션에 대한 자세한 정보가 나옵니다.
그걸 참고하세요.

참, 224는 멀티캐스트 통신 할때 쓰는 주소입니다. :D

A few Good Man

최종호의 이미지

lsof 나 netstat 으로 보면 소켓연결 숫자가 나올 것 같은데.. ㅡ.ㅡ;;

다즐링의 이미지

처음에 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 다즐링

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.