Linux网络编程:TCP带外数据与相关技术解析
1. TCP带外数据
TCP/IP套接字支持两个独立的逻辑数据通道。其中,正常数据在带内进行发送和接收,而紧急消息则可以通过带外(oob)通道进行通信。当一个进程向远程进程发送长数据流时,如果出现异常情况,就可以使用紧急消息提醒对方进程,带外数据机制正是为此而设计的。
带外数据独立于正常数据流进行发送和接收,TCP一次仅支持可靠地传递一条带外消息,且该消息最长为一个字节。当带外消息被传递到套接字时,系统会向接收进程发送一个SIGURG信号,以便接收进程能尽快处理该紧急消息。
以下是发送和接收带外数据的系统调用示例:
send(soc, buffer, sizeof(buffer), opt);
recv(soc, buffer, sizeof(buffer), opt);
当 opt 的 MSG_OOB 位被置位时,这两个系统调用就可以用于发送和接收带外数据。例如,一个TCP/IP客户端程序可以使用以下代码向对等套接字发送一个单字符的紧急消息“B”:
send(soc, "B", 1, MSG_OOB);
为了处理带外数据,接收进程需要捕获SIGURG信号,并提供一个处理函数来读取带外数据并采取相应的操作。以下是一个读取带外数据的处理函数示例:
int oobsoc;
void oob
超级会员免费看
订阅专栏 解锁全文

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



