Python: 使用select函数编写nonblocking TCP/IP socket程序

本文介绍了如何在Linux环境下使用Python的select函数实现非阻塞的TCP/IP socket编程。通过select函数,可以监控多个文件描述符的读、写和异常状态,并设定等待时间,以实现I/O复用。
摘要由CSDN通过智能技术生成

select函数的理解对于灵活运用socket函数编程有直接的影响,我们编写的网络库一般需要支持多连接,因此select提供的特性很好的满足了这一需求。关于select的解释可以参考: select(2) 

使用C或者C++编写一个实例程序相对比较麻烦,我们可以直接使用Python快速开发一个 nonblocking TCP/IP socket Demo来看一下select怎么应用到Socket网络编程。先说明在Python中的socket模块和select模块中提供的函数和  Linux Programmer's Manual中的定义基本相同,用法完全可以借鉴。

在Linux中,我们可以使用select函数实现I/O端口的复用,传递给 select函数的参数会告诉内核:
•我们所关心的文件描述符
•对每个描述符,我们所关心的状态。(我们是要想从一个文件描述符中读或者写,还是关注一个描述符中是否出现异常)
•我们要等待多长时间。(我们可以等待无限长的时间,等待固定的一段时间,或者根本就不等待)

从 select函数返回后,内核告诉我们一下信息:
•对我们的要求已经做好准备的描述符的个数
•对于三种条件哪些描述符已经做好准备.(读,写,异常)


socket函数是支持跨平台的,在Windows中也适用。

先看Echo Server的代码:
# echo server example
import select
import socket
import sys
import Queue

# Create a TCP/IP socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setblocking(0)

# Bind the socket to the port
server_address = ('localhost', 10000)
print >>sys.stderr, 'starting up on %s port %s' % server_address
server.bind(server_address)

# Listen for incoming connections
server.liste
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值