除了信号可以用于进程间通信, Unix Domain Socket也可以用于进程间通信. 这种socket有别于网络socket....Unix Domain Socket仅用于本地进程间通信, 而网络socket用于网络间的进程间通信....而通过Unix Domain Socket创建出来的6号文件描述符,它就是由Attach Listener这个线程来使用的. 这个Attach Listener线程作为服务端,监听客户端的请求....在我们的C语言代码里 // 创建Unix Domain Socket用于本机进程间通信 fd = socket(PF_UNIX, SOCK_STREAM, 0); // 连接服务器....并与服务端(也就是目标JVM)建立了连接, 然后就是发送命令了.
Unix 域套接字是什么?...Unix 域套接字更加高效,Unix 套接字不用进行协议处理,不需要计算序列号,也不需要发送确认报文,只需要复制数据即可 Unix 域套接字是可靠的,不会丢失报文,普通套接字是为不可靠通信设计的 Unix...对于 Attach 的发起方,假设目标进程为 12345,这部分的详细的过程如下: 1、Attach 端检查临时文件目录是否有 .java_pid12345 文件 这个文件是一个 UNIX 域套接字文件...,同时监听此套接字,准备 Attach 端发送数据。...,表示这是一个 attach 操作,然后发送SIGQUIT信号给目标进程,目标进程发现存在 attach 临时文件,则创建监听 Unix 域套接字文件,Attach 发起端就可以通过 socket 的
\(连网\) 4.开始在家等电话\(开始监听电话listen\) 5.电话铃响了,接起电话,听到对方的声音\(接受新连接\) 打电话方(socket客户端): 1.首先你得有个电话\(生成socket...SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。...2、服务端套接字函数 设s为socket实例化的一个对象 s.bind() 绑定(主机,端口号)到套接字。 s.listen() 开始TCP监听。...s.connect_ex() 是connect()函数的扩展版本,出错时返回出错码,而不是抛出异常。 4、公共用途的套接字函数 设s为socket实例化的一个对象 s.recv() 接收数据。...s.send() 发送数据(send在待发送数据量大于己端缓存区剩余空间时,数据丢失,不会发完) s.sendall() 发送完整的TCP数据(本质就是循环调用send,sendall在待发送数据量大于己端缓存区剩余空间时
,这个套接字用来监听一个端口,当有一个客户与服务器连接时,它使用这个一个端口号,而此时这个端口号正与这个套接字关联。...此时我们需要区分两种套接字, 监听套接字: 监听套接字正如accept的参数sockfd,它是监听套接字,在调用listen函数之后,是服务器开始调用socket()函数生成的,称为监听socket...描述字(监听套接字) 连接套接字:一个套接字会从主动连接的套接字变身为一个监听套接字;而accept函数返回的是已连接socket描述字(一个连接套接字),它代表着一个网络已经存在的点点连接...这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。...首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。 (1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。
双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向Socket发送数据和从Socket接收数据。通话结束后,一方挂起电话机相当于关闭Socket,撤消连接。...这套应用程序接口也被用于Unix域套接字。...select() 用于修整有如下情况的套接字列表:准备读,准备写或者有错误。 poll() 用于检查套接字的状态。套接字可以被测试,看是否可以写入、读取或是有错误。...函数accept() 函数原型: int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen); 函数描述: 当应用程序监听来自其他主机的数据流连接时...Accept() 为每个连接创立新的套接字并从监听队列中移除这个连接。它使用如下参数: 第1个参数sockfd,监听的套接字描述符。
,recv先检查套接字s的接收缓冲区,如果s接收缓冲区中没有数据或者协议正在接收数据,那么recv就一直等待,直到协议把数据接收完毕。...当调用该函数时: 1)send先比较待发送数据的长度len和套接字s的发送缓冲的长度, 如果len大于s的发送缓冲区的长度,该函数返回SOCKET_ERROR; 2)如果len小于或者等于s的发送缓冲区的长度...,那么send先检查协议是否正在发送s的发送缓冲中的数据,如果是就等待协议把数据发送完,如果协议还没有开始发送s的发送缓冲中的数据或者s的发送缓冲中没有数据,那么send就比较s的发送缓冲区的剩余空间和...每一个除send外的Socket函数在执行的最开始总要先等待套接字的发送缓冲中的数据被协议传送完毕才能继续,如果在等待时出现网络错误,那么该Socket函数就返回 SOCKET_ERROR。...本文主要参考自:《UNIX网络编程卷1:套接字联网API》 作者:西瓜媛 编辑:西瓜媛 本文来自程序媛驿站,未经授权不得转载.
Unix套接字简介 Unix套接字(Unix domain sockets)是一种用于同一主机上进程间通信(IPC,Inter-Process Communication)的机制。...与网络套接字不同,Unix套接字不使用网络协议栈,因此性能更高。它们主要用于需要高效、低延迟的本地进程通信场景。...Unix套接字的工作流程 服务器端操作流程: 创建套接字:使用系统调用创建一个套接字文件描述符。 绑定套接字:将套接字绑定到一个文件系统路径,类似于网络套接字绑定到IP地址和端口。...监听连接:使套接字进入监听状态,准备接受客户端连接。 接受连接:当有客户端请求连接时,接受连接并创建一个新的套接字文件描述符用于通信。 通信:通过读写操作在服务器和客户端之间传输数据。...关闭套接字:完成通信后,关闭套接字并清理资源。 优点和应用场景 优点: 高效:由于不涉及网络协议栈的处理,Unix套接字具有更低的开销和更高的性能。
使用套接字进行通信需要双方均创建一个套接字,其中一方作为服务器方,另外一方作为客户方。服务器方必须先创建一个服务器套接字,然后在该套接字上进行监听,等待远方的连接请求。...而原本的服务器套接字serversocket则回到其原来的监听操作上。 套接字由于其功能强大而获得了很大发展,并出现了许多种类。不同的操作系统均支持或实现了某种套接字功能。...例如按照传输媒介是否为本地,套接字可以分为本地(UNIX域)套接字和网域套接字。...首先,如果使用管道和套接字方式来通信,必须事先在通信的进程间建立连接(创建管道或套接字),这需要消耗系统资源。其次,通信是自愿的。 即一方虽然可以随意往管道或套接字发送信息,对方却可以选择接收的时机。...发送方将该数据结构的内容填好,并指明该信号的目标进程后,发出特定的软件中断。操作系统接受到特定的中断请求后,知道是有进程要发送信号,于是到特定的内核数据结构里查找信号接受方,并进行通知。
2、CLIB_SOCKET_F_PASSCRED 用于设置unix域套接字SO_PASSCRED属性。 下面man手册给的解释,看来这个字段置位时,会存储uid,gid,pid信息。...SO_PASSCRED启用此套接字选项将导致在随后接收到的每个消息中的SCM_CREDENTIALS辅助消息中接收到发送进程的凭据。...返回的凭据是由发送方使用SCM_CREDENTIALS指定的凭据,或者是包含发送方的PID、真实用户ID和真实组ID(如果发送方没有指定SCM_CREDENTIALS辅助数据)的默认凭据。...当设置了这个选项并且套接字还没有连接时,抽象命名空间中的唯一名称将自动生成。 3、收发报文函数指针。用户可以自己设定,如果不指定默认使用缺省函数。...{ #cli-listen /run/vpp/cli.sock #unix域套接字。
可以看出,连接请求方(如客户端)才会使用 connect() 函数,当然,在发起 connect() 之前,连接发起方也需要生成一个 sockfd,且使用的很可能是绑定了随机端口的套接字。...既然 connect() 函数是向某个套接字发起连接的,自然在使用 connect() 函数时需要带上连接的目的地,即目标地址和目标端口,这正是服务端的监听套接字上绑定的地址和端口。...(姑且用 connfd 来表示),有了新的连接套接字,用户进程/线程(称其为工作者)就可以通过这个连接套接字和客户端进行数据传输,而前文所说的监听套接字(sockfd)则仍然被监听者监听。...不管哪一方,只要不满足条件,调用 send()/recv() 时进程/线程会被阻塞(假设套接字设置为阻塞式IO模型)。...当调用 close() 时,将会尝试发送 send buffer 中的所有数据。
项0.0.0.0允许监听所有 IPv4 地址并且::允许监听所有 IPv6 地址。如果列表为空,服务器将根本不会监听任何 IP 接口,在这种情况中只能使用 Unix 域套接字来连接它。...这个参数只能在服务器启动时设置。 unix_socket_directories (string) 指定服务器用于监听来自客户端应用的连接的 Unix 域套接字目录。...一个空值指定在任何 Unix 域套接字上都不监听,在这种情况中只能使用 TCP/IP 套接字来连接到服务器。默认值通常是/tmp,但是在编译时可以被改变。这个参数只能在服务器启动时设置。...unix_socket_group (string) 设置 Unix 域套接字的所属组(套接字的所属用户总是启动服务器的用户)。...Windows 下没有 Unix 域套接字,因此这个参数与 Windows 无关。 unix_socket_permissions (integer) 设置 Unix 域套接字的访问权限。
worker进程的指令用如下的一个结构来完成封装 typedef struct { // 传递的 TCP 消息中的命令 ngx_uint_t command; // 进程 ID,一般是发送命令方的进程...ID ngx_pid_t pid; // 表示发送命令方在 ngx_processes 进程数组间的序号 ngx_int_t slot; // 通信的套接字句柄...NGX_CMD_OPEN_CHANNEL 1 // 关闭已经打开的频道,实际上也就是关闭套接字 #define NGX_CMD_CLOSE_CHANNEL 2 // 要求接收方正常地退出进程 #define.../* 这里的socketpair()方法的主要作用是生成一对套接字流,用于主进程和子进程的通信, 这一对套接字会存储在ngx_processes[s].channel中,本质上这个字段是一个长度为...AF_UNIX表示当前使用的是UNIX文件形式的socket地址族SOCK_STREAM指定了当前套接字建立的通信方式是管道流, 并且这个管道流是双向的,即管道双方都可以进行读写操作第三个参数protocol
; (3)接收到客户端的服务请求时,处理该请求并发送应答信号。...参数type 描述要建立的套接字的类型。这里分三种: (1)一是TCP流式套接字(SOCK_STREAM)提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复地发送,且按发送顺序接收。...addr 指向客户方套接字地址结构的指针,用来接收连接实体的地址。addr的确切格式由套接字创建时建立的地址族决定。addrlen 为客户方套接字地址的长度(字节数)。...当有连接请求到达时,accept()调用将请求连接队列上的第一个客户方套接字地址及长度放入addr 和addrlen,并创建一个与s有相同特性的新套接字号。新的套接字可用于处理服务器并发请求。...若采用无连接,客户方必须使用bind()以获得一个唯一的地址。 监听连接──listen() 此调用用于面向连接服务器,表明它愿意接收连接。
这里主要介绍命名UNIX域套接字 1.什么是UNIX域套接字 Unix域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务通信的一种方式。是进程间通信(IPC)的一种方式。...2.UNIX域协议特点 1)UNIX域套接字域TCP套接字相比,在同一台主机的传输速度前者是后者的两倍。...UNIX域套接字仅仅复制数据,并不执行协议处理,不需要添加或删除网络报头,无需计算校验和,不产生顺序号,也不需要发送确认报文 2)UNIX域套接字可以在同一台主机上各进程之间传递文件描述符 3)UNIX...Server:先创建套接字 -> 绑定地址 -> 监听 -> accept 客户端连接 -> 连接成功开始通信 -> 关闭套接字 Client:先创建套接字 -> 连接server -> 开始通信 ->...比如把上面的目录改成/tmp/test_socket 3)UNIX域流式套接字connect发现监听队列满时,会立刻返回一个ECONNREFUSED,这和TCP不同,如果监听队列满了,会忽略到来的SYN
为了防止消息丢失,或者是调用方,不需一直等待响应方的结果。...(5)发送数据: s.send(string) 发送字符串到连接的套接字,可能未将指定内容全部发送; s.sendall(string) 内部递归调用send,将所有内容发送出去,建议使用。...result - connect_ex(address) #成功返回0,失败返回错误码 通用: s.close() #关闭套接字 s.getsocketname() #获取套接字的名字...s.settimeout(timeout) #设置套接字超时时间,timeout为float类型,单位秒 s.gettimeout() #获得套接字超时时间 s.setblocking(flag)...s.fileno() # 返回套接字的文件描述符(一个小整数)。这对于select.select()是有用的。
Linux进程通信之Unix套接字(一) 什么是套接字 所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。...) AF_INET6(IPV6) AF_UNIX(本地通讯协议,一般用于进程通信,不需要经过网卡) 套接字类型 流套接字(SOCK_STREAM),提供一个顺序化的、可靠的、全双工的、基于连接的字节流。...PHP中封装了以socket开头和stream开头的两种函数,都可以实现Unix套接字通信,具体可以查看PHP官方手册 Unix套接字还分无命名的(用于父子、兄弟等有血缘关系进程通信)和命名的(任何进程都可以通信...) 无命名代码示例 无命名Unix套接字通信TCP协议和UDP协议都可以使用 时,代码则会在accept进行阻塞,当客户端连接后,代码则会在recvform进行阻塞,等待接收数据 注意 多次启动服务端监听文件时,会报address
套接字socket历史: 套接字起源于 20 世纪 70 年代加利福尼亚大学伯克利分校版本的 Unix,即人们所说的 BSD Unix。...因此,有时人们也把套接字称为“伯克利套接字”或“BSD 套接字”。一开始,套接字被设计用在同 一台主机上多个应用程序之间的通讯。这也被称进程间通讯,或 IPC。...基于文件类型的套接字家族: 套接字家族的名字:AF_UNIX unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信...7 print(ret) #打印客户端信息 8 conn.send(b'hi') #向客户端发送信息 9 conn.close() #关闭客户端套接字 10...# - 检查是否有某些指定关键字并回复消息,如果发送过来的消息中还有sb字符串,那么将sb替换成alexsb,然后和你要输入的内容组合起来发送给客户端。 # 2.
一般需要了解一下几个字段: 序号:Seq序号,占32位,用来表示从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标识 确认序号:ACK序号,占32位,只有ACK标志位为1时,确认序号字段才有效...(B)确认方Ack=发起方Req+1,两端配对 TCP三次握手 所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立...第三次握手:Client收到确认后,检查ACK是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ACK=K+1,并将数据包发送给Server,Server检查ACK是否为K+1,如果正确则连接建立成功...买了个手机 给已经创建的套接字绑定一个端口号,一般通过设置网络套接口地址和调用bind()函数来实现 办张手机卡,插上手机卡 调用listen()函数使套接字成为一个监听套接字 等待来电 调用accept..., "开启服务失败");//ex.Message为出现异常的消息 return; } //3.1监听套接字
“顺序”是指接收数据顺序与发送数据顺序相同。TCP协议提供这项服务。 3)差错控制 保证应用程序接收的数据无差错的一种机制。检查差错的方法一般是采用检验“检查和(Checksum)”的方法。...发送数据时,发送方除指定本地套接字号外,还需指定接收方套接字号,从而在数据收发过程中动态地建立了全相关。....” /* 这个程序建立套接字,然后与命令行给出的套接字连接;连接结束时,在连接上发送 一个消息,然后关闭套接字。...参数addr: 指向客户方套接字地址结构的指针,用来接收连接实体的地址。addr的确切格式由套接字创建时建立的地址族决定。 参数addrlen: 为客户方套接字地址的长度(字节数)。...当有连接请求到达时,accept()调用将请求连接队列上的第一个客户方套接字地址及长度放入addr 和addrlen,并创建一个与s有相同特性的新套接字号。
领取专属 10元无门槛券
手把手带您无忧上云