CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): ymir (Mizz)
날 짜 (Date): 2004년 11월 22일 월요일 오후 01시 48분 01초
제 목(Title): [Q] Network interface name 알아오기.. 



네트워크 인터페이스 이름을 알아 오기 위해..

스티븐슨 아저씨꺼 소스를 사용했는데..

Tru64 에서는 ioctl() 이 EFAULT 를 리턴하는군요.. ;;


Solaris, HPUX, AIX, Linux 에서는 모두 동작하고..

Tru64 에서도 테스트 코드는 동작하는데...

제 데몬 프로그램에 모듈로 추가해서 호출 하면...

여지없이 EFAULT ...


심지어 테스트 데몬 프로그램을 만들어서... 콜해도..

정상적으로 동작하는데...

제 프로그램에 추가해서 호출하면 얄짤 없더군요.. ㅡㅡ;;


혹시 이와 유사한 사례를 보셨거나..

체크해 볼 만한 내용이 있으시면 조언 부탁드리겠습니다..



밑에 코드 첨부합니다.


이 함수의 파라미터는 없고.. 모두 로컬 변수 사용합니다.

<snip>
fd = socket(AF_INET, SOCK_DGRAM, 0);
memset(&ifcfg, 0x00, sizeof(struct ifreq));
len = sizeof(struct ifreq) * numreqs;
lastlen = 0;

for(;;)
{
ifcfg.ifc_buf = malloc(ifcfg.ifc_len);
ifcfg.ifc_len = len;

if(ioctl(fd, SIOCGIFCONF, (char *)&ifcfg) < 0)
{
do_log("IF_LIST", "ioctl() fail - [errno = %d]\n.", errno);
if ((errno != EINVAL) || (lastlen != 0))
{
ret = FALSE;
break;
}
}
else
{
if (ifcfg.ifc_len == lastlen)
{
ret = TRUE;
break;
}

lastlen = ifcfg.ifc_len;
}

len += 10 * sizeof(struct ifreq); /* increment */
free(ifcfg.ifc_buf);
ifcfg.ifc_buf = NULL;
}
</snip>



  Oh, I do believe everlasting love and destiny to meet you again
  I feel a pain I can hardly stand all I can do is loving you

          - *Mizz* the Magic Knight!
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.