【问题标题】:How to set socket option IP_DONTFRAG in python?如何在 python 中设置套接字选项 IP_DONTFRAG?
【发布时间】:2018-08-09 15:09:14
【问题描述】:

如何使用 python 套接字在 IP 标头中设置 DONT_FRAGMENT 标志?

以下代码

socket.setsockopt(socket.IPPROTO_IP, socket.IP_DONTFRAG, 1)

给我这个错误:

AttributeError: 'module' object has no attribute 'IP_DONTFRAG'

有人有想法吗?

【问题讨论】:

  • 操作系统? Python 版本?也不确定在socket.IPPROTO_IP 上调用setsockopt 是否正确。 socket.setsockopt:更改名称 socket 以避免隐藏模块名称。更好:把你所有的代码放在这里,因为我怀疑还有其他错误。
  • Linux 版本 4.4.92-31-default (geeko@buildhost)(gcc 版本 4.8.5 (SUSE Linux))和 python 2.7
  • 下面负责创建套接字的代码片段

标签: python sockets setsockopt ip-protocol


【解决方案1】:
def create_sender_session(self):
    logging.debug("Create Sender Session")
    if (self.send_ip_ver == 6 or self.resp_ip_ver == 6):
        self.sender_socket = socket.socket(
            socket.AF_INET6, socket.SOCK_DGRAM)
        self.sender_socket.setsockopt(
            socket.IPPROTO_IPV6, socket.IPV6_TCLASS, self.tos)
        self.sender_socket.setsockopt(
            socket.IPPROTO_IPV6, socket.IPV6_UNICAST_HOPS, self.ttl)
    else:
        self.sender_socket = socket.socket(
            socket.AF_INET, socket.SOCK_DGRAM)
        self.sender_socket.setsockopt(
            socket.SOL_IP, socket.IP_TTL, self.ttl)
        self.sender_socket.setsockopt(
            socket.IPPROTO_IP, socket.IP_TOS, self.tos)
    self.sender_socket.setsockopt(
        socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    self.sender_socket.bind((self.send_addr, self.send_port))
    logging.info('Sender started: {}:{}'.format(
        self.send_addr, self.send_port))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 2011-07-19
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    相关资源
    最近更新 更多