在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*)’
为什么?
关于SCOKET 编程
-
- 帖子: 8
- 注册时间: 2008-03-10 12:16
呵呵 , 你可以去查一下头文件 看看定义的
/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
无符号整形
/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
无符号整形