UNIX网络编程——套接字选项

http://www.educity.cn/linux/1241288.html

有时候我们需要控制套接字的行为(如修改缓冲区的大小),这个时候我们就要学习套接字选项。

  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指定控制套接字的层次.可以取三种值:

  •   SOL_SOCKET:通用套接字选项.
  •   IPPROTO_IP:IP选项.
  •   IPPROTO_TCP:TCP选项.

  

  

  optname指定控制的方式(选项的名称)

optval获得或者是设置套接字选项.根据选项名称的数据类型进行转换

  返回值说明:

  成功执行时,返回0。失败返回-1,errno被设为以下的某个值  
EBADF:sock不是有效的文件描述词
EFAULT:optval指向的内存并非有效的进程空间
EINVAL:在调用setsockopt()时,optlen无效
ENOPROTOOPT:指定的协议层不能识别选项
ENOTSOCK:sock描述的不是套接字

  数据结构说明:

  1)结构:linger,它的声明如下:

  struct linger{
int l_onoff; //状态
int l_linger; //等待时间
};

  2)结构:timeval,它的声明如下:

  struct timeval{
time_t tv_sec; //秒
suseconds_t tv_usec; //微秒:百万分之一秒
};

  举例说明:

  SO_RCVBUF和SO_SNDBUF每个套接口都有一个发送缓冲区和一个接收缓冲区,使用这两个套接口选项可以改变缺省缓冲区大小。

  // 接收缓冲区
int nRecvBuf=32*1024; //设置为32K
setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));
//发送缓冲区
int nSendBuf=32*1024;//设置为32K
setsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int));

  注意:
    当设置TCP套接口接收缓冲区的大小时,函数调用顺序是很重要的,因为TCP的窗口规模选项是在建立连接时用SYN与对方互换得到的。对于客户,SO_RCVBUF选项必须在connect之前设置;对于服务器,SO_RCVBUF选项必须在listen前设置。

时间: 2024-10-12 15:27:21

UNIX网络编程——套接字选项的相关文章

UNIX网络编程——套接字选项(心跳检测、绑定地址复用)(转)

/* 设置套接字选项周期性消息检测连通性 心跳包. 心博.主要用于长连接. * 参数:套接字, 1或0开启, 首次间隔时间, 两次间隔时间, 断开次数 */ void setKeepAlive( int iSockfd , int iSockAttrOn, socklen_t iIdleTime , socklen_t iInterval , socklen_t iCount ){ setsockopt( iSockfd , SOL_SOCKET , SO_KEEPALIVE , (const

linux网络编程——套接字(socket)入门

1.套接字的基本结构 struct sockaddr 这个结构用来存储套接字地址. 数据定义: struct sockaddr { unsigned short sa_family; /* address族, AF_xxx */ char sa_data[14]; /* 14 bytes的协议地址 */ }; sa_family 一般来说,都是"AFINET". sa_data 包含了一些远程电脑的地址.端口和套接字的数目,它里面的数据是杂溶在一切的. 为了处理struct socka

网络编程 套接字socket 及 粘包

网络编程 套接字socket 及 粘包 sockt 初识 五层协议 : 从传输层包括传输层以下 , 都是操作系统帮我们封装的各种head socket套接字充当的就是内置模块的角色 socket 套接字,它存在于传输层与应用层之间的抽象层 避免你学习各层的接口以及协议的使用, socket已经封装好了所有的接口 . 直接使用这些接口或者方法即可 , 使用起来方便,提升开发效率 socket 就是一个模块 , 通过使用学习模块提供的功能 , 建立客户端与服务端的通信 套接字的工作流程(基于TCP和

网络编程套接字,osi七层架构各层协议最全讲解

目录 Socket原理 1.什么是Socket 2.网络中进程如何通信 2.1.本地进程间通信 2.2.网络中进程如何通信 3.Socket怎么通信 4.TCP/IP协议 4.1.概念 4.2.TCP的粘包问题以及数据的无边界性: 4.3.TCP数据报结构: 4.4.连接的建立(三次握手): 4.5.TCP四次握手断开连接 4.6.关于 TIME_WAIT 状态的说明 4.7优雅的断开连接–shutdown() 5.OSI模型 6.Socket常用函数接口及其原理 6.1.使用socket()函

Python网络编程—套接字属性

socket套接字属性 [1] sockfd.type 套接字类型 [2] sockfd.family 套接字地址类型 [3] sockfd.getsockname() 获取套接字绑定地址 [4] sockfd.fileno() 获取套接字的文件描述符 [5] sockfd.getpeername() 获取连接套接字客户端地址 [6] sockfd.setsockopt(level,option,value)功能:设置套接字选项参数: level 选项类别 SOL_SOCKEToption 具体

Linux 网络编程——套接字的介绍

套接字是一种通信机制(通信的两方的一种约定),凭借这种机制,不同主机之间的进程可以进行通信.我们可以用套接字中的相关函数来完成通信过程. 套接字的特性有三个属性确定,它们是:域(domain),类型(type),和协议(protocol). 套接字的域 域指定套接字通信中使用的网络介质.最常见的套接字域是 AF_INET,它是指 Internet 网络,许多 Linux 局域网使用的都是该网络,当然,因特网自身用的也是它. 套接字类型 流套接字(SOCK_STREAM): 流套接字用于提供面向连

<网络编程>套接字介绍

1.端口:IANA(Internet Assigned Numbers Authority)维护着一个端口号分配状况的清单. 众所周知的端口(0-1023):由IANA分配和控制,可能的话,相同的端口号尽可能分配给TCP,UDP和STCP的同一给定服务 已登记的端口(1024-49151):这些端口不受IANA控制, 动态.私用的端口(49152-65535):临时端口. 2.套接字:一个套接字对是一个定义该连接的两个端点的四元组.{本地IP,本地TCP端口号,外地IP,外地TCP端口号} 套接

网络编程-套接字(socket)

一.什么是套接字 套接字(socket)是计算机之前数据传输的工具,是有计算机系统提供的一个组件,是网络数据传输的软件设备. 二.TCP/IP协议 TCP/IP协议栈共分为4层(OSI规范分7层),tcp.udp就是基于socket的一种协议 三.套接字的分类 1.流式套接字(TCP) 它提供了一种可靠的.面向连接的双向通讯方式.适用于传输数据量大的场景. TCP的具有以下三项特征: 传输过程中数据不会丢失,面向连接的套接字会根据接收端的状态传输数据,如果传输出错还会提供重传服务 按序传输数据,

【python】网络编程-套接字常用函数