UDP 로 부터 상대편 IP 가져오기.

park7275의 이미지

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으로 잡아 둔것이 많아서..그런것인지??

errai의 이미지

len = sizeof(client_addr);

을 recvfrom 이전에 넣어주세요. 현재로써는 len에 어떤 값이
들어가 있을지 알 수 없습니다. 만약 NULL이 들어갔을 경우에
client_addr에는 아무런 값도 들어가지 않을 것입니다.