Unix网络编程学习笔记-UNIX域协议与非阻塞IO

Unix域套接字是本地进程间通信的方式,提供类似TCP和UDP的接口。它们速度快,支持不同进程间通信,并能增强安全性。非阻塞IO允许更灵活的程序设计,非阻塞connect和accept在特定场景下能优化性能,如处理连接超时和并发连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        Unix域套接字不是一个实际的协议族,是在单个主机上执行的客户/服务器通信的一种方法,所用的API与网络通信的API是一致的,Unix提供两类套接字:字节流套接字(类似TCP)和数据报套接字(类似UDP)

        使用Unix套接字有以下三个理由:1.比相同的TCP同主机通信实现要快一杯

                                                                2.可用于不同进程的通信

                                                                3.可以提供额外的安全检查措施        

struct sockaddr_un
  {
    __SOCKADDR_COMMON (sun_);
    char sun_path[108];		/* Path name.  */
  };

Unix套接字的地址结构如上,对其使用bind等函数即可

非阻塞IO

        套接字的默认操作是阻塞的

        非阻塞IO使得程序能够发挥动态性的优势,使得只要IO有可能发生,就会发生IO

非阻塞connect

        对一个非阻塞的TCP套接字调用connect时,connect立即返回EINPROGRESS错误,然后TCP建立三次握手

        非阻塞的connect有三个用途

        1.connect完成要花一个RTT时间

        2.可以使用这个技术同时建立多个连接

        3.可以实现自定义的connect超时时间

        非阻塞的connect需要处理一些细节

        1. 若连接到的服务器在同一个主机上(既自己连接自己),那么连接将立刻建立

        2.当连接成功时,描述符将可写,当连接错误时,描述符将可读可写(TCP套接字出现错误的默认处理方式)

非阻塞accept          

        情景:客户端connect之后发送一个RST,服务端在该连接进入ESTABLISHED队列后,accept调用前,收到RST并且将连接移除ESTABLISH队列,这个时候accept调用将一直阻塞,服务器无法响应其他客户的连接,解决方案:使用非阻塞的accpet

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值