设置将原本阻塞io变为非阻塞io
方法1:sockfd.setblocking(bool)
方法2:sockfd.settimeout(sec)
from socket import *
from time import ctime,sleep
f = open('log.txt','a') #日志文件
s = socket()
s.bind('0.0.0.0',8888)
s.listen(5)
#设置套接字非阻塞,
#方法1:sockfd.setblocking(bool),参数默认为True,设置为false时则套接字变为非阻塞
#s.setblocking(False)
#方法2:设置超时时间sockfd.settimeout(sec)
s.settimeout(3)
while True:
try:
c,addr = s.accept()
print('Connect from',addr)
#设置为非阻塞后,不必一直等待,可以干点别的事
except (BlockingIOError,timeout) as e: #BlockIOError为方法1的报错,timeout为方法2的报错,通过捕捉异常后的代码实现一些事件
#当没有客户端连接我的时候,每隔2秒写个日志
sleep(2)
f.writer(ctime() + ':' + str(e) + '\n') #e是个对象,需要转为str
else:
data = c.recv(1024)
print(data)