You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.4 UDP吞吐量测试脚本sendmsg方法报错求助

嘿,我之前在Python 3.4+CentOS7.4环境下做UDP吞吐量测试时,也踩过sendmsg的坑,结合你描述的场景,咱们一步步来排查解决:

一、先明确Python 3.4中sendmsg的核心差异

Python 3.4的sendmsg()参数规则和3.5+版本有明显区别,很多时候报错都是因为照搬了高版本或参考文章里的写法。核心要求如下:

  • 第一个参数必须是字节串的列表:哪怕只发单包数据,也要用[b'your_test_data']格式,不能直接传单个字节串
  • 第二个参数是辅助数据(ancillary data)列表:不需要的话直接传空列表[],别乱传不符合(level, type, data)三元组格式的内容
  • 必须显式指定address参数:Python3.4里sendmsg不像sendto,如果没提前connect,必须手动传入目标(ip, port)
二、系统层面的UDP缓冲区限制排查

CentOS7.4默认UDP发送缓冲区很小,做吞吐量测试时容易触发报错,先临时调整系统参数:

# 临时调整UDP发送缓冲区最大值和默认值
sysctl -w net.core.wmem_max=16777216
sysctl -w net.core.wmem_default=8388608

同时在Python脚本里同步设置socket缓冲区:

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 设置缓冲区大小,不能超过系统的wmem_max
sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 8388608)
三、常见报错的针对性解决

你提到的Traceback没贴全,但结合场景,常见错误和解决方法如下:

  • TypeError: sendmsg() takes at least 2 arguments (1 given):参数缺失,按前面说的格式补全所有必填参数
  • OSError: [Errno 22] Invalid argument:辅助数据格式错误,直接传空列表[]即可
  • OSError: [Errno 10040] Message too long:UDP单包超过MTU(默认1500字节),把单包数据控制在1472字节以内(减去IP+UDP头的28字节)
四、可用的Python3.4兼容客户端示例

给你写一个适配场景的UDP吞吐量测试客户端脚本:

import socket
import sys

def main():
    if len(sys.argv) != 3:
        print("Usage: python udp_send.py <server_ip> <port>")
        sys.exit(1)
    
    server_ip = sys.argv[1]
    port = int(sys.argv[2])
    
    # 创建UDP socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    # 设置发送缓冲区
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 8388608)
    
    print("Connecting...")
    # 构造1024字节的测试数据包(符合MTU限制)
    test_data = b'x' * 1024
    
    try:
        # Python3.4标准sendmsg用法
        while True:
            sock.sendmsg([test_data], [], 0, (server_ip, port))
    except KeyboardInterrupt:
        print("\nStopped sending.")
        sock.close()
        sys.exit(0)
    except Exception as e:
        print(f"Error: {e}")
        sock.close()
        sys.exit(1)

if __name__ == "__main__":
    main()

内容的提问来源于stack exchange,提问作者vmoralito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:42:57