一。int socket(int domain, int type, int protocol)

1.domain -- 指定使用何种的地址类型

PF_INET, AF_INET: Ipv4网络协议
PF_INET6, AF_INET6: Ipv6网络协议

AF = Address Family
PF = Protocol Family

2.type -- 设置通信的协议类型

SOCK_STREAM: 提供面向连接的稳定数据传输,即TCP协议。
OOB: 在所有数据传送前必须使用connect()来建立连接状态。
SOCK_DGRAM: 使用不连续不可靠的数据包连接。
SOCK_SEQPACKET: 提供连续可靠的数据包连接。
SOCK_RAW: 提供原始网络协议存取。
SOCK_RDM: 提供可靠的数据包连接。
SOCK_PACKET: 与网络驱动程序直接通信。

3.protocol -- 指定socket所使用的传输协议编号

这一参数通常不具体设置,一般设置为0即可

二。socket.setsockopt(level, optname, value)

在套接字级别上(SOL_SOCKET),option_name可以有以下取值:

SO_DEBUG,打开或关闭调试信息。

SO_REUSEADDR,打开或关闭地址复用功能。

SO_DONTROUTE,打开或关闭路由查找功能。

SO_BROADCAST,允许或禁止发送广播数据。

SO_SNDBUF,设置发送缓冲区的大小。其上限为256 * (sizeof(struct sk_buff) + 256),下限为2048字节。

SO_RCVBUF,设置接收缓冲区的大小。上下限分别是:256 * (sizeof(struct sk_buff) + 256)和256字节。

SO_KEEPALIVE,套接字保活。

SO_OOBINLINE,紧急数据放入普通数据流。

SO_NO_CHECK,打开或关闭校验和。

SO_PRIORITY,设置在套接字发送的所有包的协议定义优先权。

SO_LINGER,如果选择此选项, close或 shutdown将等到所有套接字里排队的消息成功发送或到达延迟时间后才会返回. 否则, 调用将立即返回。

SO_PASSCRED,允许或禁止SCM_CREDENTIALS 控制消息的接收。

SO_TIMESTAMP,打开或关闭数据报中的时间戳接收。

SO_RCVLOWAT,设置接收数据前的缓冲区内的最小字节数。

SO_RCVTIMEO,设置接收超时时间。

SO_SNDTIMEO,设置发送超时时间。

SO_BINDTODEVICE,将套接字绑定到一个特定的设备上。

SO_ATTACH_FILTER和SO_DETACH_FILTER。

三。TCP可靠,UDP不可靠的原因--SO_RCVBUF 、SO_SNDBUF

每个TCP socket在内核中都有一个发送缓冲区和一个接收缓冲区,TCP的全双工的工作模式以及TCP的滑动窗口便是依赖于这两个独立的buffer以及此

buffer的填充状态。接收缓冲区把数据缓存入内核,应用进程一直没有调用read进行读取的话,此数据会一直缓存在相应socket的接收缓冲区内。

再啰嗦一点,不管进程是否读取socket,对端发来的数据都会经由内核接收并且缓存到socket的内核接收缓冲区之中。read所做的工作,就是把内核缓

冲区中的数据拷贝到应用层用户的buffer里面,仅此而已。

进程调用send发送的数据的时候,将数据拷贝进入socket的内核发送缓冲区之中,然后send便会在上层返回。换句话说,send返回之时,数据不一定

会发送到对端去,send仅仅是把应用层buffer的数据拷贝进socket的内核发送buffer中。

每个UDP socket都有一个接收缓冲区,没有发送缓冲区,从概念上来说就是只要有数据就发,不管对方是否可以正确接收

对于TCP,如果应用进程一直没有读取,buffer满了之后,发生的动作是:通知对端TCP协议中的窗口关闭。这个便是滑动窗口的实现。保证TCP套接口

接收缓冲区不会溢出,从而保证了TCP是可靠传输。因为对方不允许发出超过所通告窗口大小的数据。 这就是TCP的流量控制,如果对方无视窗口大小

