도와주세요!!에 인터넷 연결 상태를 어떻게 확인할 수 있는가에 대한 질문이 있었는데, 짜라님께서 아주 명쾌한 답변을 주셨네요. 특정 사이트로 PING을 때리고 그 결과값을 확인하는 것이죠.

 

저는 이 방법을 popen()으로 처리해 보았습니다. 아래 처럼 말이죠. ^^

#include <stdio.h>
#include <string.h>

#define  BUFF_SIZE      1024
#define  TRUE           (1 == 1)

int is_internet_connected( void)
// 인터넷이 연결되어 있는지 여부를 반환
// TRUE : 인터넷과 연결되어 있음
{
    char    buff[BUFF_SIZE];
    int     is_connected    = !TRUE;
    FILE   *fp;

    // 인터넷 연결 상태는 웹 주소에 PING을 때리는 결과를 확인
    // popen() 함수 호출 실패도 인터넷과 연결되지 않음으로 판단
    fp = popen( "ping www.falinux.com -c 1 | grep \"1 received\" | wc -l", "r");
    if ( NULL != fp)
    {
        while( fgets( buff, BUFF_SIZE, fp) )
        {
            if ( NULL != index( buff, '1'))     // 결과 값으로 1 이 있는지를 확인
            {
                is_connected    = TRUE;         // 있으면 TRUE
                break;
            }
        }
        pclose( fp);
    }
    return  is_connected;                       // 검색 결과를 반환
}

int main( void)
{
    if ( is_internet_connected())
    {
        printf( "Internet is connected.\n");
    }
    else
    {
        printf( "No internet.\n");
    }
    return 0;
}

실행해 보면 잘 됩니다.

]$ ./a.out 
Internet is connected.
]$

한가지 문제라면 인터넷과 연결되어 있을 때에는 아주 빠르게 결과를 알려 주는데, 연결이 안 되어 있다면, 체크 시간이 너무 오래 걸리내요. PING 타임 아웃이 10초? 정도 걸리는 것 같아요. 그래서 PING 타임아웃을 지정해서 실행했으면 좋겠는데, 잘 안 되네요. 혹 PING에 타임아웃 거는 방법을 아시는 분, 부탁드립니다. 또는 PING 말고 다른 방법을 아시는 분, 아울러 귀한 말씀 부탁드립니다. ^^