UDP 로 부터 상대편 IP 가져오기.
int i;
int ret = FALSE;
int len;
struct sockaddr_in client_addr;
memset((void*)&client_addr, NULL, sizeof(struct sockaddr_in));
errno = 0;
ret = recvfrom( ptr_gsn->fd, (void*) recv_buf, BUF_SIZE, 0,
(struct sockaddr*) & client_addr, &len);
printf("^^ This is from %x[%d,%d][%d]\n",client_addr.sin_addr.s_addr, ret, len ,errno);
if( ret < 0 )
{
DBG_PRINT(DBG_LEVEL_WARNING,"[CONN] recvfrom() is failed.\n");
return FALSE;
}
위에 형태로 client에서 sendto해서 UDP 메세지를 보내고 있읍니다.
select()을 non-blocking해서 사용하고 있고요.
물론 ptr_gsn->fd의 경우 socket으로 bind까지 했습니다.
문제는 위에 보시다시피 받은 곳의 IP를 찍으려고 하는데..
방법에는 특별히 문제가 없는데.
다른 문제인지는 몰라도...
client_addr의 구조체를 채워서 IP를 알때도 있고 모를때도 있다는 겁니다.
자세히 말하면 기존에 이 routine으로는 IP를 항상 알았는데
새롭게 짠 code에서는 첨에는 나오다가 이후에는 안나옵니다.
그리고 약간의 수정이 있으면 안 나올때가 있습니다..
외부적으로 문제가 있는것 같은데.
...
어떻게 해야할지..
제가 stack으로 잡아 둔것이 많아서..그런것인지??
len = sizeof(client_addr);을 recvfro
len = sizeof(client_addr);
을 recvfrom 이전에 넣어주세요. 현재로써는 len에 어떤 값이
들어가 있을지 알 수 없습니다. 만약 NULL이 들어갔을 경우에
client_addr에는 아무런 값도 들어가지 않을 것입니다.
댓글 달기