unix domain socket 使用时crash

项目中代码质量检查

	char my_socket_path[MY_LEN_128];
	memset(my_socket_path, 0, sizeof(my_socket_path));
	snprintf(my_socket_path, MY_LEN_128 - 1, "%s", "/var/run/pidno/user/.mysocketpath");
	strcpy(server_addr.sun_path, my_socket_path);

代码运行没问题,但是提示使用strncpy 替换 strcpy

于是修正代码如下

	char my_socket_path[MY_LEN_128];
	memset(my_socket_path, 0, sizeof(my_socket_path));
	snprintf(my_socket_path, MY_LEN_128 - 1, "%s", "/var/run/pidno/user/.mysocketpath");
	strncpy(server_addr.sun_path, my_socket_path, MY_LEN_128 - 1);

 

结果代码总是crash

一步步调试后,猜测可能sun_path的长度有问题,查找套接字的原始定义

struct sockaddr_un
  {
    __SOCKADDR_COMMON (sun_);
    char sun_path[108];        
  };


因此,原因肯定是因为我们是128的buffer,拷贝到108的buffer,出现了问题。

修正如下

	char my_socket_path[MY_LEN_108];
	memset(my_socket_path, 0, sizeof(my_socket_path));
	snprintf(my_socket_path, MY_LEN_108 - 1, "%s", "/var/run/pidno/user/.mysocketpath");
	strncpy(server_addr.sun_path, my_socket_path, MY_LEN_108 - 1);

最终,问题解决~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值