当前位置: 星创客 > 学习资源 > 讲师博文 > unix本地套接字的简单使用
unix本地套接字的简单使用 时间:2018-02-02     来源:星创客

大家好,这里我们简单讲解一下使用unix本地套接字的过程中需要注意的地方。

使用UDP协议的unix域套接字

服务器端:

1.同样需要绑定一个本地套接字文件,也就是struct sockaddr_un的第二个成员sun_path赋值个路径名(普通路径名或者抽象路径名都可)。

2.同上2.

3.因为无连接,所以服务器可以在recvfrom接收来自客户端的链接信息,可以通过打印地址信息里面的sun_path获取客户端的套接字文件名。

客户端:

1.无连接,所以内核不会自动为客户端创建套接字文件,此时需要客户端绑定自己的套接字文件信息(显然不能和服务器端的套接字文件名字相同),声明自己是谁,服务器端便知道了它连接的是谁。

 

unix域套接字命名空间----普通路径名和抽象路径名(udp和tcp均可)

1.普通路径名:直接strcpy至serveraddr.sun_path中即可,需要这个地址结构体长度的话直接sizeof(serveraddr),因为在文件系统中占用文件节点,所以有被其他进程删除的危险,导致奇怪的现象。再次运行绑定失败,需要删除或者unink。

2.抽象路径名:linux特有的特性,它允许将一个Unix域套接字绑定到一个名字上,且不会在文件系统中创建这个名字的文件。就不需要担心与文件系统中已存在的文件产生名字冲突的问题了,也不需要在使用完套接字之后删除附带产生的这个文件了,当套接字被关闭之后会自动删除这个抽象名。

具体使用方法为:sun_path的第一个字节必须为'\0',然后后面写上套接字名字的字符串。当然计算这个结构体长度的方式也略有不同,需要sizeof(sun_family) + 1 + strlen(sun_path + 1)。

eg:

#define SOCKNAME "mysock"

 

 

通过netstat -an 查看,套接字路径前面有@即为抽象路径名

前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2018 北京华清远见科技发展有限公司 版权所有 ,京ICP备16055225号,京公海网安备11010802025203号
返回

讲师博文

星创客 - 华清远见旗下高端IT培训品牌

当前位置: 星创客 > 学习资源 > 讲师博文 >

unix本地套接字的简单使用
来源: 星创客 作者: 星创客 时间:2018-02-02

大家好,这里我们简单讲解一下使用unix本地套接字的过程中需要注意的地方。 使用UDP协议的unix域套接字 服务器端: 1.同样需要绑定一个本地套接字文件,也就是struct sockaddr_un的第二个成员sun_path赋值个路径名(...

大家好,这里我们简单讲解一下使用unix本地套接字的过程中需要注意的地方。

使用UDP协议的unix域套接字

服务器端:

1.同样需要绑定一个本地套接字文件,也就是struct sockaddr_un的第二个成员sun_path赋值个路径名(普通路径名或者抽象路径名都可)。

2.同上2.

3.因为无连接,所以服务器可以在recvfrom接收来自客户端的链接信息,可以通过打印地址信息里面的sun_path获取客户端的套接字文件名。

客户端:

1.无连接,所以内核不会自动为客户端创建套接字文件,此时需要客户端绑定自己的套接字文件信息(显然不能和服务器端的套接字文件名字相同),声明自己是谁,服务器端便知道了它连接的是谁。

 

unix域套接字命名空间----普通路径名和抽象路径名(udp和tcp均可)

1.普通路径名:直接strcpy至serveraddr.sun_path中即可,需要这个地址结构体长度的话直接sizeof(serveraddr),因为在文件系统中占用文件节点,所以有被其他进程删除的危险,导致奇怪的现象。再次运行绑定失败,需要删除或者unink。

2.抽象路径名:linux特有的特性,它允许将一个Unix域套接字绑定到一个名字上,且不会在文件系统中创建这个名字的文件。就不需要担心与文件系统中已存在的文件产生名字冲突的问题了,也不需要在使用完套接字之后删除附带产生的这个文件了,当套接字被关闭之后会自动删除这个抽象名。

具体使用方法为:sun_path的第一个字节必须为'\0',然后后面写上套接字名字的字符串。当然计算这个结构体长度的方式也略有不同,需要sizeof(sun_family) + 1 + strlen(sun_path + 1)。

eg:

#define SOCKNAME "mysock"

 

 

通过netstat -an 查看,套接字路径前面有@即为抽象路径名

相关推荐

全国咨询热线:400-611-6270

?2004-2018华清远见教育科技集团 版权所有 京ICP备16055225号 京公海网安备11010802025203号