1、val = fcntl(server_fd, F_GETFD);
val |= FD_CLOEXEC; 设置了这个标志:使用execl执行的程序里,此描述符被关闭,不能再使用它,但是在使用fork调用的子进程中,此描述符并不关闭,仍可使用。
fcntl(server_fd, F_SETFD,val);
fcntl系统调用可以对(文件)描叙符进行控制,如文件状态、I/O、锁、复制文件描叙符。
2、supertab安装:tab匹配
下载 http://www.vim.org/scripts/script.php?script_id=1643
这个安装包跟先前的几个Vim插件不同,它是一个vba文件,即Vimball格式的安装包,这种格式安装包提供傻瓜式的安装插件的方法。
1、用vim打开.vba安装包文件
2、在vim命令行下运行命令“UseVimball ~/.vim”。此命令将安装包解压缩到~/.vim目录。
3、在~/.vimrc文件中加入
let g:SuperTabDefaultCompletionType="context"
使用:输入时按tab键
3、socket
a、正常关闭:被close、shutdown后对方连接的send和recv会马上返回,并报错。
b、非正常关闭:拔掉网线、断电。对方是接不到信号,send和recv会一直阻塞在那里,这时就需要采取心跳的方式判断(常连接)
心跳:a、Tcp协议栈中KeepAlive探测 b、TCP连接双方发握手包
a、缺点:会改变现有的通讯协议
int keepalive = 1; // 开启keepalive属性
int keepidle = 60; // 如该连接在60秒内没有任何数据往来,则进行探测
int keepinterval = 5; // 探测时发包的时间间隔为5 秒
int keepcount = 3; // 探测尝试的次数.如果第1次探测包就收到响应了,则后2次的不再发.
setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepalive , sizeof(keepalive ));
setsockopt(fd, SOL_TCP, TCP_KEEPIDLE, (void*)&keepidle , sizeof(keepidle ));
setsockopt(fd, SOL_TCP, TCP_KEEPINTVL, (void *)&keepinterval , sizeof(keepinterval ));
setsockopt(fd, SOL_TCP, TCP_KEEPCNT, (void *)&keepcount , sizeof(keepcount ));