c语言 socket 非阻塞,C语言Socket入门非阻塞socket(connect timieout问题)

本文通过一个C语言示例程序展示了如何使用非阻塞Socket进行连接,并处理连接超时问题。程序中,connect函数在目标IP不存在或未监听指定端口时,会等待指定时间(如10秒)后返回错误。通过select和getsockopt函数可以检查连接状态,如连接成功、连接被拒绝、超时等。此外,还讨论了连接过程中TCP的三次握手和连接失败时的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果客户端想连接一个服务器端,但是不能肯定服务器端是否存在,如果存在了是否能连上,怎么判断呢?

connect函数的默认行为是阻塞的,会一直等待在那里。为了判断各种情况,以及遇到错误时结束连接,我们需要使用非阻塞的socket。一个例子程序:

#include

#include

#include

#include

#include

#include

#include

#include

int main(void){

int s,r,ret,len,error;

char buf[20];

struct sockaddr_in sock;

fd_set rset,wset;

struct timeval tv;

tv.tv_sec=10;

s=socket(AF_INET,SOCK_STREAM,0);

if(-1==s){ printf("socket() failed/n"); return 1;

}

if(0>fcntl(s,F_SETFL,fcntl(s,F_GETFL,0)|O_NONBLOCK)){

printf("fcntl failed/n");

return 1; }

sock.sin_family=PF_INET;

sock.sin_port =htons(10080);

sock.sin_addr.s_addr=inet_addr("197.0.0.9");

if(-1==(ret

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值