博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
recvfrom的参数
阅读量:5022 次
发布时间:2019-06-12

本文共 1514 字,大约阅读时间需要 5 分钟。

今天遇到一个奇怪的问题。

linux环境下gcc,socket中UDP的recvfrom函数原型

ssize_t recvfrom(int sockfd,void *buf,int len,unsigned int flags, struct sockaddr *from,socket_t *fromlen);

网上给出的最基本的UDP—echo服务器测试基本的是可以的。

关于recvfrom的代码如下

char buf[BUFF_SIZE];    struct sockaddr_in their_addr;     int sin_size;    memset(buf,len,0);    retval = recvfrom(sockfd, buf, len, 0,(struct sockaddr *)&their_addr, &sin_size);    printf("%s\t%s\n",inet_ntoa(their_addr.sin_addr),buf);

但我要定义个消息结构体msg_t,它封装了sockaddr_in和sin_size;

 

typedef struct msg_buf{    int sockfd;    struct sockaddr_in their_addr;  /* 连接对方的地址信息 */    int sin_size;    char buf[BUFF_SIZE];        size_t len;    struct msg_buf *next;}msg_buf_t;

 

所以关于recvfrom的代码变成

struct msg_buf     *recvmsg = get_msgbuf();    size_t len = sizeof(recvmsg->buf);    char *buf  = recvmsg->buf;    memset(buf,len,0);    retval = recvfrom(sockfd, buf, len, 0,(struct sockaddr *)&(recvmsg->their_addr), &(recvmsg->sin_size));    printf("%s\t%s\n",inet_ntoa(recvmsg->their_addr.sin_addr),buf);

第一种情况,输出正确的IP地址

第二章情况,得到0.0.0.0

如果更正的话

必须是一和二的组合,代码如下

struct msg_buf     *recvmsg = get_msgbuf();        size_t len = sizeof(recvmsg->buf);        char *buf  = recvmsg->buf;        struct sockaddr_in their_addr;         int sin_size;        retval = recvfrom(sockfd, buf, len, 0,                          (struct sockaddr *)&their_addr, &sin_size);        //封装消息        recvmsg->their_addr = their_addr;        recvmsg->sin_size = sin_size;

不知是什么原因。

 

转载于:https://www.cnblogs.com/westfly/archive/2012/04/13/2446334.html

你可能感兴趣的文章
使用”结构化的思考方式“来编码和使用”流程化的思考方式“来编码,孰优孰劣?...
查看>>
C#调用斑马打印机打印条码标签(支持COM、LPT、USB、TCP连接方式和ZPL、EPL、CPCL指令)【转】...
查看>>
关于git的认证方式
查看>>
字符串按照字典序排列
查看>>
IOS 开发调用打电话,发短信
查看>>
CI 框架中的日志处理 以及 404异常处理
查看>>
keepalived介绍
查看>>
css3 标签 background-size
查看>>
python itertools
查看>>
Linux内核调试技术——jprobe使用与实现
查看>>
样式、格式布局
查看>>
ubuntu设计文件权限
查看>>
Vue双向绑定原理详解
查看>>
Android基础总结(5)——数据存储,持久化技术
查看>>
关于DataSet事务处理以及SqlDataAdapter四种用法
查看>>
bootstrap
查看>>
http://lorempixel.com/ 可以快速产生假图
查看>>
工程经验总结之吹水"管理大境界"
查看>>
为什么JS动态生成的input标签在后台有时候没法获取到
查看>>
20189210 移动开发平台第六周作业
查看>>