免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1417 | 回复: 5
打印 上一主题 下一主题

connect错误 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-04-26 14:16 |只看该作者 |倒序浏览
一个客户端链接服务器端程序,
我原来是非阻塞的,后来加了两句代码:
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?

论坛徽章:
0
2 [报告]
发表于 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()。

论坛徽章:
0
3 [报告]
发表于 2004-04-27 15:50 |只看该作者

connect错误

是这样的么,好像还不行啊

论坛徽章:
0
4 [报告]
发表于 2004-04-27 16:03 |只看该作者

connect错误

贴代码上来看看。

论坛徽章:
0
5 [报告]
发表于 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);

论坛徽章:
0
6 [报告]
发表于 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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP