QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1957|回复: 1

一个linux下的udp编程问题!!!

[复制链接]
发表于 2004-2-6 12:15:56 | 显示全部楼层 |阅读模式
我在用udp协议的接收函数recvfrom()时,出现了问题:
int RawSock::receive(void *buf,int buflen,struct sockaddr *from,int *len)
{
        while(1)
        {
             int length = recvfrom(sock,buf,buflen,0,from,len); //line 133
        }
}
我编译时,出现:
[root@localhost Ping]# g++ ping.c -o ping
ping.c: In member function `int RawSock::receive(void*, int, sockaddr*, int*)'
:
ping.c:133: invalid conversion from `int*' to `socklen_t*'
然后,我把133行该为:
       int length = recvfrom(sock,buf,buflen,0,from,(socklen_t *)(sizeof(struc
t sockaddr)));
这时编译没有问题了,但是程序运行时候,出现接收Receive()错误!
请高手帮忙,我是错在那里拉?
发表于 2004-2-6 12:53:12 | 显示全部楼层
1,
你上面的写法是错的:
(socklen_t *)(sizeof(struct sockaddr))

你把一个整形数据强制转换成pointer类型怎么会对?

写成
int size=sizeof(struct sockaddr);
(socklen_t *)(&size);

&size 是整形的指针,把他转换成socklen_t形的指针

2,
如果你声明成int类型,你就用gcc编译,不会有问题。

3,
或者你把这个变量声明成socklen_t形的,这时候用什么都没有问题了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 09:45 , Processed in 0.065122 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表