大家好,这里我们简单讲解一下使用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 查看,套接字路径前面有@即为抽象路径名
热点新闻
讲师博文
大家好,这里我们简单讲解一下使用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号