通過無連接數據報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