Linux TCP客户端出现CLOSE_WAIT后进入死循环
在前文中讲述了Linux服务端TCP的某个链路变成CLOSE_WAIT
状态,然后由于客户端已经关闭了(发送了RST
标志的报文),那么服务端如果继续向这个链路中写入数据的话就会收到SIGPIPE
信号而终止,这篇文章主要通过客户端进入CLOSE_WAIT
后由于收到服务端产生的RST
标志报文进入死循环的情况。注:RST
表示复位,用来关闭异常的连接。
在前文中讲述了Linux服务端TCP的某个链路变成CLOSE_WAIT
状态,然后由于客户端已经关闭了(发送了RST
标志的报文),那么服务端如果继续向这个链路中写入数据的话就会收到SIGPIPE
信号而终止,这篇文章主要通过客户端进入CLOSE_WAIT
后由于收到服务端产生的RST
标志报文进入死循环的情况。注:RST
表示复位,用来关闭异常的连接。
map容器是C++ STL中的重要一员,平时会遇到删除map容器中value为指定元素的问题,例如删除所有字符串为"123"或者能整除3的元素。
之前遇到过要自己实现inet_aton
和inet_ntoa
函数功能的问题,这里总结一下。
网络字节序是大端模式,那么内存中的低地址存放的是数据的高位,内存中的高地址存放的是数据的低位。
inet_aton
是将IPv4地址(点分法)转换成对应的十进制整数;而inet_ntoa
是将十进制整数转换成对应的IPv4地址(点分法)。
遇到一个题,大概要求是写一个函数处理来去掉一个无序的整型数组(例如int i_arr[] = { 1, 2, 2, 3, 4, 2, 3, 5 };)中重复的元素,并返回最终的长度。
在UNIX环境高级编程(APUE)中提到了守护进程的创建方法,思路很清晰,所以这里通过代码具体研究下。
之前遇到过kill( pid, 0 )
的情况,由于平常没注意到kill函数的形参为0的情况,不知道它的作用。后面用man 2 kill
命令查看了下kill函数的说明,发现可以用来检测进程的存在情况。
在Linux C/C++程序中打印日志时,可能会由于需要打印未知个数的变量参数,那么vsnprintf
函数就排上用场了。这里使用一个简单的C程序例子,演示在打印源程序文件名和该打印函数所在的行号的同时,使用vsnprintf函数打印个数未知的参数变量。
在Linux服务端后台开发中,经常会用到信号处理函数:sigprocmask
和sigsuspend
。这篇文章主要通过一个综合实例演示如何使用sigprocmask函数屏蔽目标信号(信号掩码)以及sigsuspend函数挂起进程。