首页 > 其他分享 >设置connect超时

设置connect超时

时间:2023-09-19 10:32:29浏览次数:37  
标签:phst return addr timeout ret Rtaddr connect 设置 超时


首先设置socket为非阻塞模式

再通过select查询超时

#include "stdafx.h"
#include <WINSOCK2.H>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
int main(int argc, char* argv[])
{
	WSADATA wsaData;
	if (WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
	{
		return -1;
	}
	PHOSTENT phst=gethostbyname("www.yahoo.com");
	if (!phst)
	{
		return -1;
	}
	IN_ADDR addr;
	memmove(&addr,phst->h_addr_list[0],phst->h_length);
	SOCKADDR_IN Rtaddr;
	Rtaddr.sin_family=AF_INET;
	Rtaddr.sin_addr=addr;
	Rtaddr.sin_port=htons(80);
	SOCKET s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
	if (s==INVALID_SOCKET)
	{
		return -1;
	}
	DWORD dwset=1;
	int ret=ioctlsocket(s,FIONBIO,(LPDWORD)&dwset);
	if (ret==SOCKET_ERROR)
	{
		return -1;
	}
	DWORD start=GetTickCount();
	connect(s,(SOCKADDR*)&Rtaddr,sizeof Rtaddr);
	
	timeval timeout;
	fd_set r;
	FD_ZERO(&r);
	FD_SET(s,&r);
	timeout.tv_sec=1;
	timeout.tv_usec=0;
	
	ret=select(0,0,&r,0,&timeout);
	if (ret<=0) //超时或SOCKET_ERROR
	{
		printf("connect error.../n");
	}
	else
	printf("connect success./n");
	printf("time: %d/n",GetTickCount()-start);
	dwset=0;
	ret=ioctlsocket(s,FIONBIO,(LPDWORD)&dwset);
	if (ret==SOCKET_ERROR)
	{
		printf("error %d/n",WSAGetLastError());
	}
	closesocket(s);
	WSACleanup();
	return 0;
}

标签:phst,return,addr,timeout,ret,Rtaddr,connect,设置,超时
From: https://blog.51cto.com/u_15487030/7522658

相关文章

  • SQL设置SQLServer最大连接数
    设置最大连接数下面的T-SQL语句可以配置SQLServer允许的并发用户连接的最大数目。execsp_configure'showadvancedoptions',1execsp_configure'userconnections',100第一句用以表示显示sp_configure系统存储过程高级选项,使用userconnections时,要求......
  • IPQ5018 VS IPQ6010 VS IPQ9574|Advancing Wireless Connectivity: The Power of Wi-F
    IPQ5018VSIPQ6010VSIPQ9574|AdvancingWirelessConnectivity:ThePowerofWi-Fi6&Wi-Fi 7Intheever-evolvinglandscapeofwirelessnetworking,twogame-changershaveemerged,promisingtoredefineourconnectivityexperience:Wi-Fi6andWi-Fi7.......
  • LIGGGHTS中颗粒与壁面的参数设置
     ......
  • 【小睿的ML之路】Matplotlib子图操作(创建子图,多数据设置颜色、标签等)--美国失业率
    创建子图importmatplotlib.pyplotaspltimportnumpyasnpimportpandasaspdunrate=pd.read_csv('UNRATE.csv')unrate['DATE']=pd.to_datetime(unrate['DATE'])#时间日期转换unrate['Month']=unrate['DATE'].dt.......
  • springboot中配置druid的依赖,与application.yml中设置druid的相关配置
    2023-09-18<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.16</version></dependency>application.ymlsprin......
  • linux 中设置粘滞位权限
     对目录进行粘滞位设置,实现用户只能删除自己的文件,而不能删除别人的文件。文件能否被删除并不取决于自身的权限,而是看其所在目录是否有写入权限。 001、[root@pc1home]#lsliujiaxin01liujiaxin02[root@pc1home]#whoami##当前用户root[root@pc......
  • 关于`dial unix /var/run/docker.sock: connect: permission denied`的处理方法笔记
    之前遇到的一个问题,使用非root用户时操作docker提示无权限,在查阅了一些文章之后自己又摸索出了一些更方便的方法,顺手记录下来。一、问题发现根据报错信息dialunix/var/run/docker.sock:connect:permissiondenied,可以看出,是因为当前用户对docker使用的unixdomainsocket......
  • idea设置项目启动的JVM运行内存大小
    idea设置项目启动的JVM运行内存大小场景在开发当中,idea默认服务启动要占用1G内存。其实每个项目本地开发和调试的时候,根本不需要1G内存,200M左右足以如果在微服务体系下,那效果更明显,相同的内存可以启动更多的服务刚好本人的电脑只有8G,公司的微服务项目启动后,电脑风扇疯狂的转动......
  • chmod递归设置文件夹和文件权限的正确用法
    如果要分别设置文件夹和文件的权限,建议先设置全部目录和文件为600或644首先cd到你要设置权限的文件夹第1种情况:只有自己能读写,其他人无权访问(隐私文件)的话,就是用600chmod-R600.chmod-Ru+X. 第2种情况:只有自己能读写,其他人只读(共享文件)的话,就是用644chmod-R644......
  • Markdown 设置字体、字号与颜色
    Markdown设置字体、字号与颜色Markdown本身不支持修改字体、字号与颜色等,还好Markdown支持HTML语言,所以我们采用HTML语法格式即可。设置字体、字号和颜色编辑字体、字号和颜色的代码如下:<fontface="黑体">我是黑体字</font><fontface="微软雅黑">我是微软雅黑<......