常用socket编程都会知道,struct sockaddr_in在使用的过程中,通常需要强转为struct sockaddr。分享一个编码技巧,少写很多强转操作代码。
typedef union
{
struct sockaddr *saddr;
struct sockaddr_in *inaddr;
} self_sockaddr_type;
struct sockaddr_in client_addr;
/*示例代码*/
client_addr.sin_family = AF_INET;
client_addr.sin_addr.s_addr = htonl(INADDR_ANY);
client_addr.sin_port = htons(134000);
self_sockaddr_type tmp;
tmp.inaddr = &client_addr; //使用自定义共用体类型保存struct sockaddr_in变量地址
ret = connect(fd, tmp.saddr/*无需强转*/, sizeof(struct sockaddr_in));
通过自定义的共用体类型self_sockaddr_type变量,来保存struct sockaddr_in变量的地址,使用的时候选择struct sockaddr类型的指针即可。
技巧,有时候觉得挺鸡肋,可有可无,用的时候别被人说装X就行。