send的Linux C 函数

send的Linux C 函数,第1张

经套接字传送消息

相关函数

sendto,sendmsg,recv,recvfrom,recvmsg,socket

表头文件

#include <sys/socket.h >

定义函数

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

参数说明

第一个参数指定发送端套接字描述符;

第二个参数指明一个存放应用程式要发送数据的缓冲区;

第三个参数指明实际要发送的数据的字符数;

第四个参数一般置0。

函数说明

send() 用来将数据由指定的 socket 传给对方主机。使用 send 时套接字必须已经连接。send 不包含传送失败的提示信息,如果检测到本地错误将返回-1。因此,如果send 成功返回,并不必然表示连接另一端的进程接收数据。所保证的仅是当send 成功返回时,数据已经无错误地发送到网络上。

对于支持为报文设限的协议,如果单个报文超过协议所支持的最大尺寸,send 失败并将 errno 设为 EMSGSIZE ;对于字节流协议,send 会阻塞直到整个数据被传输。

flags 参数有如下的选择:

MSG_DONTROUTE 勿将数据路由出本地网络

MSG_DONTWAIT 允许非阻塞 *** 作(等价于使用O_NONBLOCK)

MSG_EOR 如果协议支持,此为记录结束

MSG_OOB 如果协议支持,发送带外数据

MSG_NOSIGNAL 禁止向系统发送异常信息

返回值

成功则返回实际传送出去的字符数,失败返回-1,错误原因存于errno 中。

错误代码

EBADF 参数 s 非法的 socket 处理代码。

EFAULT 参数中有一指针指向无法存取的内存空间。

WNOTSOCK 参数 s 为一文件描述词,非 socket。

EINTR 被信号所中断。

EAGAIN 此动作会令进程阻断,但参数 s 的 socket 为不可阻断的。

ENOBUFS 系统的缓冲内存不足。

EINVAL 传给系统调用的参数不正确。

int socketdomain指明所使用的协议族,通常为PF_INET,表示互联网协议族;type参数指定socket的类型:SOCK_STREAM 或SOCK_DGRAM,Socket接口还定义了原始Socket,允许程序使用低层协议;protocol通常赋值"0"。

Socket()调用返回一个整型socket描述符,你可以在后面的调用使用它。 Socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。

调用Socket函数时,socket执行体将建立一个Socket,实际上"建立一个Socket"意味着为一个Socket数据结构分配存储空间。 Socket执行体为你管理描述符表。

扩展资料:

支持下述类型描述:

SOCK_STREAM 提供有序的、可靠的、双向的和基于连接的字节流,使用带外数据传送机制,为Internet地址族使用TCP。

SOCK_DGRAM 支持无连接的、不可靠的和使用固定大小(通常很小)缓冲区的数据报服务,为Internet地址族使用UDP。

SOCK_STREAM类型的套接口为全双向的字节流。对于流类套接口,在接收或发送数据前必需处于已连接状态。用connect()调用建立与另一套接口的连接,连接成功后,即可用send()和recv()传送数据。当会话结束后,调用close()。带外数据根据规定用send()和recv()来接收。

参考资料来源:百度百科-socket函数


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/6250909.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-19
下一篇 2023-03-19

发表评论

登录后才能评论

评论列表(0条)

保存