麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Python > 正文

python使用epoll實現服務端的方法

2020-02-15 23:15:11
字體:
來源:轉載
供稿:網友

如下所示:

#!/usr/bin/python# -*- coding: UTF-8 -*-import socketimport selectsend_data = "hello world!"send_len = len(send_data)recv_len = 1024tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)tcp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)addr = ("0.0.0.0", 8765)tcp_socket.bind(addr)tcp_socket.listen(5)tcp_socket.setblocking(False)epoll = select.epoll()'''(邊緣觸發)select.EPOLLIN | select.EPOLLET'''epoll.register(tcp_socket.fileno(), select.EPOLLIN)'''因為epoll返回的觸發事件對應的是套接字文件描述符,所以需要在字典中加入對應關系'''fd_to_socket = {tcp_socket.fileno():tcp_socket}while True : events = epoll.poll(-1) for fd, event in events:  fd_socket = fd_to_socket[fd]  if fd == tcp_socket.fileno():   while True:    try:     new_socket, new_addr = fd_socket.accept()    except socket.error as e:     (errno, err_msg) = e     print errno     print err_msg     if errno == 11:      break    print "new accpet:", new_addr    new_socket.setblocking(False)    new_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)    epoll.register(new_socket.fileno(), select.EPOLLIN)    fd_to_socket[new_socket.fileno()] = new_socket  elif event&select.EPOLLIN:   recv_datas = []   recd = 0   while (recd < recv_len):    try:     recv_data = fd_socket.recv(recv_len - recd)     '''處理讀的正常關閉'''     if recv_data == "":      print "close socket"      epoll.unregister(fd)      fd_to_socket[fd].close()      del fd_to_socket[fd]      break     else:      recv_datas.append(recv_data)      recd = recd + len(recv_data)    '''處理異常關閉(EAGAIN,EINTR)'''    except socket.error as e:     (errno, err_msg) = e     print errno     print err_msg     '''因為用的水平觸發,EAGAIN我們跳出循環,等待下次觸發再讀就好了'''     if errno == 11:      break     '''軟中斷打斷了還要繼續讀'''     elif errno == 4:      continue     '''其它錯誤我們直接關閉套接字'''     else:      print "close socket"      epoll.unregister(fd)      fd_to_socket[fd].close()      del fd_to_socket[fd]      break    print repr(recv_datas)    total_send = 0    while total_send < send_len:     sent = fd_socket.send(send_data[total_send:])     if sent == 0:      print "close socket"      epoll.unregister(fd)      fd_to_socket[fd].close()      del fd_to_socket[fd]      break     else:      print repr(send_data[total_send:])      total_send = total_send + sent

其實這里的異常處理我們也可以用

except IOError as e:  print e.errno  print e.strerror

以上這篇python使用epoll實現服務端的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林站長站。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 99欧美视频| 中国产一级毛片 | 黄色成人小视频 | 成年人黄色免费电影 | 国产精品91在线 | 久久久久se | 免费视频www在线观看 | 国产成人高清在线观看 | 国产精品久久久久免费视频 | 成年性羞羞视频免费观看无限 | 污污网站入口 | 一级黄色免费观看 | 九九热精品在线视频 | 国产精品视频自拍 | 亚洲精品成人在线视频 | 狠狠操天天射 | 99精品视频免费看 | av成人免费在线观看 | 国产亚洲精品久久久久久久久久 | 久草在线新时代视觉 | 国产日韩欧美一区 | 精品在线观看一区 | 中国漂亮护士一级a毛片 | a级毛片免费观看在线播放 日本aaa一级片 | 欧美成人综合视频 | 黄色网址在线播放 | 污污的视频在线观看 | 成人午夜淫片a | 天天草天天干天天 | 最新av网址在线观看 | 免费黄色成人 | 黄色毛片免费看 | 久久久视频免费观看 | 中国hdxxxx护士爽在线观看 | 日本在线高清 | 色淫影院 | videos高潮 | 亚洲成人久久精品 | 男人午夜小视频 | 中文字幕www. | 伊人av影院 |