14-8-28

本文介绍了文件描述符的操作,包括设置FD_CLOEXEC标志,以及如何通过Vimball插件安装supertab实现tab补全功能。此外,还详细说明了socket连接的正常与非正常关闭方式,并探讨了心跳检测机制,包括TCP KeepAlive选项的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 ));

  

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值