CÄÚµå : connect ŸÀÓ ¾Æ¿ô
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : Code>C>connectWithTimeout



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

Contents

1 ¼³¸í
2 »ç¿ë¹æ¹ý
3 ÄÚµå
4 °ü·Ã °Ô½Ã¹°
5 º¯°æ»çÇ×
5.1 2004/01/08

1 ¼³¸í

2 »ç¿ë¹æ¹ý

3 ÄÚµå

int connectWithTimeout(int fd,struct sockaddr *remote, int len, int secs, int *err) 
{ 
    int saveflags,ret,back_err; 
    fd_set fd_w; 
    struct timeval timeout; 
  
    saveflags = fcntl(fd,F_GETFL,0); 
    if(saveflags<0)  
    { 
        perror("fcntl1"); 
        *err=errno; 
        return -1; 
    } 
 
    /* Set non blocking */ 
    if( fcntl(fd,F_SETFL,saveflags|O_NONBLOCK)<0 )  
    { 
        perror("fcntl2"); 
        *err=errno; 
        return -1; 
    } 
 
    /* This will return immediately */ 
    *err = connect(fd,remote,len); 
    back_err=errno; 
 
    /* restore flags */ 
    if( fcntl(fd,F_SETFL,saveflags)<0 )  
    { 
        perror("fcntl3"); 
        *err=errno; 
        return -1; 
    } 
 
    /* return unless the connection was successful or the connect is 
    still in progress. */ 
    if(*err<0 && back_err!=EINPROGRESS)  
    { 
        perror("connect"); 
        *err=errno; 
        return -1; 
    } 
 
 
    timeout.tv_sec = (long)secs; 
    timeout.tv_usec = 0L; 
 
    FD_ZERO(&fd_w); 
    FD_SET(fd,&fd_w); 
 
    *err= select(FD_SETSIZE,NULL,&fd_w,NULL,&timeout); 
    if(*err<0)  
    { 
        perror("select"); 
        *err=errno; 
        return -1; 
    } 
 
    /* 0 means it timeout out & no fds changed */ 
    if(*err==0)  
    { 
        perror("timeout..."); 
        *err=ETIMEDOUT; 
        return -1; 
    } 
 
    /* Get the return code from the connect */ 
    len= sizeof(ret); 
    *err= getsockopt(fd,SOL_SOCKET,SO_ERROR,&ret,&len); 
    if(*err<0)  
    { 
        perror("getsockopt"); 
        *err=errno; 
        return -1; 
    } 
 
    /* ret=0 means success, otherwise it contains the errno */ 
    if(ret)  
    { 
        *err=ret; 
        return -1; 
    } 
    *err=0; 
    return 0; 
}  
 

4 °ü·Ã °Ô½Ã¹°

  1. ¼ÒÄÏ timeout
  2. socket api ·¹ÆÛ·±½º

5 º¯°æ»çÇ×


5.1 2004/01/08

EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.