python socket timeout设置

需要在调用socket的connect方法之前设置settimeout(time)方法,另外在设置之后要将再次调用settimeout(None)来设置socket进入阻塞模式。

如下代码示例:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(10)
sock.connect(address)
sock.settimeout(None)
fileobj = sock.makefile(‘rb‘, 0)

原来,socket 一旦设置了timeout, 就进入了 non-blocking 工作模式,原来的 send() 和 recv() 等的用法就完全不同了,可能会只发送或者接收了部分数据,需要检查返回值并多次重试。甚至,makefile() 是完全不允许使用的,它已经在 socket 模块的文档中明确声明,不过如果不是在这里栽过跟头很少会注意到这点。

明确了这一点,就可以写出在 non-blocking 模式工作的正确代码,会复杂不少,尤其处理一开始不能确定数据长度的文本协议。

阻塞和非阻塞是完全两种不同的使用方法,并不是添加一个socket.settimeout() 那么简单。
时间: 2024-08-09 21:46:18

python socket timeout设置的相关文章

python socket 超时设置 errno10054

python socket.error: [Errno 10054] 远程主机强迫关闭了一个现有的连接.问题解决方案: 前几天使用python读取网页.因为对一个网站大量的使用urlopen操作,所以会被那个网站认定为攻击行为.有时就不再允许下载.导致urlopen()后,request.read()一直卡死在那里.最后会抛出errno 10054. 这 个错误是connection reset by peer.也就是传说的远端主机重置了此连接.原因可能是socket超时时间过长:也可能是req

python socket windows防火墙设置问题

python socket 在本机跑成功后 在服务器端 将服务器端的代码放上去 却发现 跑不动 关掉服务器的windows 防火墙 就没有问题了 可以跑 但是 担心不安全:在服务器防火墙的高级安全设置 里面 新建 入站规则 选择 端口  然后 现在TCP 和连接的端口 就ok啦

Python Socket编程(一)

Python 提供了两个级别访问的网络服务:1.Socket:低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法.2.SocketServer:高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发. 今天,我们就来初步了解学习一下Socket模块. 什么是 Socket?Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求

python socket编程详细介绍

Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发. 下面讲的是Socket模块功能 1.Socket 类型 套接字格式: socket(family,type[,protocal]) 使用给定的地址族.套接字类型.协议编号(默认为0)来创建套接字. socket类型 描述 socket.AF_UNIX 只能够用于单一的Unix系统进程

Python socket应用

Server端: #-*- coding: UTF-8 -*- import socket,time host='192.168.0.9' port=12307 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #定义socket类型 s.bind((host,port)) #绑定需要监听的Ip和端口号,tuple格式 s.listen(1) #开始监听TCP传入连接.指定最多允许多少个客户连接到服务器.它的值至少为1.收到连接请求后,这些请求

一小时学会用Python Socket 开发可并发的FTP服务器!!

socket是什么 什么是socket所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求.说白了就是一种通信机制.它类似于银行,电信啊这些部分的电话客服部门.你打电话的时候,那边会分配置一个人回答你的问题,客服部门就相当于socket的服务器端了,你这边呢就相当于客户端了,在和你通话结束前,如果有人在想找和你通话的那个说话,是不可能的,因为你在和他通信,当然客服部门的电话交换机也

Python——socket

目录: 异常 地址族 套接字类型 模块方法 Socket对象与实例方法 socket模块提供了Python中的低层网络连接接口,用于操作套接字操作. 异常 socket模块共定义了4种异常: socket.error 套接字相关的错误将会抛出该异常,伴随的值是解释错误信息的字符串或 (errno, string) 形式的系统调用异常返回.现在socket.error是IOError的一个子类. socket.herror 地址相关的错误.C API 调用等可能会抛出该异常,例如使用 h_errn

python socket模拟游戏开服

python socket服务端 #!/usr/bin/python #-*- coding: utf-8 -*- import socket import os,sys host='127.0.0.1' #监听的IP port=60000       #监听的端口 buffer=1024      #接受的字节数 sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)  #建立socket对象 sock.bind((host,port)) #

Python socket模拟HTTP请求

0x00 起 最近在做一个对时间要求比较高的扫描器,需要封装一下SOCKET模拟HTTP发包的一些常用函数.简单的说,就是重写一下requests中的get.post方法. 今天在写的时候,遇到一枚很奇怪的问题,对同一个URL,POST请求能正常返回信息,而一旦切到GET,socket time out. 伪代码如下: get_str = 'GET %s HTTP/1.1\r\nHost: %s\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64)