connect函数 超时设置和错误码

本文详细介绍了Linux下connect函数可能遇到的各种错误及其含义,并提供了一种利用非阻塞模式和select实现connect超时的方法。

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

connect函数

错误返回类型:
Linux下:
EBADF:参数socket未指定一个合法的描述符
ENOTSOCK 参数socket未指定一个套接字描述符
EAFNOSUPPORT 远程端点指定的地址族不能与这种类型的套接字一起使用
EADDRNOTAVAIL:指定的地址不可用
EISCONN:套接字已被连接
ETIMEDOUT:(只用于TCP)协议因未成功建立一个连接而超时
ECONNREFUSED:(只用于TCP)连接被远程机器拒绝
ENETUNREACH:(只用于TCP)网络当前不可到达
EADDRINUSE:指定的地址正在使用
EINPROGRESS:(只用于TCP)套接字是非阻塞的,且一个连接尝试将被阻塞
EALREADY:(只用于TCP)套接字是非阻塞的,且调用将等待前一个连接尝试完成

connect超时设置
虽然内核参数有超时设置,但是超时时间太长,手动改内核参数不太现实。这里运用select结合非阻塞设置超时如下:
1. 将套接字设置非阻塞
fcntl(sock_fd,F_SETFL,fcntl(sock_fd,F_GETFL,0)|O_NONBLOCK););
2. 调用connect函数,判断返回值
3. 若返回值为-1,若错误类型是EINPROGRESS,监听套接字的可写状态,调用select监听是否超时。
4. 若继续进行send,recv最好将套接字设置为阻塞。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值