码迷,mamicode.com
首页 > 其他好文 > 详细

socket模块

时间:2018-09-12 18:07:57      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:level   http   sys   保留   端口   延时   异常   第一个   ftp   

socket模块

简介

socket即套接字,是用来建立网络通信连接的基础,大量的应用程序都是通过套接字来实现网络通信,诸如HTTP浏览器、RPC通信、FTP下载等。

使用

常见的TCP连接使用socket的通信原语,如bind/listen/accept/connect/recv/sendall等,这里我不会介绍以上通用的原语,我们讲讲一些其他的配置。

建立socket使用socket.socket(socket.AF_INET, socket.SOCK_STREAM)

其中第一个参数为协议族,约定了socket的地址类型;第二个参数为socket类型,指定了面向协议的类型;其实还有第三个隐藏的参数,用来指定协议类型,但通常为0,这使得第二个参数可以自动选择对应socket的内置协议。

AddressFamily

import socket

for af in iter(i for i in dir(socket) if i.startswith(‘AF_‘)):
    print(af)

协议族有socket.AF_INETsocket.AF_INET6,还有其他依赖于操作系统的协议族,可以通过上面的代码查看。

SocketKind

import socket

for sk in iter(i for i in dir(socket) if i.startswith(‘SOCK_‘)):
    print(sk)

socket类型通用的有socket.SOCK_STREAMsocket.SOCK_DGRAM,前者用于TCP连接,后者用于UDP连接,还有其它的依赖于操作系统的socket类型,通过上面代码查看。

配置

socket.setsockopt(level, optname, value),相关level和optname可以在查看<socket.h>文件或这里

level有一个常用的常量,SOL_SOCKET,是套接字级别的设置,而非协议层级别。

选择该level后可选设置有很多,用如下代码看下有哪些常量。

import socket

for consts in iter(i for i in dir(socket) if i.startswith(‘SO_‘))):
    print(consts)

SO_REUSEADDR

其值类型为布尔型整数(0或1),表示当socket断开连接后是否立即释放端口,默认为0,所以有时重启个人服务器会出现socket端口占用的异常,这是因为系统会自动保留一段时间socket端口。

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

sock.bind((ip or domain, port))

SO_KEEPALIVE

值类型布尔型整数,用于心跳检测(TCP协议栈四层),但只能检测连接是否存活,不能检测是否可用,并且网络故障导致的信息重传优先级比检测包高,会出现延时。

结论就是不好用,不如应用层的心跳检测。

socket模块

标签:level   http   sys   保留   端口   延时   异常   第一个   ftp   

原文地址:https://www.cnblogs.com/ikct2017/p/9636040.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!