gpt4 book ai didi

使用套接字检查互联网连接

转载 作者:太空宇宙 更新时间:2023-11-04 03:01:54 25 4
gpt4 key购买 nike

一个小问题:如何在 C 程序中使用 Linux 套接字检查 Internet 连接?我听说这是最简单和最合适的方法(而不是调用程序 ping,例如),但我就是不知道该怎么做。

最佳答案

随心所欲地改变它。 :)

void *parser_online(void *garbage)
{
int sockfd,val;
char buffer[MAX_LINE];
struct hostent *google_ent=NULL;
struct sockaddr_in google_addr;

sockfd = -1;

if((google_ent = gethostbyname("www.google.com")) != NULL)
{
if((sockfd = socket(google_ent->h_addrtype,SOCK_STREAM,IPPROTO_TCP)) != -1)
{
val = 1;
if(setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR, (char *) &val, sizeof(val)) == 0 && setsockopt(sockfd,IPPROTO_TCP,TCP_NODELAY, (char *) &val, sizeof(val)) == 0)
{
google_addr.sin_family = google_ent->h_addrtype;
memcpy(&(google_addr.sin_addr), google_ent->h_addr, google_ent->h_length);
google_addr.sin_port = htons(80);
if( connect(sockfd,(struct sockaddr *) &google_addr,sizeof(google_addr)) == 0)
{
if(write(sockfd,"GET /index.html HTTP/1.1\r\n\r\n", 29) >= 28)
{
shutdown(sockfd, SHUT_WR);
if(read(sockfd, buffer, MAX_LINE) != -1) // all right!
{
close(sockfd);
return (void *) 1;
}
else
report_error("read()",1,0,verbose);
}
else
report_error("write()",1,0,verbose);
}
else
report_error("connect()",1,0,verbose);
}
else
report_error("setsockopt()",1,0,verbose);
}
else
report_error("socket()",1,0,verbose);
}
else
report_error("cannot resolve IP for mom Google.",0,0,error); // this is is the most common error.

if(sockfd!=-1)
close(sockfd);
return (void *) 0; // no internet

}

关于使用套接字检查互联网连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10535255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com