Example #1
0
    def enablePktInfo(self, flag=1):
        if (not hasattr(self.socket, 'sendmsg')
                or not hasattr(self.socket, 'recvmsg')):
            raise error.CarrierError(
                'sendmsg()/recvmsg() interface is not supported by this OS and/or Python version'
            )

        try:
            if self.socket.family in (socket.AF_INET, socket.AF_INET6):
                self.socket.setsockopt(socket.SOL_IP, socket.IP_PKTINFO, flag)
            if self.socket.family == socket.AF_INET6:
                self.socket.setsockopt(socket.SOL_IPV6,
                                       socket.IPV6_RECVPKTINFO, flag)
        except socket.error:
            raise error.CarrierError(
                'setsockopt() for %s failed: %s' %
                (self.socket.family == socket.AF_INET6 and "IPV6_RECVPKTINFO"
                 or "IP_PKTINFO", sys.exc_info()[1]))

        self._sendto = sockmsg.getSendTo(self.addressType)
        self._recvfrom = sockmsg.getRecvFrom(self.addressType)

        debug.logger & debug.flagIO and debug.logger(
            'enablePktInfo: %s option %s on socket %s' %
            (self.socket.family == socket.AF_INET6 and "IPV6_RECVPKTINFO"
             or "IP_PKTINFO", flag and "enabled"
             or "disabled", self.socket.fileno()))
        return self
Example #2
0
    def enablePktInfo(self, flag=1):
        if (not hasattr(self.socket, 'sendmsg') or
                not hasattr(self.socket, 'recvmsg')):
            raise error.CarrierError(
                'sendmsg()/recvmsg() interface is not supported by this OS '
                'and/or Python version')

        try:
            if self.socket.family == socket.AF_INET:
                self.socket.setsockopt(socket.SOL_IP, socket.IP_PKTINFO, flag)

            if self.socket.family == socket.AF_INET6:
                self.socket.setsockopt(
                    socket.SOL_IPV6, socket.IPV6_RECVPKTINFO, flag)

        except socket.error as exc:
            raise error.CarrierError(
                'setsockopt() for %s failed: '
                '%s' % (self.socket.family == socket.AF_INET6 and
                        "IPV6_RECVPKTINFO" or "IP_PKTINFO", exc))

        self._sendto = sockmsg.getSendTo(self.ADDRESS_TYPE)
        self._recvfrom = sockmsg.getRecvFrom(self.ADDRESS_TYPE)

        debug.logger & debug.FLAG_IO and debug.logger(
            'enablePktInfo: %s option %s on socket '
            '%s' % (self.socket.family == socket.AF_INET6 and "IPV6_RECVPKTINFO"
                    or "IP_PKTINFO", flag and "enabled" or "disabled",
                    self.socket.fileno()))

        return self
Example #3
0
    def enablePktInfo(self, flag=1):
        if (not hasattr(self.socket, 'sendmsg')
                or not hasattr(self.socket, 'recvmsg')):
            raise error.CarrierError(
                'sendmsg()/recvmsg() interface is not supported by this OS '
                'and/or Python version')

        try:
            if self.socket.family == socket.AF_INET:
                self.socket.setsockopt(socket.SOL_IP, socket.IP_PKTINFO, flag)

            if self.socket.family == socket.AF_INET6:
                self.socket.setsockopt(socket.SOL_IPV6,
                                       socket.IPV6_RECVPKTINFO, flag)

        except socket.error as exc:
            raise error.CarrierError(
                'setsockopt() for %s failed: '
                '%s' %
                (self.socket.family == socket.AF_INET6 and "IPV6_RECVPKTINFO"
                 or "IP_PKTINFO", exc))

        self._sendto = sockmsg.getSendTo(self.ADDRESS_TYPE)
        self._recvfrom = sockmsg.getRecvFrom(self.ADDRESS_TYPE)

        debug.logger & debug.FLAG_IO and debug.logger(
            'enablePktInfo: %s option %s on socket '
            '%s' %
            (self.socket.family == socket.AF_INET6 and "IPV6_RECVPKTINFO"
             or "IP_PKTINFO", flag and "enabled"
             or "disabled", self.socket.fileno()))

        return self
Example #4
0
    def enablePktInfo(self, flag=1):
        if not hasattr(self.socket, 'sendmsg') or \
           not hasattr(self.socket, 'recvmsg'):
            raise error.CarrierError('sendmsg()/recvmsg() interface is not supported by this OS and/or Python version')

        try:
            if self.socket.family in (socket.AF_INET,socket.AF_INET6):
                self.socket.setsockopt(socket.SOL_IP, socket.IP_PKTINFO, flag)
            if self.socket.family == socket.AF_INET6:
                self.socket.setsockopt(socket.SOL_IPV6, socket.IPV6_RECVPKTINFO, flag)
        except socket.error:
            raise error.CarrierError('setsockopt() for %s failed: %s' % (self.socket.family == socket.AF_INET6 and "IPV6_RECVPKTINFO" or "IP_PKTINFO", sys.exc_info()[1]))

        self._sendto = sockmsg.getSendTo(self.addressType)
        self._recvfrom = sockmsg.getRecvFrom(self.addressType)

        debug.logger & debug.flagIO and debug.logger('enablePktInfo: %s option %s on socket %s' % (self.socket.family == socket.AF_INET6 and "IPV6_RECVPKTINFO" or "IP_PKTINFO", flag and "enabled" or "disabled", self.socket.fileno()))
        return self