您所在的位置:读书频道 > 操作系统 > Linux > 13.2.7 发送与接收数据

13.2.7 发送与接收数据

2007-11-28 09:57 杜华 人民邮电出版社 字号:T | T
一键收藏,随时查看,分享好友!

《Linux编程技术详解》第13章的主要内容是Linux网络编程,本小节讲的是发送与接收数据。

AD:

13.2.7  发送与接收数据

当服务器与客户机之间成功建立连接后,可以调用read和write函数来实现对套接字的读写,以实现网络中不同主机间的通信。Linux系统还提供了send和recv函数,用于实现与read和write函数相同的功能。而且send和recv的功能要比read函数和write函数更为全面。send函数的具体信息如表13.8所示。

表13.8   send函数

头文件

函数形式

ssize_t send(int s, const void *buf, size_t len, int flags);

返回值

成功

失败

是否设置errno

返回实际发送的数据的字节数

−1

说明:send函数用于将信息发送到指定的套接字文件描述符中。该函数只能用于已经建立连接的socket通信中,即只用于面向连接的通信中。参数s为要发送数据的套接字文件描述符。buf参数为指向要发送数据的指针。len为要发送数据的长度。flag参数可以包含如下的参数。

MSG_CONFIRM(Linux 2.3以上的内核版本支持):通知数据链路层发生了转发,且得到了通信另一段的回应。如果链路层没有得到回应,将使用ARP或其他协议来探测网络上的主机。该参数只用于SOCK_DGRAM和SOCK_RAW类型的套接字。
 
MSG_DONTROUTE:不通过网关发送数据,只将数据发送到同一子网中的计算机。该参数通常用于诊断或路由程序中,只用于路由的协议族中,包套接字不能使用该参数。
 
MSG_DONTWAIT:使用非阻塞操作。如果操作将阻塞,并返回EAGAIN错误。
 
MSG_EOR:结束记录(当套接字类型是SOCK_SEQPACKET时使用)。
 
MSG_MORE(Linux 2.4.4以上内核版本支持):调用者有更多的数据要发送。
 
MSG_OOB:通过套接字发送带外数据(套接字需要支持这一行为,例如,使用SOCK_STREAM类型的套接字)。
write函数与send函数在flag为0时的功能相同。

错误信息:

下面列出send函数常见的错误信息。
EBADF:非法的文件描述。
ECONNRESET:连接重置。
EDESTADDRREQ:在套接字操作中没有指定目标地址。
EFAULT:参数指向了非法的地址空间。
EINTR:数据发送前,捕获到信号。
EINVAL:非法参数。
ENOTSOCK:参数非套接字的文件描述符。
ENOMEM:内存不足。
recv函数可以实现从指定套接字中读取发送来的消息,该函数的具体信息如表13.9所示。

表13.9   recv函数

头文件

函数形式

ssize_t recv(int s, void *buf, size_t len, int flags);

返回值

成功

失败

是否设置errno

0

−1

说明:recv函数用于从指定套接字中获取发送的消息。与send函数一样,该函数只能用于已经建立连接的socket通信中,即只用于面向连接的通信中。参数s为要读取信息的套接字文件描述符。buf参数为指向要保存数据缓冲区的指针。而len为该缓存的最大长度。

参数flags可以包含如下的标志。
 
MSG_DONTWAIT:使用非阻塞操作。如果操作将阻塞,将返回EAGAIN错误。
 
MSG_OOB:通过套接字发送带外数据(套接字需要支持这一行为,例如使用SOCK_STREAM类型的套接字)。
 
MSG_PEEK:该标志表示从接收队列的开始处查看数据,而不从缓冲区中删除数据。
 
MSG_TRUNC:返回包的真实长度,即使该长度超出了传递的缓存长度。该标志只用于流套接字。
 
MSG_WAITALL:该标志将使得操作处于阻塞状态,直到获得全部数据

当flags参数为0时,recv函数等同与read函数的功能。

错误信息:

EAGAIN:在接收到数据前,接收操作处于阻塞或直至超时。
EBADF:非法的文件描述符。
ECONNABORTED:远程主机拒绝网络连接。
EFAULT:指向接收数据的缓冲区指针指向了非法地址空间。
EINTR:系统调用被信号中断。
EINVAL:非法参数。
ENOTCONN:套接字使用了面向连接的协议,但是并没有建立连接。
ENOTSOCK:文件描述符为文件的文件描述符。

【责任编辑:雪花 TEL:(010)68476606-8007】

回书目   上一节   下一节

分享到:

  1. Linux服务器配置全程实录
  2. 揭秘--优秀PPT这样制作

热点职位

更多>>

热点专题

更多>>
  • 互联网运营之道
    互联网运营之道
    《互联网运营之道》内容由运营方法论切入,包括运营的
  • 奔跑吧Ansible
    奔跑吧Ansible
    Ansible是近年用户量急速蹿升的开源配置管理工具。在A
  • Redis实战
    Redis实战
    本书深入浅出地介绍了Redis的5种数据类型,并通过多个

读书

超级网管员——网络基础
本书全面系统地概括了计算机网络的基本理论,详细阐述了OSI模型与网络协议、网络规划与综合布线、对等网络与服务器/客户端网络、

最新热帖

更多>>

51CTO旗下网站

领先的IT技术网站 51CTO 领先的中文存储媒体 WatchStor 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i 51CTO学院