소켓 비동기 연결

socket 을 사용 하여 비동기 연결 예제 프로그램 을 진행 합 니 다.
http://www.codeproject.com/Tips/168704/How-to-set-a-socket-connection-timeout
bool connect(char *host,int port, int timeout)
{
    TIMEVAL Timeout;
    Timeout.tv_sec = timeout;
    Timeout.tv_usec = 0;
    struct sockaddr_in address;  /* the libc network address data structure */   
 
    sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 
    address.sin_addr.s_addr = inet_addr(host); /* assign the address */
    address.sin_port = htons(port);            /* translate int2port num */	
    address.sin_family = AF_INET;
 
    //set the socket in non-blocking
    unsigned long iMode = 1;
    int iResult = ioctlsocket(sock, FIONBIO, &iMode);
    if (iResult != NO_ERROR)
    {	
        printf("ioctlsocket failed with error: %ld
", iResult); } if(connect(sock,(struct sockaddr *)&address,sizeof(address))==false) { return false; } // restart the socket mode iMode = 0; iResult = ioctlsocket(sock, FIONBIO, &iMode); if (iResult != NO_ERROR) { printf("ioctlsocket failed with error: %ld
", iResult); } fd_set Write, Err; FD_ZERO(&Write); FD_ZERO(&Err); FD_SET(sock, &Write); FD_SET(sock, &Err); // check if the socket is ready select(0,NULL,&Write,&Err,&Timeout); if(FD_ISSET(sock, &Write)) { return true; } return false; }

좋은 웹페이지 즐겨찾기