套接字(Sockets)通用信息详解
1. 路由(Routing)
套接字提供数据包路由功能。系统会维护一个路由信息数据库,在传输数据包时,该数据库用于选择合适的网络接口。
2. 接口(Interfaces)
系统中的每个网络接口都对应着一条消息收发的路径。通常,网络接口会关联一个硬件设备,但像回环接口这类特殊接口则无需硬件设备。
3. 套接字类型(Socket Types)
创建套接字时需指定其类型,该类型定义了通信语义,并决定了合适的通信协议。主要有以下四种类型,不过具体实现中可能会定义更多类型:
- SOCK_STREAM :提供可靠、有序、全双工的字节流通信。在发送或接收数据前,套接字必须处于连接状态。此类型不保留记录边界,即发送和接收数据的操作大小可以不同,且不会丢失数据。数据可能会被缓冲,输出函数成功返回并不意味着数据已送达对端或已从本地系统发出。若在规定时间内数据无法成功传输,连接将被视为中断,后续操作会失败。当线程尝试在已中断的流上发送数据时,会触发 SIGPIPE 信号,但如果在 send()、sendto() 和 sendmsg() 调用中使用了 MSG_NOSIGNAL 标志,则该信号会被抑制。是否支持带外数据传输取决于具体协议。
- SOCK_SEQPACKET :与 SOCK_STREAM 类似,也是面向连接的。区别在于它会保留记录边界,一个记录可以通过多次输出操作发送,也能通过多次输入操作接收,但单次操作不会传输多个记录的部分内容。接收方可以通过 recvmsg() 函数返回的消息标志中的 MSG_EOR 标志
超级会员免费看
订阅专栏 解锁全文
15

被折叠的 条评论
为什么被折叠?



