Linux Socket函数简明参考(4) 作者:xieaotian发表于2010-02-07 10:46:57
17. recvmsg(经socket接收数据)
相关函数 recv,recvfrom,send,sendto,sendmsg,socket
表头文件 #include
#include
定义函数 int recvmsg(int s,struct msghdr *msg,unsigned int flags);
函数说明 recvmsg ()用来接收远程主机经指定的socket传来的数据。参数s为已建立好连线的socket,如果利用UDP协议则不需经过连线操作。参数msg指向欲连 线的数据结构内容,参数flags一般设0,详细描述请参考send()。关于结构msghdr的定义请参考sendmsg()。
返回值 成功则返回接收到的字符数,失败则返回-1,错误原因存于errno中。
错误代码
* EBADF 参数s非合法的socket处理代码[*]EFAULT 参数中有一指针指向无法存取的内存空间[*]ENOTSOCK 参数s为一文件描述词,非socket[*]EINTR 被信号所中断[*]EAGAIN 此操作会令进程阻断,但参数s的socket为不可阻断[*]ENOBUFS 系统的缓冲内存不足[*]ENOMEM 核心内存不足[*]EINVAL 传给系统调用的参数不正确
范例 参考recvfrom()。
18. send(经socket传送数据)
相关函数 sendto,sendmsg,recv,recvfrom,socket
表头文件 #include
#include
定义函数 int send(int s,const void * msg,int len,unsigned int falgs);
函数说明 send()用来将数据由指定的socket 传给对方主机。参数s为已建立好连接的socket。参数msg指向欲连线的数据内容,参数len则为数据长度。参数flags一般设0,其他数值定义如下
MSG_OOB 传送的数据以out-of-band 送出。
MSG_DONTROUTE 取消路由表查询
MSG_DONTWAIT 设置为不可阻断运作
MSG_NOSIGNAL 此动作不愿被SIGPIPE 信号中断。
返回值 成功则返回实际传送出去的字符数,失败返回-1。错误原因存于errno
错误代码
* EBADF 参数s 非合法的socket处理代码[*]EFAULT 参数中有一指针指向无法存取的内存空间[*]ENOTSOCK 参数s为一文件描述词,非socket[*]EINTR 被信号所中断[*]EAGAIN 此操作会令进程阻断,但参数s的socket为不可阻断[*]ENOBUFS 系统的缓冲内存不足[*]ENOMEM 核心内存不足[*]EINVAL 传给系统调用的参数不正确
范例 参考connect()
19. sendmsg(经socket传送数据)
相关函数 send,sendto,recv,recvfrom,recvmsg,socket
表头文件 #include
#include
定义函数 int sendmsg(int s,const strcut msghdr *msg,unsigned int flags);
函数说明 sendmsg()用来将数据由指定的socket传给对方主机。参数s为已建立好连线的socket,如果利用UDP协议则不需经过连线操作。参数msg 指向欲连线的数据结构内容,参数flags一般默认为0,详细描述请参考send()。
结构msghdr定义如下
Cpp代码
1. struct msghdr
2. {
3. void *msg_name; /*Address to send to /receive from . */
4. socklen_t msg_namelen; /* Length of addres data */
5. strcut iovec * msg_iov; /* Vector of data to send/receive into */
6. size_t msg_iovlen; /* Number of elements in the vector */
7. void * msg_control; /* Ancillary dat */
8. size_t msg_controllen; /* Ancillary data buffer length */
9. int msg_flags; /* Flags on received message */
10. };
struct msghdr { void *msg_name; /*Address to send to /receive from . */ socklen_t msg_namelen; /* Length of addres data */ strcut iovec * msg_iov; /* Vector of data to send/receive into */ size_t msg_iovlen; /* Number of elements in the vector */ void * msg_control; /* Ancillary dat */ size_t msg_controllen; /* Ancillary data buffer length */ int msg_flags; /* Flags on received message */ };
返回值 成功则返回实际传送出去的字符数,失败返回-1,错误原因存于errno
错误代码
* EBADF 参数s 非合法的socket处理代码[*]EFAULT 参数中有一指针指向无法存取的内存空间[*]ENOTSOCK 参数s为一文件描述词,非socket[*]EINTR 被信号所中断[*]EAGAIN 此操作会令进程阻断,但参数s的socket为不可阻断[*]ENOBUFS 系统的缓冲内存不足[*]ENOMEM 核心内存不足[*]EINVAL 传给系统调用的参数不正确
范例 参考sendto()。
20. sendto(经socket传送数据)
相关函数 send , sendmsg,recv , recvfrom , socket
表头文件 #include < sys/types.h >
#include < sys/socket.h >
定义函数 int sendto ( int s , const void * msg, int len, unsigned int flags, const
struct sockaddr * to , int tolen ) ;
函数说明 sendto() 用来将数据由指定的socket传给对方主机。参数s为已建好连线的socket,如果利用UDP协议则不需经过连线操作。参数msg指向欲连线的数据内 容,参数flags 一般设0,详细描述请参考send()。参数to用来指定欲传送的网络地址,结构sockaddr请参考bind()。参数tolen为sockaddr 的结果长度。
返回值 成功则返回实际传送出去的字符数,失败返回-1,错误原因存于errno 中。
错误代码
* EBADF 参数s非法的socket处理代码[*]EFAULT 参数中有一指针指向无法存取的内存空间[*]WNOTSOCK canshu s为一文件描述词,非socket[*]EINTR 被信号所中断[*]EAGAIN 此动作会令进程阻断,但参数s的soket为补课阻断的[*]ENOBUFS 系统的缓冲内存不足[*]EINVAL 传给系统调用的参数不正确
范例
Cpp代码
回复主题