zoukankan      html  css  js  c++  java
  • 网络通讯函数测试记录

    1、对于非阻塞的WSAConnect 无论是否连上,都可以说是瞬间(2毫秒内)返回。

    假定指定超时时间是3秒:

    场景1:如果connect的服务端是一个无效的ip端口,此时用select可读去检测是否连接上,如果指定超时时间超过1秒钟比如3秒,则一般要1秒钟才返回结果,如果指定100毫秒,则100毫秒后返回。如果connect是成功的,则select瞬间返回。

    场景2:接收方程序异常,接收方接收缓冲区已满,而发送方的发送缓冲区也满了,此时发送方如果是检测是否可写,那是3秒。

    2、一个有效的套接字,可以随时设置为阻塞或者非阻塞模式,可以动态改变。

    3、在win7 32位系统上测试,TCP发送和接收缓冲区都是8192字节。

    int iSize(0);
    int iLen = sizeof(iSize);
    getsockopt(m_hSocket,SOL_SOCKET,SO_RCVBUF,( char *)&iSize,&iLen)

    4、在win7 32位系统上测试,select函数返回超时,这时用WSAGetLastError()是没有错误号的。只有返回-1即SOCKET_ERROR时才能获取错误码。

    select()调用返回处于就绪状态并且已经包含在fd_set结构中的描述字总数;如果超时则返回0;否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError获取相应错误代码。
    当返回为-1时,所有描述符集清0。
    当返回为0时,超时不修改任何描述符集。
    当返回为非0时,在3个描述符集里,依旧是1的位就是准备好的描述符。这也就是为什么,每次用select后都要用FD_ISSET的原因。
  • 相关阅读:
    SpringCloud分布式配置中心
    SpringCloud服务降级案列
    SpringCloud断路器(Hystrix)
    SpringCloud服务过滤filter
    SpringCloud路由网关Zuul
    SpringCloud微服务实现生产者消费者+ribbon负载均衡
    SpringCloud微服务的Eureka
    忘记MySQL密码以及无法登陆等解决办法
    MySQL备份
    实现两个MySQL数据库之间的主从同步
  • 原文地址:https://www.cnblogs.com/chncongblog/p/2980380.html
Copyright © 2011-2022 走看看