zoukankan      html  css  js  c++  java
  • window的socket编程设置connect连接超时

    timeval tm;
    fd_set set;
    int error = -1;
    int iReceTimeOut = 2000;
    int len = sizeof(int);

    SOCKET hSocket 

    1.生成socket

    hSocket = socket(AF_INET, SOCK_STREAM, 0);

    2.设置套接字为非阻塞模式

    unsigned long ul = 1;

    ioctlsocket(hSocket , FIONBIO, &ul); //设置为非阻塞模式

    3.开始连接目标地

            if (INVALID_SOCKET != hSocket) 
    	{
    		return false;
    	}
    	hSocket = socket(AF_INET, SOCK_STREAM, 0);
    	if (INVALID_SOCKET == hSocket) 
    	{
    		return false;
    	}
    
    	unsigned long ul = 1;
    	timeval tm;
    	fd_set set;
    	int error = -1;
    	int iReceTimeOut = 2000;
    	int len = sizeof(int);
    
    	SOCKADDR_IN SocketAddr;
    	memset(&SocketAddr,0,sizeof(SOCKADDR_IN));
    	SocketAddr.sin_addr.s_addr = inet_addr(pServerIp);
    	SocketAddr.sin_port = htons(iPort);
    	SocketAddr.sin_family = AF_INET;
    
    
    	ioctlsocket(hSocket, FIONBIO, &ul); //设置为非阻塞模式
    	if (SOCKET_ERROR == connect(hSocket, (SOCKADDR *)&SocketAddr, sizeof(SOCKADDR_IN)))
    	{
    		//连接sock5服务器失败
    		tm.tv_sec  = 2;
    		tm.tv_usec = 0;
    		FD_ZERO(&set);
    		FD_SET(hSocket, &set);
    		if( select(hSocket, NULL, &set, NULL, &tm) <= 0)
    		{
    			closesocket(hSocket);
    			hSocket = INVALID_SOCKET;
    			return false;
    		} 
    		getsockopt(hSocket, SOL_SOCKET, SO_ERROR, (char *)&error, /*(socklen_t *)*/&len);
    		if (error != 0)
    		{
    			closesocket(hSocket);
    			hSocket = INVALID_SOCKET;
    			return false;
    		}
    	}
    
    	ul = 0;
    	ioctlsocket(hSocket, FIONBIO, &ul); //设置为阻塞模式
    
    	setsockopt( hSocket, SOL_SOCKET, SO_RCVTIMEO, ( char * )&iReceTimeOut, sizeof( int ) );        
    

      

    4.最后结束后将套接字再次设置为阻塞模式

    ul = 0;
    ioctlsocket(hSocket , FIONBIO, &ul); //设置为阻塞模式

    5.如果想设置接受超时

    setsockopt( hSocket , SOL_SOCKET, SO_RCVTIMEO, ( char * )&iReceTimeOut, sizeof( int ) );

  • 相关阅读:
    【搜索好题】bzoj1501 [NOI2005]智慧珠游戏
    bzoj1854 [Scoi2010]游戏 ([SCOI2010]连续攻击游戏)
    bzoj1412 [ZJOI2009]狼和羊的故事
    LeetCode(22)Generate Parentheses
    LeetCode(11) Container With Most Water
    VS2013环境下Boost库配置
    LeetCode(87) Gray Code
    LeetCode(86) Partition List
    LeetCode(82)Remove Duplicates from Sorted List
    LeetCode(81) Search in Rotated Array II
  • 原文地址:https://www.cnblogs.com/Sniper-quay/p/13955471.html
Copyright © 2011-2022 走看看