而发出了超过窗口大小的数据,则接收方TCP将丢弃它。 对于UDP,当套接口接收缓冲区满时,新来的数据报无法进入接收缓冲区,此数据报就被丢弃。

python socket 选项的更多相关文章

  1. python socket和socketserver

    Python提供了两个基本的socket模块.一个是socket,它提供了标准的BSD Socket API:另一个是socketServer,它提供了服务器中心类,可以简化网络服务器的开发. 下面先 ...

  2. PYTHON SOCKET编程简介

    原文地址: PYTHON SOCKET编程详细介绍   Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 Soc ...

  3. Python Socket网络编程详解

    Socket 简介 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. s ...

  4. Python socket 基础(Server) - Foundations of Python Socket

    Python socket 基础 Server - Foundations of Python Socket 通过 python socket 模块建立一个提供 TCP 链接服务的 server 可分 ...

  5. python socket理解

    socket 所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象.一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制.从所处的地位来讲 ...

  6. Python Socket 编程——聊天室示例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...

  7. Python Socket 网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

  8. Socket编程基础——Socket选项

    有些情况下,我们需要对Socket行为和属性进一步控制,例如修改缓冲区大小,查看Socket状态,这就需要设置/获取Socket选项. 1.获取Socket选项int getsockopt(SOCKE ...

  9. python socket发送魔法包网络唤醒开机.py

    python socket发送魔法包网络唤醒开机.py 现在的电脑应该都普遍支持有线网络的WOL了,支持无线网络唤醒的电脑,可能比较少. """ python socke ...

随机推荐

  1. A Walk Through the Forest[HDU1142]

    A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  2. Distributed RPC —— 分布式RPC

    This tutorial showed how to do basic stream processing on top of Storm. There's lots more things you ...

  3. win8 中实现断点续传

    1) Resume method does resume on cases where resume is possible. Meaning if the server accepts range- ...

  4. BZOJ4143 [AMPPZ2014]The Lawyer

    Description Byteasar要制订m天的会议计划,一共有n场会议,第i场会议开始于第d[i]天的第a[i]秒,结束于第d[i]天的第b[i]秒. 对于每一天,请找出这一天的两场会议i,j, ...

  5. Mock模拟后台数据接口--再也不用等后端的API啦

    ok,在开发中经常需要从后台获取数据,那么有时候后台的数据接口并没有写好,所以这时候,就需要自己模拟数据接口,来实现前端逻辑, 今天数的就是阿里巴巴的一款mock产品,很好用的哦!!!! ok!这是我 ...

  6. asp.net 微信企业号办公系统-流程设计--保存与发布

    如果流程未设计完时可以先保存,以后再打开接着设计.点击工具栏上的保存按钮即可保存当前流程设计: 如果下次要接着设计,则可以打开该流程继续设计: 如果流程设计完成,可以点击安装按钮来发布流程,流程安装成 ...

  7. Intent学习笔记

    Intent首先字面意思大概是意图.负责activity之间或者,activity与service等(我只知道这么点)之间信息的传递.就跟快递员起的作用差不多(我这这么理解),由一下六部分组成: Co ...

  8. JavaScript - 时间函数

    时间美化函数 /* 1.< 60s, 显示为“刚刚” 2.>= 1min && < 60 min, 显示与当前时间差“XX分钟前” 3.>= 60min &am ...

  9. lucene索引日期和数字

    1.用途. 索引数字的场景主要有两种:一是把它们当作字符串一样处理,比如“要是搁以前,术士能暴击10000多,有木有!”中的"10000",它和其它的词没什么区别,你可以把它仅仅想 ...

  10. Beetl2.2使用说明书20151201

    李家智<xiandafu@126.com> Table of Contents 1. 什么是Beetl 2. 基本用法 2.1. 从GroupTemplate开始 2.2. 模板基础配置 ...