当前位置: 首页 > 知识库问答 >
问题:

Unix域套接字(C)-客户端在connect()上“删除”套接字?

双浩涆
2023-03-14
struct addrinfo * server;
int sockfd;

sockfd = socket( server->ai_family, server->ai_socktype, server->ai_protocol );

if( connect(sockfd, server->ai_addr, server->ai_addrlen) == 0 )
    return sockfd;
else
    perror("connect()");

可能还值得注意的是,我使用了getAddrInfo的修改版本,专门为unix域填充AddrInfo struct

共有1个答案

璩和璧
2023-03-14

在服务器启动之后,检查套接字文件是否存在于客户端系统上,即确保您要在传递到客户端上的连接的结构sockaddr_unsun_path字段中使用的文件存在。此条目必须与在服务器中创建并传递到绑定中的条目匹配。还要确保在客户端和服务器中使用af_unix填充sun_family字段。

在客户机中,不要执行套接字文件的任何创建/删除--也就是说,在与服务器套接字的位置相关的客户机代码中的任何地方都不应该有取消链接。

这些是我将遵循的一般过程,以确保代码正在做正确的事情。在旧的、但仍然可靠的《Beej's UNIX IPC指南》中有一个示例服务器/客户机,它可能是您应该比较的最简单的示例。

如果指定了AI_PASSIVE标志,则返回的地址信息应适合用于绑定用于接受指定服务的传入连接的套接字(即,对bind()的调用)。

然而,该段末尾一句说:

如果nodename参数不为null,则忽略此标志

 类似资料:
  • 首先我要感谢你花时间... 我在macbook中用C++创建了一个服务器套接字,在运行windows XP的不同机器中用Java创建了一个客户机/套接字。我已将端口指定为5000,但无法指定正确的主机,因此无法进行连接。当我在windows xp中使用WinSock2创建一个C++服务器/套接字时,当我使用本地主机时,连接是完美的...有什么想法吗??? 提前Thnx int main(int a

  • 问题内容: TCP具有元组对(IP地址/端口/类型)来告诉另一个客户端。UDP传递客户端IP和端口。unix域如何跟踪不同的客户端? 换句话说,服务器创建一个绑定到某个路径的套接字,例如/ tmp / socket。2个或更多客户端连接到/ tmp / socket。底层发生了什么,可跟踪来自client1和client2的数据?我想网络堆栈在域套接字中不起作用,所以内核在这里完成所有工作吗? 是

  • 真的需要你帮忙。 我的项目是通过电缆连接两台PC机,并使用tcp套接字将客户端文本框形式的字符串发送到服务器。问题是ATI只能发送一个字符串,然后连接就会关闭。 注意:某个端口上的连接将在表单加载中建立并成功。

  • 我对套接字协议非常陌生,我肯定问题来自于我对此几乎一无所知。但是基本上我在服务器端口5000上有一个套接字,我需要一个angularjs代码来监听这个套接字。服务器上的套接字可以读取我从另一台计算机(客户端)发送的任何内容。但是由于某种原因,angular代码不能监听/连接到插座。以下是我现在所拥有的: index.html 下面是angularjs代码: 在Firefox中: Firefox无法

  • 问题内容: 我最近遇到了一篇博客文章,该文章描述了使用libev的TCP服务器客户端。服务器用来绑定到我熟悉的接口。但是,我也很惊讶地在客户端代码中看到。客户端代码上的相关代码如下: 具体来说,我对这一行很感兴趣: 在服务器端,我知道这会将端口绑定到所有可用接口,但是我不确定在客户端这有何意义。最后,客户端将需要在特定接口上进行连接。以前,我总是指定IP地址或使用。 Linux IP手册页没有讨论

  • 我已经在Raspberry Pi上安装了MQTT,并为代理配置了Arduino Uno,但在/var/log/mosquitto/mosquitto.log文件中看到了以下条目: Pi是用有线到本地LAN的ETH0设置的,IP地址为192.168.1.50 在PI上还有一个WiFi AP设置。Arduino Uno通过WiFi连接以发送/接收MQTT消息。WiFi AP的IP地址为192.168.