Chinaunix

标题: connect错误 [打印本页]

作者: heartk    时间: 2004-04-26 14:16
标题: connect错误
一个客户端链接服务器端程序,
我原来是非阻塞的,后来加了两句代码:
if ((flag = fcntl(sock, F_GETFL, 0)) < 0)
   {
        printf("取短信套接字属性错误\n";
        return -1;
   }
  if (fcntl(sock, F_SETFL, flag | O_NONBLOCK) < 0)
  {
        printf("设置短信套接字属性错误\n";       
        return -1;
  }
把socket设置为非阻塞的,第一次能链接上,后来connect报错,
: Operation now in progress
我把这两句删掉了,还报这个错,why?
作者: uiibono    时间: 2004-04-26 15:29
标题: connect错误
原帖由 "heartk" 发表:
一个客户端链接服务器端程序,
我原来是非阻塞的,后来加了两句代码:
if ((flag = fcntl(sock, F_GETFL, 0)) < 0)
   {
        printf("取短信套接字属性错误\n";
        return -1;
   }
  if (fcntl(sock, F_SETFL..........


你再次使用 那个 socket fd 调用 connect()的时候,要先 close 掉,然后再
socket()---->; connect()。
作者: heartk    时间: 2004-04-27 15:50
标题: connect错误
是这样的么,好像还不行啊
作者: uiibono    时间: 2004-04-27 16:03
标题: connect错误
贴代码上来看看。
作者: heartk    时间: 2004-04-27 16:52
标题: connect错误
int sock,i,flag;
   struct sockaddr_in server;
   struct hostend *he;   
   unsigned char buf[MAXLEN];
      
   
   sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);   
   if(sock<0)
   {
      perror("opening streaming socket";      
   }
   
   bzero(&server,sizeof(server));
   server.sin_family = AF_INET;  
   server.sin_port = htons(Port);
   server.sin_addr.s_addr=inet_addr(add);
      
   if ((flag = fcntl(sock, F_GETFL, 0)) < 0)
   {
        printf("取套接字属性错误\n";
        return -1;
   }
  if (fcntl(sock, F_SETFL, flag | O_NONBLOCK) < 0)
  {
        printf("设置套接字属性错误\n";       
        return -1;
  }   
  if ((i=connect(sock,(struct sockaddr *)&server,sizeof(struct sockaddr)))==-1)
  {        
        perror("connect()\n";   
        printf("errno=%d\n",errno);
        close(sock);      
        return -1;      
  }
  if (fcntl(sock, F_SETFL, flag) < 0)
  {
        printf("设置套接字属性错误\n";       
        return -1;
  }
/*这段是链接*/
另一段对方断的时候和程序跳出时close(sock);
作者: uiibono    时间: 2004-04-27 19:15
标题: connect错误
我前面的回答是不对的,不好意思!

对于 non-blocking socket, connect()的时候返回 error = EINPROGRESS(翻译过来就是Operation now in progress) 是很常见的。

这里有一个详细的讨论,希望对你有帮助。

http://bbs.chinaunix.net/forum/viewtopic.php?t=60921




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2