2019独角兽企业重金招聘Python工程师标准>>>

================
收藏备用。
================
参数解释:
sck - socket
buf - 接收缓冲区
size-缓冲区大小
time_out-等待时间(按秒计)如果超时则返回
返回值:收到字节数,0表示超时等错误
 
  1. int rcv(int sck, void * buf, int size, int time_out)

  2. {

  3. if (sck < 1 || !buf || size < 1) return 0;

  4. timeval tv = { 0, 0}; timeval * ptv = 0;

  5. if (time_out > 0) { tv.tv_sec = time_out; ptv = &tv; }

  6. memset(buf, 0, size);

  7. int r = 0; char * b = (char*) buf; int sz = size;

  8. fd_set rd, er; int total = 0; time_t t0 = time(0); time_t t1 = 0;

  9. do {

  10. FD_ZERO(&rd); FD_SET(sck, &rd);

  11. FD_ZERO(&er); FD_SET(sck, &er);

  12. r = select(sck + 1, &rd, 0, &er, ptv);

  13. if (r == -1) { nperror("select()"); return -1; }

  14. if (FD_ISSET(sck, &er)) {

  15. nperror("socket(shutdown)"); return -1;

  16. }//end if

  17. if (FD_ISSET(sck, &rd)) {

  18. r = recv(sck, b, sz, 0);

  19. if (r == -1) { nperror("recv()"); return -1; }

  20. total += r; sz -= r; b+= r;

  21. }//end if

  22. if (time_out > 0)

  23. t1 = time(0) - t0;

  24. else

  25. t1 = time_out - 1;

  26. //end if

  27. }while(sz && t1 < time_out);

  28. return total;

  29. }//end if

转载于:https://my.oschina.net/u/4000302/blog/3044777

Socket recv()之前进行select代码相关推荐

  1. python recv_Python socket.recv方法代码示例

    # 需要导入模块: from gevent import socket [as 别名] # 或者: from gevent.socket import recv [as 别名] def handle( ...

  2. python怎么发送代码文件_python 通过 socket 发送文件的实例代码

    目录结构: client: #!/usr/bin/env python # -*-coding:utf-8 -*- import socket, struct, json download_dir = ...

  3. python recv_[Python]关于socket.recv()的非阻塞用法

    Context 在写一个Socket I/O模块,功能要求如下: 作为服务端,需要永远循环等待连接 建立TCP连接后可以收发数据 收发数据相互独立,不能阻塞 Trouble 代码如下 def run_ ...

  4. python socket recv非阻塞_socket非阻塞recv大坑

    Python中,socket用来实现网络通信,它默认的recv是一个阻塞的函数,也就是说,当运行到recv时,会在这个位置一直等待直到有数据传输过来,我在网上一篇文章看到: Sunmmary Pyth ...

  5. Linux 释放socket资源,LwIP使用select,close socket资源释放不完全问题

    这篇文章本应该在4月就写好的,但是博客评论系统一直没有搭建好,走了很多弯路,现在好了,delay这么久,终于要要补过来了.自建博客:金宝的博客 该文章完全原创,除通用.广泛的知识点外,均为个人总结,如 ...

  6. linux tcp阻塞socket recv接收数据 未达到指定长度返回问题

    一直以为在阻塞的tcp socket上使用read/recv读取的数据长度一定和指定的读取长度一致,但是实际测试时发现往往返回的长度都比指定长度短,查找资料发现其实是一直误解了这个函数.    引用& ...

  7. Socket 编程 windows到Linux代码移植遇到的问题

    Socket 编程 windows到Linux代码移植遇到的问题 1.一些常用函数的移植 http://www.vckbase.com/document/viewdoc/?id=1586 2.网络 - ...

  8. Python自动化运维之15、网络编程之socket、socketserver、select、twisted

    一.TCP/IP相关知识 TCP/UDP提供进程地址,两个协议互不干扰的独自的协议 TCP :Transmission Control Protocol 传输控制协议,面向连接的协议,通信前需要建立通 ...

  9. linux socket recv函数如何判断收完一包_linux服务器端编程之高性能服务器架构设计总结...

    所谓高性能就是服务器能流畅地处理各个客户端的连接并尽量低延迟地应答客户端的请求:所谓高并发,指的是服务器可以同时支持多的客户端连接,且这些客户端在连接期间内会不断与服务器有数据来往. 这篇文章将从两个 ...

最新文章

  1. javaWeb -- HTTP协议
  2. [开发笔记]-未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出...
  3. 我做的百度飞桨PaddleOCR .NET调用库
  4. 常用cpu位数与变量长度表(不同编译器可能有差异)
  5. ucc编译器(词法分析)
  6. 【报告分享】bilibili2020年营销通案:激活年轻营销力.pdf(附下载链接)
  7. Angular 启动项目时 port 4200 is already in use 解决方法
  8. struts2上传图片到mysql数据库 实例_Struts2上传图片到Mysql数据库中,以及显示到页面...
  9. 嵌套查询(2020-3-25 )
  10. 全国各地将推广电子证照,取代一证通
  11. php代码执行函数解析
  12. .net学科-杨中科-Unity3D视频教程
  13. 方差(Var),样本方差(SVar),标准差(SD),均方误差(MSE),均方根误差(RMSE),平均绝对误差(MAE)
  14. SpringCloud 问题杂集
  15. 明源地产ERP实施五步法
  16. 关于购买二手macbook的建议,看这一篇文章就够了!
  17. 机器学习及其应用2013, 机器学习及其应用2015
  18. JS中使用Math.round(x)保留1位小数点
  19. 可靠传输的原理:停止等待协议、ARQ协议;TCP协议的可靠传输
  20. 学习笔记-Volatility

热门文章

  1. django 连接mysql 数据库
  2. Docker - command in docker container
  3. typedef 用法总结
  4. Matlab Robotic Toolbox V9.10工具箱(三):轨迹规划
  5. 我知道你会用Jupyter Notebook,但这些插件你都会了吗?
  6. 实战操作主机角色转移,Active Directory系列之十
  7. Mysql 百万级数据优化资料
  8. Python机器学习--回归
  9. Vuex 2.0 源码分析
  10. 【uva 1614】Hell on the Markets(算法效率--贪心)