Linux下Socket编程----connect()函数的包裹函数介绍
2015-08-14 13:25
856 查看
Linux下Socket编程—-connect()函数的包裹函数介绍
这里主要介绍的是在TCP连接中的应用connect()函数简介
1. 功能: 用于客户端建立tcp连接,发起三次握手过程。2. 原型:
#include<sys/socket.h> #include<sys/types.h> int connect(int sockfd, const struct sockaddr* server_addr, socklen_t addrlen) 返回值:0──成功, -1──失败。
3. 参数:
sockfd:标识一个套接字。 serv_addr:套接字s想要连接的主机地址和端口号。 addrlen:serv_addr缓冲区的长度。
4. 错误代码:
EBADF 参数sockfd 非合法socket处理代码 EFAULT 参数serv_addr指针指向无法存取的内存空间 ENOTSOCK 参数sockfd为一文件描述词,非socket。 EISCONN 参数sockfd的socket已是连线状态 ECONNREFUSED 连线要求被server端拒绝。 ETIMEDOUT 企图连线的操作超过限定时间仍未有响应。 ENETUNREACH 无法传送数据包至指定的主机。 EAFNOSUPPORT sockaddr结构的sa_family不正确。 EALREADY socket为不可阻塞且先前的连线操作还未完成。
connect()的包裹函数
代码实现
#include<sys/socket.h> #include<sys/types.h> #include<stdlib.h> #define MAXSLEEP 128 int my_connect(int sockfd,const struct sockaddr *servaddr,socklen_t addrlen) { int nsec; for(nsec = 1;nsec <= MAXSLEEP;nsec <<= 1) { if(connect(sockfd,servaddr,addrlen) == 0) return 0;//connection accepted if(nsec <= MAXSLEEP/2)//sleep nesc,then connect retry sleep(nsec); } return -1; }
介绍
这是一个connect超时重连的函数,如果连接成功,则这个函数返回0。如果连接失败,则每次等待1、2、4、8。。。秒后继续尝试重新连接,直到MAXSLEEP为止,则说明连接失败,返回-1。总结
也许你会觉得这样实现会有些麻烦,但这样确实可以使你的程序更加健壮,如果因为一些时间差或者阻塞的原因,使得你的第一次connect失败,利用这个包裹函数就不至于使整个客户端程序错误,而进行重连,消除这些客观因素的影响。注意:具体的代码可以参见:https://github.com/AnSwErYWJ/DogFood/blob/master/client.c
相关文章推荐
- CentOS下安装hadoop
- Linux下utf-8 BOM 的检查和删除 (65279错误解决办法)
- Linux常用命令大全
- 基于Linux平台病毒BlackHole病毒的决心
- Linux 内核中的 Device Mapper 机制
- linux mint17.2 安装fcitx输入法
- Linux设备树
- linux的makefile
- Socket通信——Linux下,使用C/C++
- SELinux策略语言--类型强制(编写TE规则)
- exfat格式U盘在linux下拔出后在windows下变为只读的修复
- linux命令集——<一>目录处理命令
- CentOS / Redhat 上的 Iptables 防火墙配置简介
- linux下 监控USB插入事件(NET_LINK、udev),附udev和mdev介绍
- 【再思考】linux中fork()函数详解
- Linux基础学习笔记-第四课:NANO、开关机
- Linux启动管理器
- linux 下windows 文件中文乱码处理
- TQ2440 学习笔记—— 6、Windows、Linux环境下相关工具、命令的使用
- 详解linux下auto工具制作Makefile源码包(工具安装篇)