这两个选项分别用来设置socket接收数据和发送数据的超时时间,因此仅对于数据接收和发送相关的socket专用系统调用有效,,这些系统调用包括 send,sendmsg,recv,recvmsg ,accept 和connect.

在程序中,我们可以根据系统调用的返回值和errno来判断超时时间是否已到,进而觉得是否开始定时任务.

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <assert.h>
#include <stdio.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>int timeout_connect( const char* ip, int port, int time )
{int ret = 0;struct sockaddr_in address;bzero( &address, sizeof( address ) );address.sin_family = AF_INET;inet_pton( AF_INET, ip, &address.sin_addr );address.sin_port = htons( port );int sockfd = socket( PF_INET, SOCK_STREAM, 0 );assert( sockfd >= 0 );struct timeval timeout;timeout.tv_sec = time;timeout.tv_usec = 0;socklen_t len = sizeof( timeout );ret = setsockopt( sockfd, SOL_SOCKET, SO_SNDTIMEO, &timeout, len );assert( ret != -1 );ret = connect( sockfd, ( struct sockaddr* )&address, sizeof( address ) );if ( ret == -1 ){if( errno == EINPROGRESS ){printf( "connecting timeout\n" );return -1;}printf( "error occur when connecting to server\n" );return -1;}return sockfd;
}int main( int argc, char* argv[] )
{if( argc <= 2 ){printf( "usage: %s ip_address port_number\n", basename( argv[0] ) );return 1;}const char* ip = argv[1];int port = atoi( argv[2] );int sockfd = timeout_connect( ip, port, 10 );if ( sockfd < 0 ){return 1;}return 0;
}

Socket选项之SO_RCVTIMEO 和SO_SNDTIMEO相关推荐

  1. linux网络编程二十:socket选项:SO_RCVTIMEO和SO_SNDTIMEO

  2. Linux使用socket选项的定时器

    socket选项SO_RCVTIMEO和SO_SNDTIMEO 这个选项是专门针对socket系列的函数的,函数在下图中说明了.如果超时,就设置错误码,之后在流程中根据错误码判断是否超时. 先给出超时 ...

  3. Socket编程中的强制关闭与优雅关闭及相关socket选项

    以下描述主要是针对windows平台下的TCP socket而言. 首先需要区分一下关闭socket和关闭TCP连接的区别,关闭TCP连接是指TCP协议层的东西,就是两个TCP端之间交换了一些协议包( ...

  4. Linux 高性能服务器编程——socket选项

    socket选项函数 功能:用来读取和设置socket文件描述符属性的方法 函数: #include <sys/scoket.h> int getsockopt ( int sockfd, ...

  5. socket选项: SO_REUSEADDR, SO_RCVBUF, SO_SNDBUF

    From: http://blog.csdn.net/jasonliuvip/article/details/22591531 最近在看<linux高性能服务器编程>,在此做个日记,以激励 ...

  6. Linux网络编程 | socket选项设定 及 网络信息API

    文章目录 读取和设置 socket 选项 SO_REUSEADDR SO_RCVBUF 和 SO_SNDBUF SO_RCVLOWAT 和 SO_SNDLOWAT SO_LINGER 选项 网络信息A ...

  7. socket 选项 详细说明

    下面的两个函数主要是用于设置socket文件描述符属性的方法 getsockopt 和setsockopt这两个函数成功时返回0,失败时返回-1并设置errno ,可以使用 strerror(errn ...

  8. Socket选项概览

    http://www.cnblogs.com/ggjucheng/archive/2012/02/17/2355874.html 前言 socket选项主要是由setsockopt和getsockop ...

  9. socket设置超时时间 SO_RCVTIMEO和SO_SNDTIMEO

    vs2015必须强转一下(char *):     //创建用于监听的套接字,即服务端的套接字     SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0) ...

最新文章

  1. 面试题:mysql 一棵 B+ 树能存多少条数据?
  2. Ubuntu中安装包时提示:you might want to run 'sudo dpkg --configure -a' to correct the problem
  3. 如何在 Apple Silicon (M1) 上开发 Teams App
  4. 如何在 .NET 中使用 Redis缓存
  5. js 保留两位小数(四舍五入)
  6. CSS轮廓 边距 填充 分组和嵌套
  7. 同为EA888发动机,迈腾和奥迪A4L,为何差价10万多?
  8. 腾讯、字节跳动展开拉锯战;网易云音乐称酷狗抄袭;谷歌不再开发云游戏 | 极客头条...
  9. GANs(生成对抗网络)初步
  10. poj 1251 Jungle Roads
  11. 重写Java中equals和hashcode方法的一般规则
  12. 【Python】模糊匹配搜索
  13. 1023_MISRA C规范学习_Rule 2.2
  14. SharePoint下载服务器资源
  15. 仿射密码之加解密及破解
  16. 如何往虚拟机里面复制文件(末尾附带视频教程)
  17. 【计算机网络】Socket详解
  18. 前端字体压缩(免费简单易上手)
  19. 代码工人还是程序员?
  20. Java面试题:工作经验

热门文章

  1. java1.9关键字_对 Java 9 把单个下划线作为关键字的猜想
  2. pandas学习笔记二之pandas选择器
  3. Adobe illustrator 设置字体和微调 - 连载 10
  4. 高薪招聘生物信息工程师-中国科学院深圳先进技术研究院合成所合成生物大设施...
  5. C/C++传递二维数组[转载]
  6. 音频插件组合:Arturia Prophet V3 for Mac
  7. r语言library什么意思_医学统计与R语言:百分条图与雷达图
  8. P2181 对角线(python3实现)
  9. 小学奥数 7651 自来水供给 python
  10. 1.13 编程基础之综合应用 47 大整数除法方法 python