sendto函数的坑
测试unix数据报套接字时,一个程序收,一个程序发,分别绑定自己的socket。结果在收的部分,返回的发送方的地址总是空的,但是返回的地址长度又是对的。
while ( )
{
bzero(&clientaddr, sizeof(struct sockaddr_un));
slen = 0;
rn = recvfrom(fd,buf, sizeof(buf), ,(struct sockaddr *)&clientaddr, slen);
if ( rn == -)
{
perror("recvfrom");
}
buf[n] = ;
}
仔细对比unp的代码,发现 slen = 这行改成 slen = sizeof(strcut sockaddr_un) 结果就对了,细看man
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
=====================================================================================================================
If src_addr is not NULL, and the underlying protocol provides the
source address, this source address is filled in. When src_addr is
NULL, nothing is filled in; in this case, addrlen is not used, and
should also be NULL. The argument addrlen is a value-result argument,
which the caller should initialize before the call to the size of the
buffer associated with src_addr, and modified on return to indicate the
actual size of the source address. The returned address is truncated
if the buffer provided is too small; in this case, addrlen will return
a value greater than was supplied to the call.
红色部分指出,最后一个参数addrlen是一个"值-结果"的参数,赋给它的初始值用来指定拷贝到倒数第二个参数 src_addr 里面的字节数,返回实际值是实际的源地址结构的大小。当传入的参数小于输出的值,说明返回的源地址被截断了。
上面的例子中,传入的值为0,而输出的值大于0,明显这里有问题,未拷贝任何数据到返回的源地址clientaddr。
sendto函数的坑的更多相关文章
- C语言sendto()函数-经socket传送数据以及recvfrom函数《转》
相关函数:send, sendmsg, recv, recvfrom, socket 头文件:#include <sys/types.h> #include <sys/socke ...
- 关于DateTime自带的AddSeconds等函数的坑
在此记录一下今天在写一个进程查杀小程序时碰到的关于DateTime的问题: 第一次是用AddSeconds后的时间直接和DateTime.Now做相等判断. class Program { stat ...
- 日常踩坑——Dev C++ pow()函数的坑
坑 Dev C++ pow()函数 那年冬天,显示屏前坐着如喽啰,那时候我含泪发誓,再也不用Dev. 蓝桥杯官网给提供的版本,没办法bug也得硬着头皮用. 16年蓝桥杯的第八题 四平方和定理: 在De ...
- python 中 logging 模块的 log 函数以及坑
记录下吧,一个日志的函数,但有个坑是在调用函数时需要先将函数实例化为一个变量,否则进入某个循环时会多次刷新日志: """ 日志模块 """ ...
- python函数的坑
一.默认参数的坑,如果你的默认参数指向的是可变的数据类型,那么你无论调用多少次这个默认参数,都是同一个. def func(a,list=[]): list.append(a) return list ...
- [R]R下as.Date()函数的坑
问题描述: 在本地使用as.Date()函数从POSIXct类型中提取date时,出现了日期不一致的错误.导致处理数据时,总是出问题. 还好被领导发现数据有误,不然这个bug不知道还要潜伏多久.尽管如 ...
- javascript Date 函数的坑
Javascrip中对日期的解析.格式化简直是混乱不堪,各种的坑,攻城狮们多小心. 1. 不要用 Date("yyyy-mm-dd") 构造函数解析字符串. IE.firefo ...
- c++ memset 函数 及 坑
#include <string.h> #include <stdio.h> typedef struct ss{ int num; ][]; }tent; tent a; i ...
- PLS-00306:错误解决思路 - OracleHelper 执行Oracle函数的坑
如果你是像我一样初次使用Net+Oracle的结合,我想你会跟我一样,有很大的概率碰到这个问题 ==================================================== ...
随机推荐
- IOS NSNotification 通知
一. 先看下官方对NSNotification通知的解释 1. NSNotification 通知 @interface NSNotification : NSObject <NSCopying ...
- Java解决跨域问题
同源 URL由协议, 域名, 端口组成. 如果两个URL的协议, 域名, 端口相同, 那么这两个URL为同源. 同源策略 script, iframe, link 可以跨域加载一些静态资源, 比如脚本 ...
- Chino的成绩(chino的公开赛T3)
题目背景 曾经幻想过未来的风景 或许有着另外一片天 小镇的远方 有着深远的回忆 也有着富有深情的诗篇 题目描述 Chino非常注重自己的成绩 Chino有 m 种方式给自己增加 rp 以增加成绩,她的 ...
- [USACO1.5]数字三角形 Number Triangles
题目描述 观察下面的数字金字塔. 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大.每一步可以走到左下方的点也可以到达右下方的点. 7 3 8 8 1 0 2 7 4 4 4 5 ...
- 微信小程序INC自增自减MUL自乘问题
今天使用到微信小程序云开发中的数据库自增字段问题出现了错误 Uncaught (in promise) ReferenceError: _ is not defined 官方给出的INC方法文档 db ...
- shell重温---基础篇(连接数据库)
前几天分享了shell字符串操作,数组操作等,接下来回归到项目,进行数据库操作.按照一般情况来说,shell连接数据库基本上都是DB使用的,因为需要运行大量的sql啊什么的,所以都会封装到shell中 ...
- 1321. [ZJOI2012] 灾难
1321. [ZJOI2012] 灾难 ★★☆ 输入文件:catas.in 输出文件:catas.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 阿米巴是小强的 ...
- 1754-I Hate It 线段树(单点替换,区间最值)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- Oracle11.2.0.3 RAC配置ODBC成功案例记录
最终使用字符串如下: String url="jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = scan- ...
- Android adb shell启动应用程序的方法
在Android中,除了从界面上启动程序之外,还可以从命令行启动程序,使用的是命令行工具am. usage: am [subcommand] [options] start an Activity: ...