socket属性控制
2006-11-02 20:30
155 查看
1高级套接字函数 getsockopt和setsockopt
int getsockopt(int sockfd,int level,int optname,void *optval,socklen_t *optlen)int setsockopt(int sockfd,int level,int optname,const void *optval,socklen_t *optlen)
level指定控制套接字的层次.可以取三种值:
1)SOL_SOCKET:通用套接字选项.
2)IPPROTO_IP:IP选项.
3)IPPROTO_TCP:TCP选项.
对应的optname详细说明
optname指定控制的方式(选项的名称).
选项名称 说明 数据类型
======================================================================
SOL_SOCKET
SO_BROADCAST 允许发送广播数据 int
SO_DEBUG 允许调试 int
SO_DONTROUTE 不查找路由 int
SO_ERROR 获得套接字错误 int
SO_KEEPALIVE 保持连接 int
SO_LINGER 延迟关
SO_OOBINLINE 带外数据放入正常数据流 int
SO_RCVBUF 接收缓冲区大小 int
SO_SNDBUF 发送缓冲区大小 int
SO_RCVLOWAT 接收缓冲区下限 int
SO_SNDLOWAT 发送缓冲区下限 int
SO_RCVTIMEO 接收超时 struct timeval
SO_SNDTIMEO 发送超时 struct timeval
SO_REUSERADDR 允许重用本地地址和端口 int
SO_TYPE 获得套接字类型 int
SO_BSDCOMPAT 与BSD系统兼容 int
IPPROTO_IP
IP_HDRINCL 在数据包中包含IP首部 int
IP_OPTINOS IP首部选项 int
IP_TOS 服务类型
IP_TTL 生存时间 int
IPPRO_TCP
TCP_MAXSEG TCP最大数据段的大小 int
TCP_NODELAY 不使用Nagle算法 int
optval获得或者是设置套接字选项.根据选项名称的数据类型进行转换 ,有时是套接字选项.ON或者OFF等
2 高级套接字函数 ioctl
int ioctl(int fd,int req,...)ioctl可以控制所有的文件描述符的情况,这里介绍一下控制套接字的选项.
ioctl的控制选项
SIOCATMARK 是否到达带外标记 int
FIOASYNC 异步输入/输出标志 int
FIONREAD 缓冲区可读的字节数 int
详细的选项请用 man ioctl_list 查看.
3 高级套接字函数 fcntl
status = fcntl (hand, option, mode ) ;上述fcntl函数调用中,各参数定义如下:
handle:已打开的文件句柄。
option:一般可以是下列两种值:
F_GETFL:表示读取文件状态值。
F_SETFL:表示设置文件状态值。
(注意:F_GETFL和F_SETFL都被定义在fcntl.h)
mode:如果optipn是F_GETFL,则这个参数值可以是任意值。如果是F_SETFL,则参数值可以是下列值:
O_WRONLY:将文件设置成只写状态。
O_RDWR: 将文件设置成读写状态。
O_RDONLY:将文件设置成只读状态。
status:函数会将调用结果赋给status,如运行失败,则status的值会被设成-1。
使用实例:
实例1:setsockopt
//使得地址可被重用
int optavl3=1;
int optlen3 = sizeof(int);
getsockopt(s, SOL_SOCKET, SO_REUSEADDR, &optavl3, &optlen3);
实例2:fcntl
//设置socket非阻塞
void setnonblocking(int sock)
...{
int opts;
opts = fcntl(sock, F_GETFL);
if (opts < 0)
...{
perror("fcntl(sock, GETFL)");
exit(1);
}
opts = opts|O_NONBLOCK;
if (fcntl(sock, F_SETFL, opts) < 0)
...{
perror("fcntl(sock, SETFL, opts)");
exit(1);
}
}
相关文章推荐
- 【原创】《Linux高级程序设计》杨宗德著 - TCP高级应用 - socket文件描述符属性控制
- Linux网络编程 - TCP高级应用:socket文件描述符属性控制
- 【原创】《Linux高级程序设计》杨宗德著 - TCP高级应用 - socket文件描述符属性控制 分类: Linux --- 应用程序设计 2014-12-06 10:26 61人阅读 评论(0) 收藏
- Knockoutjs实例 - 属性绑定(Bindings)之流程控制(Control flow)
- 进程的基本属性:进程ID、父进程ID、进程组ID、会话和控制终端
- js鼠标及对象坐标控制属性详细解析
- silverlight中用代码动态控制Storyboard(动画)属性的三种方法
- 代码控制ImageView的src属性
- 用Java语言中的socket编程实现jsp页面与网关的链接并且不间断发送控制数据
- 学习笔记---元数据、程序集、GAC版本控制、属性(Attribute)、反射(利用.NET编译器实现表达式计算器)
- 如何实现Fragment中控件动态控制ListView子控件属性
- Android中用于控件控制焦点的属性
- 如何绑定PasswordBox控制中的Password属性
- ios 的 字段、方法、属性的访问权限控制
- [分享] WEB标准 - target 属性怎么用 JS 来控制?
- 用CSS动态控制文本属性
- JSP自定义标签_通过属性控制标签体的执行次数
- 控制textarea长度 textarea的maxlength属性一样有效果
- jquery 控制 table的margin-top属性
- socket属性设置