1 Python 高级网络操作 - Python Advanced Network Operations 2 3 Half Open Socket, 4 一个单向的 socket 被称为 half open socket, 即数据只能在一个方向上传输. 5 Half Open Socket 是通过在 socket 对象上调用 shutdown() 方法得到. 6 shutdown 接收一个 numeric 类型的参数, 7 0 - 表示调用之后禁止读 8 1 - 表示调用之后禁止写 9 2 - 表示调用之后禁止读和写 10 一旦关闭了某一个方向(读/写), socket 就不能再在该方向上被重新打开了. 11 shutdown()是累计的, 也就是调用 shutdown(0) 再调用 shutdown(1) 跟 12 直接调用一个 shutdown(2) 效果是一样的. 13 14 Half Open Socket 通常被应用在一下儿 3 种情形中, 15 1, 想要确保所有写好的数据都已经被传送出去. 16 调用 shutdown()的时候, 只有在缓存里面的数据都被成功发出去后方法才会有返回. 17 2, 用来 debug, 捕获潜在的异常/错误. 18 Half Open Socket 是捕获试图写一个不可写的 socket, 或者读一个不可读 19 的 socket 的异常的好方法. 20 3, 在程序是用了 fork() 或 多线程的时候, 用来防止其他进程/线程的某些操作. 21 22 socket 超时 - socket timeout 23 settimeout(seconds) 24 对一个 socket 对象调用 settimeout(secs) 方法后, 如果经过在 sces 秒之内什么都 25 没有发生(读/写), 则会产生一个 socket.timeout 异常, 链接机会断开, 26 例子, 27 ... ... 28 sock, addr = S.accept() 29 sock.settimeout(9) 30 ... ... 31 32 结束标识, 33 通过 socket 传输不确定长度的字符串的会遇到一个问题 - 不知道什么时候数据发送结束. 34 通常,有两种方法可以解决这个问题, 35 1, 通过指定字符串结束标识符(尾) 36 这个标识符通常是一个 NULL 字符(python - '