
unix网络编程
文章平均质量分 84
Turbyun
只要你不打算一口吃成一个胖子,所有的东西都是纸老虎
展开
-
linux 实现非阻塞connect
Linux 怎样实现非阻塞connect前言凡是接触过socket编程的,对connect函数一定不陌生。因为socket是面向连接的,所以在进行读写操作前我们首先要进行连接,而所谓连接也就是我们常说的三次握手,这个过程就是在connect函数中完成的。虽然connect函数本身不具备阻塞的功能,但是我们可以通过对socket进行设置和使用select函数可以设置阻塞时间的特性实现非...原创 2018-06-15 13:46:39 · 568 阅读 · 0 评论 -
select的三种用法
1、客户端在recv前使用select,可用于做心跳定时处理,超时时长为3个心跳包,若超时,关闭心跳、close(sockfd)、并且reInitSockfd, (服务端心跳在接收客户心跳之后的处理函数中刷新心跳定时,并回复心跳)。2、在accept之前调用select,可同时监听listenfd和connfd多个描述符,在一个线程(进程)中,处理多个客户连接。3、非阻塞connect...原创 2019-04-09 15:54:41 · 2475 阅读 · 0 评论 -
UDP 简易代码
1、初始化UDP套接字int initUdpSocket(){ int iRet, on; int sockfd; int addr_len; struct sockaddr_in addr; if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { printf("s...原创 2019-03-29 10:53:11 · 396 阅读 · 0 评论 -
套接字超时处理的三种方法
一、使用SIGALRM为connect 设置超时signal 捕捉到alarm信号之后会中断connect函数,导致返回值为EINTR,因此可提前设置connect超时返回,而不用等到最长 75s的connect原始超时时长1、Signal 返回值 为 typede void Sigfunc(int); -- 可以保存和恢复旧的信号处理函数2、alarm(); 可覆盖之...原创 2019-04-08 12:12:43 · 11500 阅读 · 0 评论 -
linux 实现非阻塞accept
使用场景:当在较忙的web服务器中常出现,条件为:解决方法:代码如下:待完成。原创 2019-04-10 17:39:56 · 1697 阅读 · 0 评论 -
errno错误值
EINTR : 被信号中断的慢速系统调用,当捕捉到信号且相应信号处理函数返回时ECONNABORTED:由于客户端在服务accept前发送了RST复位信号,客户端可由SO_LINGER控制(UNPV16.21图),实际在较忙的web服务器会出现 unpv 5.11节EPROTO:流子系统发生某些致命的协议相关事件,会返回此错误 unpv 5.11节以下在设置 非阻塞accep...原创 2019-04-10 17:31:35 · 592 阅读 · 0 评论 -
TCP 简易代码
基础知识:1、阻塞IO send/recv 若成功则为读入或写出的字节数, 返回 0则表示对端关闭连接即对端执行close,0 == EOF失败返回 -1,并设置错误码, 返回 -1必须做处理的意义存在于(目前所知),当心跳包超时,服务端心跳回调线程需close(connfd)关闭套接字,这样才能控制recv返回 -1,并作相应资源释放和 退出该任务处理线程,否则当cl...原创 2019-04-10 12:22:10 · 595 阅读 · 0 评论 -
APUE环境搭建
一、下载APUE书中示例源代码http://www.apuebook.com/code3e.html二、搭建Unix网络编程卷一 下载 书中示例 源代码http://www.unpbook.com/src.html查看 README执行 cd libfree && make 时报错: size_t ....错误vim inet_...原创 2019-03-20 18:51:02 · 641 阅读 · 0 评论 -
EINTR的捕获处理
EINTR:当阻塞于某个慢系统调用的一个进程捕获某个信号且相应信号处理函数返回时,该系统调用可能返回一个EINTR错误。信号 SA_RESTART标志的设置:但不方便于移植,大多数Berkeley的实现从不自动重启select,其中有些实现不重启accept、recvfromvoid sig_handler(int signum){ printf("in handler\n"...原创 2019-04-10 10:15:19 · 422 阅读 · 0 评论 -
TCP三次握手
1、为何采用三次握手,而不是两次解答:因为客户发送第一次SYN,超时没有收到确认ACK,则会重发SYN分节,若2次握手,则服务端在收到两个SYN分节,都会建立连接(相关资源浪费),但客户会丢弃第一次SYN的ACK确认包,导致服务端相当于保持了第一个的“僵尸”连接若采取三次握手,当客户端未收到第一个SYN的确认ACK,则重发SYN, 服务端无论延时收到几个SYN,都会立即恢复ACK确认包,但...原创 2019-04-28 16:58:39 · 290 阅读 · 0 评论