编程接口指南

数据传送

本节介绍用于发送和接收数据的接口。可以使用常规 read(2)write(2) 接口来发送或接收消息。

write(s, buf, sizeof buf);

read(s,  buf, sizeof buf);

还可以使用 send(3SOCKET)recv(3SOCKET)

send(s, buf, sizeof buf, flags);

recv(s, buf, sizeof buf, flags);

send(3SOCKET)recv(3SOCKET) 非常类似于 read(2)write(2),但是 flags 参数至关重要。如果需要一个或多个以下项,则可以将 sys/socket.h 中定义的 flags 参数指定为非零值:

MSG_OOB

发送和接收带外数据

MSG_PEEK

查看数据而不读取

MSG_DONTROUTE

发送数据而不路由包

带外数据特定于流套接字。使用 recv(3SOCKET) 调用指定 MSG_PEEK 之后,所有显示的数据均返回到用户,但是仍视为不可读取。套接字上的下一个 read(2)recv(3SOCKET) 调用将返回相同数据。当前只有路由表管理进程使用发送数据而不路由包的选项(应用于传出包)。