0x01 关键步骤和相关函数
网络编程中默认情况下进入connect函数,会一直等待连接结束。超时等待设置关键在于
1、将socket置为非阻塞后
2、设定超时等待时间
3、时间结束后读取socket状态,进行判断
1、设置socket为非阻塞
记录下两种设置socket为非阻塞方式,分别是fcntl() 和 ioctl() 两个函数fcntl()#include
#include
/*********************************************************************
* Function : fcntl
* Description : 根据文件描述符操作文件特性
* Parameter :
* @fd 文件描述符
* @cmd 操作命令:
* F_DUPFD : 复制文件描述词。
* FD_CLOEXEC : 设置close-on-exec标志
* F_GETFD : 读取文件描述词标志
* F_SETFD : 设置文件描述词标志
* F_GETFL : 读取文件状态标志
* F_SETFL : 设置文件状态标志
* ...
* @arg 供命令使用的参数
*
* Return : int
*
* Usage :
* int fcntl(int fd, int cmd);
* int fcntl(int fd, int cmd, long arg);
* int fcntl(int fd, int cmd, struct flock *lock);
*
* 参考 man 或:
* https://blog.csdn.net/weixin_34362875/article/details/86340074
*
*********************************************************************/
int fcntl(int fd, int cmd, ... /* arg */ );ioctl()#include
/*********************************************************
* Function : ioctl
* Description : 设备驱动程序中对设备的I/O通道进行管理的函数
* Parameter :
* @fd 文件描述符
* @request 操作命令:
* FIONBIN : 设置/ 清除非阻塞I/O 标志
* FIOASYNC : 设置/ 清除信号驱动异步I/O 标志
* FIONREAD : 获取接收缓存区中的字节数
* FIOSETOWN : 设置文件的进程ID 或进程组ID
* FIOGETOWN : 获取文件的进程ID 或进程组ID
* ...
* @arg 供命令使用的参数
*
* Return : int
*
* 参考 man 或:
* https://www.cnblogs.com/tdyizhen1314/p/4896689.html
* 上文详细介绍了该函数的用途
* 以及request对应参数所需要提供的arg类型
*********************************************************/
int ioctl(int fd, unsigned long request, .../* arg */);
2、超时等待select() 多路复用#include
#include
#include
#include <