下面的代码会编译,但在执行时报告Invalid argument
:
int fd = socket (AF_UNIX, SOCK_SEQPACKET, 0);
if (fd == -1)
{
cout << strerror (errno) << "\n";
return;
}
struct sockaddr_un addr;
memset (&addr, 0, sizeof (addr));
addr.sun_family = AF_UNIX;
strcpy (addr.sun_path, "/path/to/socket");
if (connect (fd, (const struct sockaddr *) &addr, sizeof (addr) == -1))
{
close (fd);
cout << strerror (errno) << "\n";
return;
}
close (fd);
当它试图调用connect
时发生错误。它没有给予关于哪个参数无效或为什么无效的任何指示。
在创建套接字时,我也尝试过使用SOCK_STREAM
,但它导致了同样的错误。
你知道是什么问题吗?
1条答案
按热度按时间3xiyfsfu1#
connect()
调用中的右括号位置错误:这会导致您将不正确的值传递给
connect()
的addrlen
参数(即,表达式sizeof(addr) == -1
的求值结果,而不仅仅是sizeof(addr)
的值),从而产生错误。这也会导致您错误地比较
connect()
的返回值(即,将其计算为true/false,而不是-1)。您需要将右括号移动到正确的位置:
否则,将表达式分解为单独的语句,例如: