client.c文件中在建立socket后有一句

setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));

SO_REUSEADDR允许重用本地地址。

client.c文件在bind之后的connec_t函数中,

先将socket设为非阻塞,然后connect 然后select然后再将socket状态改为原来的。

这样做的目的是select超时就退出了。

如果不这样,client端一直在connect状态,没有超时退出这个操作。

int connect_t(int s, struct sockaddr *svr, time_t timeout)
{
#if defined(VTUN_SOCKS) && VTUN_SOCKS == 2
     /* Some SOCKS implementations don't support
      * non blocking connect */
     return connect(s,svr,sizeof(struct sockaddr));
#else
     int sock_flags;
     fd_set fdset;
     struct timeval tv;

tv.tv_usec=0; tv.tv_sec=timeout;

sock_flags=fcntl(s,F_GETFL);
     if( fcntl(s,F_SETFL,O_NONBLOCK) < 0 )//设置s为非阻塞
        return -1;

if( connect(s,svr,sizeof(struct sockaddr)) < 0 && errno != EINPROGRESS)
        return -1;

FD_ZERO(&fdset);
     FD_SET(s,&fdset);
     if( select(s+1,NULL,&fdset,NULL,timeout?&tv:NULL) > 0 ){
        int l=sizeof(errno);    
        errno=0;
        getsockopt(s,SOL_SOCKET,SO_ERROR,&errno,&l);
     } else
        errno=ETIMEDOUT;

fcntl(s,F_SETFL,sock_flags);

if( errno )
        return -1;

return 0;
#endif
}//end connect_t

除此之外client端还有SO_KEEPALIVE和地址重用设置。

server端有个getpeername等选项无关紧要。

转载于:https://www.cnblogs.com/helloweworld/archive/2012/10/09/2717335.html

vtun中setsockopt fcntl等有关套接字设置相关推荐

  1. python socket多线程 获取朋友列表_python中的(多线程)套接字列表/数组

    我对python有点陌生.我正在尝试在一个程序中创建和使用一个套接字列表/数组.所以我声明了一个数组,如下所示:myCSocks = ['CSock1', 'CSock2', 'CSock3', 'C ...

  2. java中套接字,如何在java中获得一个开放的套接字?

    在 Java中,我如何获得一个开放的套接字?我有2个JFrame;在第一个JFrame中,我打开了Client socket的连接.在同一个JFrame中,我创建了另一个JFrame(JFrame2) ...

  3. 套接字设置为(非)阻塞模式

    当socket 进行TCP 连接的时候(也就是调用connect 时),一旦网络不通,或者是ip 地址无效,就可能使整个线程阻塞.一般为30 秒(我测的是20 秒).如果设置为非阻塞模式,能很好的解决 ...

  4. C语言socket accept()函数(提取出所监听套接字的等待连接队列中第一个连接请求,创建一个新的套接字,并返回指向该套接字的文件描述符)

    文章目录 名称 使用格式 功能参数描述 参数 sockfd addr addrlen 返回值 示例 man 2 文档中的accept解释 错误处理 名称 accept() 接收一个套接字中已建立的连接 ...

  5. java udp 同一个端口_java – 系统中的两个不同的UDP套接字可以绑定相同的端口吗?...

    它与TCP和UDP之间的区别有关.当您创建TCP套接字时,您正在创建与另一台计算机上的端口的同步客户端连接,并且当您连接到地址时,您实际上也会在套接字上获得本地端口.因此,在您的示例代码中,创建的两个 ...

  6. 《UNIX环境编程》第十六章--网络IPC:套接字

    Contents 套接字接口 套接字描述符 寻址 字节序 地址格式 地址查询 绑定地址 建立连接 数据传输 套接字选项 带外数据 UNIX域套接字 使用套接字的示例 面向连接的ruptime 无连接的 ...

  7. linux网络编程之socket(十一):套接字I/O超时设置方法和用select实现超时

    一.使用alarm 函数设置超时 C++ Code  1 2 3 4 5 6 7 8 9 10 11 12 13   void handler( int sig) { } signal(SIGALRM ...

  8. Linux套接字聊天

    Linux套接字 套接字是一种通信机制,凭借这种机制,客户/服务器系统的开发工作既可以在本地单机上进行,也可以跨网络进行. 套接字的特性有三个属性确定,它们是:域(domain),类型(type),和 ...

  9. 向一个无法连接的网络尝试了一个套接字操作_python3从零学习-5.8.1、socket—底层网络接口...

    源代码: Lib/socket.py 这个模块提供了访问BSD*套接字*的接口.在所有现代Unix系统.Windows.macOS和其他一些平台上可用. 这个Python接口是用Python的面向对象 ...

最新文章

  1. 英伟达的STEAL AI让神经网络拥有更好的计算机视觉
  2. android cookie保存,android本地保存Cookie和还原到cookiestore
  3. 干货 | 云计算时代携程的网络架构变迁
  4. linux sort命令 性能,linux sort 命令详解
  5. Hadoop大数据——mapreduce的Distributed cache
  6. 老司机找BUG指南,赶紧拿走。。
  7. 13.Axis创建webservice客户端和服务端
  8. I.MX6 隐藏电池图标
  9. 微博粉丝精灵_腾讯与精灵宝可梦公司宣布合作开发新游戏
  10. vim下中文乱码问题解决办法
  11. Gstreamer官方教程汇总2---GStreamer concepts
  12. 处理键盘上升盖住文本框问题
  13. 图像处理基础(2):自适应中值滤波器(基于OpenCV实现)
  14. 机器视觉该怎么样系统学习
  15. matlab中变量的命名规则
  16. php组件缓冲区溢出漏洞,DNSTracer 1.9 缓冲区溢出漏洞(CVE-2017-9430)分析
  17. 模拟器安装app 报错误 INSTALL_FAILED_NO_MATCHING_ABIS
  18. python学习5(input函数)
  19. iOS高级面试题及部分答案
  20. 怎么精细化管理客户关系?企业微信CRM系统可以做到吗

热门文章

  1. 记一次sql优化之索引的引用
  2. CentOS下设置vim的tab键为4格
  3. Linux安装Jenkins
  4. [NOIP2016]愤怒的小鸟 状态压缩dp
  5. scrollview 与 listView 的显示不全问题
  6. 【卡法电子商务】-常用手机屏幕尺寸 ★★★★★
  7. lighttpd,thttpd,shttpd - 轻量级WebServer介绍
  8. LetCode-MSSQL超过5名学生的课
  9. glide工具类。加载显示原图片,显示圆角图片,gif图标显示
  10. Win7的市场份额终于超过XP了,以后可以逐渐考虑放弃ie6/7了!