2013-07-03 59 views
2

使用Unix本地套接字编写C源代码我得到了一个关于已经使用的地址的错误。在检查man 7 Unix以获得更多信息后,我尝试创建一个执行我的程序的子文件夹(显然修改了当前文件夹中的sun_path字段),但错误总是相同的。使用Unix套接字获取“地址已被使用”错误

有人能帮助我吗?

的源代码可以在这里找到:Pastebin

+0

请发布确切的错误消息,你正在看。 – xaxxon

+0

显示的错误是这样的: “错误”地址已经在使用“bind()” – none

+0

嘿,请不要使用dropbox文件系统作AF_UNIX。它确实需要成为本地文件系统。你可以谷歌为什么。这里有龙,所以直到你在本地文件系统上尝试并重现它,我认为任何人都不能帮助你。 – xaxxon

回答

8

你应该之前bind电话unlink()path文件。当bind期间文件存在时,您将收到此错误。要么确保在退出应用程序之前取消链接/删除文件,要么在绑定之前始终取消链接。

检查bind的手册页。另外,请注意最后手册页中给出的示例。

+1

是啊,我刚刚也看到了这个, – xaxxon

+0

是的,只是试过,它的工作原理。 无论如何,这要归功于xaxxon和+1。 – none

-4

你可以尝试使用SO_REUSEADDR标志,像这样:

int yes = 1; 
if (setsockopt(socketfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) { 
    // error handling 
    exit(1); 
} 
+0

我读了一些东西,虽然没有强烈定义这对于非网络协议没有意义。 – xaxxon

+3

这对Unix本地套接字不起作用 – Patrick

0

我很长一段时间,这一问题被提出后写。但是,对于那些仍在尝试寻找可能的解决方案的人来说,这是我的经验。

我正在开发基于Linux的服务器并创建一个套接字作为IPC。我得到了类似的错误,但这是因为我通过终端运行可执行文件而不使用关键字'sudo'。

希望这会有所帮助。

相关问题