zoukankan      html  css  js  c++  java
  • 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() 那么简单。
  • 相关阅读:
    增加文章
    网站之注册
    C#常用的引用
    Session.Abandon和Session.Clear有何不同 (转)
    C#文件路径的写法
    UpdatePanel的用法详解
    [转]asp:ScriptManager
    Git 常用命令
    AJAX请求 $.post方法的使用
    a 标签中调用js的几种方法
  • 原文地址:https://www.cnblogs.com/qiumingcheng/p/13778032.html
Copyright © 2011-2022 走看看