【发布时间】:2014-11-18 21:42:52
【问题描述】:
通过无连接数据报 Unix 套接字发送时,ECONNREFUSED 的可能原因是什么?
也欢迎任何有关如何调试此问题的建议,因为此问题是可重现的。
无论使用sendto()或sendmsg(),我都会收到错误消息。
if ((sock = socket(PF_UNIX, SOCK_DGRAM, 0)) < 0)
{
return 0;
}
unlink("/tmp/serv");
addr.sun_family = AF_UNIX;
strncpy(&addr.sun_path[0], "/tmp/serv", sizeof(addr.sun_path));
if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
{
return 0;
}
sockaddr_un from;
int fromlen = sizeof(from);
if (recvfrom(sock, &i, sizeof(i),0,(sockaddr*)&from,(socklen_t*)&fromlen) < 0 )
{
//some error handling code
}
printf("from.sun_family=%d, from.sun_path=%s",from.sun_family,from.sun_path); // this prints, as expected "from.sun_family=1, from.sun_path=/tmp/client"
strncpy(&addr.sun_path[0], "/tmp/client", sizeof(addr.sun_path));
sendto(sock,"abc",3,0,(sockaddr*)&addr, sizeof(addr)); //this fails with ECONNREFUSED
【问题讨论】:
-
Err,目标socket不存在?
-
它存在。我编辑了问题中的代码以显示客户端发送消息并且
recvfrom按预期工作。客户端应用程序卡在recv()(我可以在那里断点) -
@George which call in your code is given you ECONNREFUSED ?
-
@nos sendto(sock,"abc",3,0,(sockaddr*)&addr, sizeof(addr));
-
发布最小可编译和可运行的客户端和服务器。在准备这些时,您很可能会发现错误。
标签: c++ sockets unix unix-socket