返回顶部
首页 > 资讯 > 操作系统 >在linux下玩转带有超时时间的connect函数
  • 179
分享到

在linux下玩转带有超时时间的connect函数

摘要

在之前的文章中,我们在windows下玩过带有超时时间的,本文我们在linux下来玩。在某次面试中,还被遇到了这个问题,有意思。 直接上客户端代码: #include <unistd.h> #includ

在之前的文章中,我们在windows下玩过带有超时时间的,本文我们在linux下来玩。在某次面试中,还被遇到了这个问题,有意思。

直接上客户端代码:


#include <unistd.h>
#include <sys/types.h>
#include <sys/Socket.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include <malloc.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <stdarg.h>
#include <fcntl.h>
#include <time.h>
int main(int arGC, char *argv[]) // 注意输入参数, 带上ip和port
{
  int sockClient = socket(AF_INET, SOCK_STREAM, 0);
  struct sockaddr_in addrSrv;
  addrSrv.sin_addr.s_addr = inet_addr(argv[1]);
  addrSrv.sin_family = AF_INET;
  addrSrv.sin_port = htons(atoi(argv[2]));
 fcntl(sockClient, F_SETFL, fcntl(sockClient, F_GETFL, 0)|O_NONBLOCK); 
  int iRet = connect(sockClient, ( const struct sockaddr *)&addrSrv, sizeof(struct sockaddr_in));
 printf("connect iRet is %d, errmsg:%s\n", iRet, strerror(errno)); // 返回-1不一定是异常
 if (iRet != 0) 
 { 
   if(errno != EINPROGRESS)
 {
  printf("connect error:%s\n", strerror(errno)); 
 }
   else 
 {
  struct timeval tm = {5, 0}; 
  fd_set wset, rset; 
  FD_ZERO(&wset); 
  FD_ZERO(&rset); 
  FD_SET(sockClient, &wset); 
  FD_SET(sockClient, &rset); 
  int time1 = time(NULL);
  int n = select(sockClient + 1, &rset, &wset, NULL, &tm); 
  int time2 = time(NULL);
  printf("time gap is %d\n", time2 - time1);
  if(n < 0) 
  { 
   printf("select error, n is %d\n", n); 
  } 
  else if(n == 0) 
  { 
   printf("connect time out\n"); 
  } 
  else if (n == 1) 
  {
   if(FD_ISSET(sockClient, &wset)) 
   { 
    printf("connect ok!\n"); 
    fcntl(sockClient, F_SETFL, fcntl(sockClient, F_GETFL, 0) & ~O_NONBLOCK); 
   } 
   else 
   { 
    printf("unknow error:%s\n", strerror(errno)); 
   } 
  }
  else
  {
  printf("oh, not care now, n is %d\n", n);
  }
 } 
 } 
 printf("I am here!\n");
  getchar();
  close(sockClient);
  return 0;
}

服务端代码,我们已经写过多次,本文就不写了。

测试,上述程序OK, 用tcpdump抓包,还能学到不少东西,比如SYN包重传,RST包等。有点意思。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

--结束END--

本文标题: 在linux下玩转带有超时时间的connect函数

