Socket选项之SO_RCVTIMEO 和SO_SNDTIMEO
这两个选项分别用来设置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相关推荐
- linux网络编程二十:socket选项:SO_RCVTIMEO和SO_SNDTIMEO
- Linux使用socket选项的定时器
socket选项SO_RCVTIMEO和SO_SNDTIMEO 这个选项是专门针对socket系列的函数的,函数在下图中说明了.如果超时,就设置错误码,之后在流程中根据错误码判断是否超时. 先给出超时 ...
- Socket编程中的强制关闭与优雅关闭及相关socket选项
以下描述主要是针对windows平台下的TCP socket而言. 首先需要区分一下关闭socket和关闭TCP连接的区别,关闭TCP连接是指TCP协议层的东西,就是两个TCP端之间交换了一些协议包( ...
- Linux 高性能服务器编程——socket选项
socket选项函数 功能:用来读取和设置socket文件描述符属性的方法 函数: #include <sys/scoket.h> int getsockopt ( int sockfd, ...
- socket选项: SO_REUSEADDR, SO_RCVBUF, SO_SNDBUF
From: http://blog.csdn.net/jasonliuvip/article/details/22591531 最近在看<linux高性能服务器编程>,在此做个日记,以激励 ...
- Linux网络编程 | socket选项设定 及 网络信息API
文章目录 读取和设置 socket 选项 SO_REUSEADDR SO_RCVBUF 和 SO_SNDBUF SO_RCVLOWAT 和 SO_SNDLOWAT SO_LINGER 选项 网络信息A ...
- socket 选项 详细说明
下面的两个函数主要是用于设置socket文件描述符属性的方法 getsockopt 和setsockopt这两个函数成功时返回0,失败时返回-1并设置errno ,可以使用 strerror(errn ...
- Socket选项概览
http://www.cnblogs.com/ggjucheng/archive/2012/02/17/2355874.html 前言 socket选项主要是由setsockopt和getsockop ...
- socket设置超时时间 SO_RCVTIMEO和SO_SNDTIMEO
vs2015必须强转一下(char *): //创建用于监听的套接字,即服务端的套接字 SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0) ...
最新文章
- 面试题:mysql 一棵 B+ 树能存多少条数据?
- Ubuntu中安装包时提示:you might want to run 'sudo dpkg --configure -a' to correct the problem
- 如何在 Apple Silicon (M1) 上开发 Teams App
- 如何在 .NET 中使用 Redis缓存
- js 保留两位小数(四舍五入)
- CSS轮廓 边距 填充 分组和嵌套
- 同为EA888发动机,迈腾和奥迪A4L,为何差价10万多?
- 腾讯、字节跳动展开拉锯战;网易云音乐称酷狗抄袭;谷歌不再开发云游戏 | 极客头条...
- GANs(生成对抗网络)初步
- poj 1251 Jungle Roads
- 重写Java中equals和hashcode方法的一般规则
- 【Python】模糊匹配搜索
- 1023_MISRA C规范学习_Rule 2.2
- SharePoint下载服务器资源
- 仿射密码之加解密及破解
- 如何往虚拟机里面复制文件(末尾附带视频教程)
- 【计算机网络】Socket详解
- 前端字体压缩(免费简单易上手)
- 代码工人还是程序员?
- Java面试题:工作经验
热门文章
- java1.9关键字_对 Java 9 把单个下划线作为关键字的猜想
- pandas学习笔记二之pandas选择器
- Adobe illustrator 设置字体和微调 - 连载 10
- 高薪招聘生物信息工程师-中国科学院深圳先进技术研究院合成所合成生物大设施...
- C/C++传递二维数组[转载]
- 音频插件组合:Arturia Prophet V3 for Mac
- r语言library什么意思_医学统计与R语言:百分条图与雷达图
- P2181 对角线(python3实现)
- 小学奥数 7651 自来水供给 python
- 1.13 编程基础之综合应用 47 大整数除法方法 python