Python 服务器socket关闭后自动执行工作

重写原socket的一些方法来实现 

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值