本文链接: https://lsjlt.com/news/20240.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 在linux下玩转带有超时时间的connect函数
    在之前的文章中,我们在Windows下玩过带有超时时间的,本文我们在linux下来玩。在某次面试中,还被遇到了这个问题,有意思。 直接上客户端代码: #include <unistd.h> #includ...
    99+
    2022-06-04
    linux下connect函数 在linux下玩转带有超时时间的connect函数
  • 在Linux/Mac下怎么为Python函数添加超时时间
    本篇内容主要讲解“在Linux/Mac下怎么为Python函数添加超时时间”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“在Linux/Mac下怎么为Python函数添加超时时间”吧!首先我们来看...
    99+
    2023-06-16
  • Linux时间函数有哪些
    这篇“Linux时间函数有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Linux时间函数有哪些”文章吧。一、linux...
    99+
    2023-06-28
  • linux有没有获取时间的函数
    本篇内容介绍了“linux有没有获取时间的函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!linux有获取时间的函数。linux常用的时间...
    99+
    2023-06-30
  • linux有获取时间的函数吗
    是的,Linux有多个函数可用于获取时间。以下是一些常用的函数:1. time()函数:返回自UTC 1970年1月1日以来经过的秒...
    99+
    2023-08-25
    linux
  • linux是否有计算时间的函数
    这篇“linux是否有计算时间的函数”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“linu...
    99+
    2023-04-20
    linux
  • PHP中的时间转换时间戳函数是什么
    本篇内容主要讲解“PHP中的时间转换时间戳函数是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP中的时间转换时间戳函数是什么”吧!PHP 时间转换时间戳函数在PHP编程中,经常会遇到时间...
    99+
    2023-07-05
  • linux下与时间有关的函数和结构体是什么
    本篇内容介绍了“linux下与时间有关的函数和结构体是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!时间类型。Linux下常用的时间类型...
    99+
    2023-06-04
  • 怎么在PHP中用内置函数将时间转换为时间戳
    这篇“怎么在PHP中用内置函数将时间转换为时间戳”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么在PHP中用内置函数将时间...
    99+
    2023-07-05
  • 怎么在PHP中使用时间转换函数
    这篇文章主要介绍“怎么在PHP中使用时间转换函数”,在日常操作中,相信很多人在怎么在PHP中使用时间转换函数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么在PHP中使用时间转换函数”的疑惑有所帮助!接下来...
    99+
    2023-07-05
  • php中时间戳转为本地时间的函数是什么
    本文操作环境:Windows10系统、PHP7.1版、Dell G3电脑。php中时间戳转为本地时间的函数是什么PHP date() 函数可把时间戳格式化为可读性更好的日期和时间。Tip时间戳是一个字符序列,表示一定的事件发生的日期/时间。...
    99+
    2018-09-16
    PHP
  • php时间戳转换常用函数有哪些
    这篇“php时间戳转换常用函数有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php时间戳转换常用函数有哪些”文章吧。一...
    99+
    2023-07-05
  • Mysql的时间函数有哪些
    小编给大家分享一下Mysql的时间函数有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! mysql 的时间函数很丰富  1....
    99+
    2024-04-02
  • 在Linux系统中的时间转化方法
    本篇内容介绍了“在Linux系统中的时间转化方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  Linux时间转化方法:  (1)date...
    99+
    2023-06-13
  • 聊聊php中转换时间戳的函数
    PHP是一种广泛使用的服务器端编程语言,其中一个最为有用的功能是操作日期和时间。在PHP中,我们通常使用时间戳函数来处理时间相关的事务。时间戳是一种表示时间的整数值,从1970年1月1日0点0分0秒到现在的秒数。PHP提供了很多与时间戳相关...
    99+
    2023-05-14
  • nodejs中的时间函数有哪些
    小编给大家分享一下nodejs中的时间函数有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! nodejs中的时间函数:1、moment();2、format...
    99+
    2024-04-02
  • php中转换时间戳的函数是什么
    本篇内容介绍了“php中转换时间戳的函数是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先,PHP中最常用的时间戳函数是time()函...
    99+
    2023-07-05
  • Linux下与文件相关的时间有哪些
    这篇文章将为大家详细讲解有关Linux下与文件相关的时间有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。与文件相关的几个时间:   1、访问时间,读一次这个文件的内容,这个时间就会更新。比如对这个文件...
    99+
    2023-06-13
  • linux时间戳在线转换的方法是什么
    在Linux系统中,可以使用date命令来进行时间戳的转换。以下是一些常用的时间戳转换方法: 将时间戳转换为日期时间格式: da...
    99+
    2024-03-01
    linux
  • 如何用 Golang 存储和检索带有时区的时间数据?
    在 go 中,使用 time 包处理时区时间:存储:使用 time.now() 获取当前时间,并用 time.in() 转换为指定时区的本地时间,再转换为字符串。检索:使用 time.p...
    99+
    2024-05-22
    golang 时区 字符串解析
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作