import socket
from _socket import getdefaulttimeout
class MySocket(socket.socket):
"""重写服务器端socket"""
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# self.level 标志socket类型 0:普通服务器socket;1:accept得到的socket
self.level = 0 # 普通socket
def close(self):
super().close()
if self.level:
print("关闭服务器端accept得到的socket时要做的工作")
else:
print("关闭服务器普通socket时要做的工作")
def __del__(self):
super().__del__()
if self.level:
print("删除服务器端accept得到的socket时要做的工作")
else:
print("删除服务器普通socket时要做的工作")
def accept(self):
"""重写accept使其得到自己实现的socket"""
fd, addr = self._accept()
type = self.type & ~globals().get("SOCK_NONBLOCK", 0)
# 指向自己的socket类
sock = MySocket(self.family, type, self.proto, fileno=fd)
# self.level 标志socket类型 0:普通服务器socket;1:accept得到的socket
sock.level = 1
if getdefaulttimeout() is None and self.gettimeout():
sock.setblocking(True)
return sock, addr