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() 那么简单。
  • 相关阅读:
    关于区间数颜色的主席树解决
    1020考试总结
    QR算法
    新的征程
    端点星2020.12.2联赛
    自我介绍&友链
    3个搜索
    搜索格式这样写
    T107073 归并排序
    还有这个题
  • 原文地址:https://www.cnblogs.com/qiumingcheng/p/13778032.html
Copyright © 2011-2022 走看看