关于SCOKET 编程

内核编译和嵌入式产品的设计与开发
回复
yzb1658
帖子: 1
注册时间: 2008-01-27 21:36

关于SCOKET 编程

#1

帖子 yzb1658 »

在SOCKET的编写中发现这样一个问题,就是accpet的传递的参数中使用socklen_t这个数据类型,不知道是什么类型,在原来使用int的类型,使用gcc编译的时候老是提示类型不对不知道为什么:
具体如下:
原型:
extern int accept (int __fd, __SOCKADDR_ARG __addr,socklen_t *__restrict __addr_len);
编程
int sin_size,portnumber;
sin_size=sizeof(struct sockaddr_in);
if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))==-1)
编译结果:
TCPServer.C:63: 错误: 从类型 ‘int*’ 到类型 ‘socklen_t*’ 的转换无效
TCPServer.C:63: 错误: initializing argument 3 of ‘int accept(int, sockaddr*, socklen_t*)’

为什么?
mrs.young
帖子: 8
注册时间: 2008-03-10 12:16

#2

帖子 mrs.young »

呵呵 , 你可以去查一下头文件 看看定义的

/usr/include/sys/socket.h 中包含 这个 /usr/include/bits/socket.h 头文件
此头文件有如下定义

#ifndef __socklen_t_defined
typedef __socklen_t socklen_t;
# define __socklen_t_defined

在/usr/include/bits/types.h中

__STD_TYPE __U32_TYPE __socklen_t;

其中还包括
#if __WORDSIZE == 32
……
# define __STD_TYPE __extension__ typedef
#elif #if __WORDSIZE == 64
……
# define __STD_TYPE typedef
#else
...
#endif

#define __U32_TYPE unsigned int

所以展开来 就是

typedef unsigned int socklen_t

无符号整形
回复