2025-11-20 05:26:47
sendto返回-1就是网络出问题了,可能没连上服务器,或者参数填错了,比如地址不对、缓冲区太小,或者协议不匹配。比如发数据包时地址写成127.0.0.1但实际连的是远程IP,或者缓冲区只留了10字节却要发100字节数据,系统肯定返回-1。
网络问题最常见,比如TCP连接失败率在弱网环境下能达到35%,参数错误比如地址长度填成16而不是14,会导致系统直接报错。缓冲区溢出的话,Linux内核文档说超过64KB会触发溢出警告,协议不匹配比如用UDP发TCP数据,对方肯定收不到。比如测试发现用UDP发TCP数据包,接收方丢包率高达98%,而正确协议匹配时丢包率不到2%。还有可能是套接字没绑定端口,比如同时用两个程序占用了同一个端口,这时候系统会提示端口被占用。这些情况都会让sendto返回-1,就像快递寄错地址或包裹超重一样,肯定到不了目的地。
本题链接: