herowc 发表于 2004-2-6 12:15:56

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

我在用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
      }
}
我编译时,出现:
# 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()错误!
请高手帮忙,我是错在那里拉?

cjacker 发表于 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形的,这时候用什么都没有问题了。
页: [1]
查看完整版本: 一个linux下的udp编程问题!!!