vtun中setsockopt fcntl等有关套接字设置
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等有关套接字设置相关推荐
- python socket多线程 获取朋友列表_python中的(多线程)套接字列表/数组
我对python有点陌生.我正在尝试在一个程序中创建和使用一个套接字列表/数组.所以我声明了一个数组,如下所示:myCSocks = ['CSock1', 'CSock2', 'CSock3', 'C ...
- java中套接字,如何在java中获得一个开放的套接字?
在 Java中,我如何获得一个开放的套接字?我有2个JFrame;在第一个JFrame中,我打开了Client socket的连接.在同一个JFrame中,我创建了另一个JFrame(JFrame2) ...
- 套接字设置为(非)阻塞模式
当socket 进行TCP 连接的时候(也就是调用connect 时),一旦网络不通,或者是ip 地址无效,就可能使整个线程阻塞.一般为30 秒(我测的是20 秒).如果设置为非阻塞模式,能很好的解决 ...
- C语言socket accept()函数(提取出所监听套接字的等待连接队列中第一个连接请求,创建一个新的套接字,并返回指向该套接字的文件描述符)
文章目录 名称 使用格式 功能参数描述 参数 sockfd addr addrlen 返回值 示例 man 2 文档中的accept解释 错误处理 名称 accept() 接收一个套接字中已建立的连接 ...
- java udp 同一个端口_java – 系统中的两个不同的UDP套接字可以绑定相同的端口吗?...
它与TCP和UDP之间的区别有关.当您创建TCP套接字时,您正在创建与另一台计算机上的端口的同步客户端连接,并且当您连接到地址时,您实际上也会在套接字上获得本地端口.因此,在您的示例代码中,创建的两个 ...
- 《UNIX环境编程》第十六章--网络IPC:套接字
Contents 套接字接口 套接字描述符 寻址 字节序 地址格式 地址查询 绑定地址 建立连接 数据传输 套接字选项 带外数据 UNIX域套接字 使用套接字的示例 面向连接的ruptime 无连接的 ...
- 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 ...
- Linux套接字聊天
Linux套接字 套接字是一种通信机制,凭借这种机制,客户/服务器系统的开发工作既可以在本地单机上进行,也可以跨网络进行. 套接字的特性有三个属性确定,它们是:域(domain),类型(type),和 ...
- 向一个无法连接的网络尝试了一个套接字操作_python3从零学习-5.8.1、socket—底层网络接口...
源代码: Lib/socket.py 这个模块提供了访问BSD*套接字*的接口.在所有现代Unix系统.Windows.macOS和其他一些平台上可用. 这个Python接口是用Python的面向对象 ...
最新文章
- 英伟达的STEAL AI让神经网络拥有更好的计算机视觉
- android cookie保存,android本地保存Cookie和还原到cookiestore
- 干货 | 云计算时代携程的网络架构变迁
- linux sort命令 性能,linux sort 命令详解
- Hadoop大数据——mapreduce的Distributed cache
- 老司机找BUG指南,赶紧拿走。。
- 13.Axis创建webservice客户端和服务端
- I.MX6 隐藏电池图标
- 微博粉丝精灵_腾讯与精灵宝可梦公司宣布合作开发新游戏
- vim下中文乱码问题解决办法
- Gstreamer官方教程汇总2---GStreamer concepts
- 处理键盘上升盖住文本框问题
- 图像处理基础(2):自适应中值滤波器(基于OpenCV实现)
- 机器视觉该怎么样系统学习
- matlab中变量的命名规则
- php组件缓冲区溢出漏洞,DNSTracer 1.9 缓冲区溢出漏洞(CVE-2017-9430)分析
- 模拟器安装app 报错误 INSTALL_FAILED_NO_MATCHING_ABIS
- python学习5(input函数)
- iOS高级面试题及部分答案
- 怎么精细化管理客户关系?企业微信CRM系统可以做到吗
热门文章
- 记一次sql优化之索引的引用
- CentOS下设置vim的tab键为4格
- Linux安装Jenkins
- [NOIP2016]愤怒的小鸟 状态压缩dp
- scrollview 与 listView 的显示不全问题
- 【卡法电子商务】-常用手机屏幕尺寸 ★★★★★
- lighttpd,thttpd,shttpd - 轻量级WebServer介绍
- LetCode-MSSQL超过5名学生的课
- glide工具类。加载显示原图片,显示圆角图片,gif图标显示
- Win7的市场份额终于超过XP了,以后可以逐渐考虑放弃ie6/7了!