bind - EACCES

purewell의 이미지

bind에서 오류가 납니다.

port:7020
backlog:15
ip:0.0.0.0

위와 같이 해서 bind을 하였는데 ㅡo-) errno가 EACCES로 세팅됩니다.
(물론 bind의 리턴값이 -1 이고요)

man page에는...

Quote:
EACCES The address is protected, and the user is not the super-user.

주소가 보호되어 있다고 나오는데 무슨 말인지 모르겠습니다.
(0.0.0.0은 INADDRANY던가? 그 녀석 아닌가요?)

root 권한으로 프로그램을 실행하면 오류가 나진 않지만...

ㅡo-)a 긁적긁적...

bool
SocketBind(SOCK_HANDLE hSocket,
  int nPort, const char* szIP, SOCK_IP_TYPE nIPVer)
{
  int nRet;

  if (nIPVer == SOCK_IP4)
  {
    SOCK_ADDRIN sa;
    memset(&sa, 0x00, sizeof(sa));
    sa.sin_family=AF_INET;
    sa.sin_port = htons(nPort);
    StringToAddress((SOCK_ADDR&)sa, szIP, nIPVer);
    nRet = bind(hSocket, (SOCK_ADDR*)&sa, sizeof(sa));

    if ( nRet == -1)
    {
      switch(errno) {
      case EBADF: printf("EBADF");break;
      case EINVAL:printf("EINVAL");break;
      case EACCES:printf("EACCES");break;
      case ENOTSOCK:printf("ENOTSOCK");break;
      case EROFS:printf("EROFS");break;
      case EFAULT:printf("EFAULT");break;
      case ENAMETOOLONG:printf("ENAMETOOLONG");break;
      case ENOENT:printf("ENOENT");break;
      case ENOMEM:printf("ENOMEM");break;
      case ENOTDIR:printf("ENOTDIR");break;
      case ELOOP:printf("ELOOP");break;
      }
    }
  }

  return SOCK_SUCCESS(nRet);
}
purewell의 이미지

^ o^);; 실수로 Port가 15번이 되어버렸습니다.

Port가 1024 이내 포트는 UN*X/Linux에서

Super user 이상만이 열 수 있도록 하더군요.

_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz