项目中代码质量检查
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);
最终,问题解决~