通过无连接数据报Unix套接字发送ECONNREFUSED的可能原因是什么?ECONNREFUSED数据报Unix套接字
还有关于如何调试这个问题的任何建议是受欢迎的,因为这个问题是可重现的。
无论使用的是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
错误,目标套接字不存在? – EJP 2014-09-24 12:07:51
它存在。我编辑了问题中的代码,以显示客户端发送消息,并且'recvfrom'按预期工作。客户端应用程序停留在'recv()'(我可以在那里断点) – George 2014-09-24 12:20:04
@George哪里调用你的代码给你ECONNREFUSED? – nos 2014-09-24 12:21:45