博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux常用函数
阅读量:6278 次
发布时间:2019-06-22

本文共 756 字,大约阅读时间需要 2 分钟。

1.     从一个套接口接收数据。

表头文件:
#include<sys/types.h>
#include<sys/socket.h>
 
int PASCAL FAR recv( SOCKET s, char FAR* buf, int len, int flags);
s:一个标识已连接套接口的描述字。
buf:用于接收数据的缓冲区。
len:缓冲区长度。
flags:指定调用方式。
 
描述同步Socket的recv函数的执行流程。当应用程序调用recv函数时:
(1)recv先等待s的发送缓冲中的数据被协议传送完毕,如果协议在传送s的发送缓冲中的数据时出现网络错误,那么recv函数返回SOCKET_ERROR;
(2)如果s的发送缓冲中没有数据或者数据被协议成功发送完毕后,recv先检查套接字s的接收缓冲区,如果s接收缓冲区中没有数据或者协议正在接收数据,那么recv就一直等待,直到协议把数据接收完毕。当协议把数据接收完毕,recv函数就把s的接收缓冲中的数据copy到buf中(注意协议接收到的数据可能大于buf的长度,所以在这种情况下要调用几次recv函数才能把s的接收缓冲中的数据copy完。recv函数仅仅是copy数据,真正的接收数据是协议来完成的);
recv函数返回其实际copy的字节数。如果recv在copy时出错,那么它返回SOCKET_ERROR;如果recv函数在等待协议接收数据时网络中断了,那么它返回0。
注意:在Unix系统下,如果recv函数在等待协议接收数据时网络断开了,那么调用recv的进程会接收到一个SIGPIPE信号,进程对该信号的默认处理是进程终止。

转载于:https://www.cnblogs.com/muzijinshui/p/3488187.html

你可能感兴趣的文章
【js】函数问题
查看>>
postgresql----数组类型和函数
查看>>
聚集索引,非聚集索引,唯一索引
查看>>
github命令行实用操作
查看>>
进程同步
查看>>
DRF 分页组件
查看>>
Https 与http
查看>>
c++ explicit 修饰构造函数
查看>>
HDU 3018 Ant Trip
查看>>
每天一个linux命令(4) df命令
查看>>
jchdl - GSL实例 - Counter
查看>>
23 设计模式
查看>>
linux
查看>>
hessian 在spring中的使用 (bean 如 Dao无法注入的问题)
查看>>
leetcode Nim game
查看>>
leetcode 189. Rotate Array
查看>>
24. Spring Boot 自定义Starter (未整理,待续)
查看>>
Lua用于游戏运行期热更(不重启游戏客户端)
查看>>
Openresty+Lua+Redis灰度发布
查看>>
js原型链结构与链表结构对比
查看>>