免费注册 查看新帖 |

Chinaunix

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

关于accept的阻塞问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-27 22:50 |只看该作者 |倒序浏览
各位,小弟刚刚接触了linux下的网络编程中的线程编程,最近编写了一个C/S简单模型程序,却始终实现不了功能:
client.c如下:
int main(int argc,char **argv)
{
  int sockfd;
  struct sockaddr_in servaddr;
  pthread_t tid;
  int ret;
  if(argc!=2)
    {
       printf("usage:tcpcli";
       exit(0);
    }
  //printf("1\n";
  bzero(&servaddr,sizeof(servaddr));
  servaddr.sin_family=AF_INET;
  servaddr.sin_port=htons(SERV_PORT);
  inet_pton(AF_INET,argv[1],&servaddr.sin_addr);
  connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
  //printf("2\n";
  str_cli(stdin,sockfd);
  exit(0);
}
server.c主函数如下:
int main(int argc,char **argv)
{
  int listenfd,connfd;
  socklen_t addrlen,len;
  struct sockaddr_in cliaddr,servaddr;
  pthread_t tid;
  int i;
  listenfd=socket(AF_INET,SOCK_STREAM,0);
  bzero(&servaddr,sizeof(servaddr));
  servaddr.sin_family=AF_INET;
  servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
  servaddr.sin_port=SERV_PORT;
  i=bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
  if(i!=0)
    {
      printf("bind error!\n";
      return;
    }
  
  listen(listenfd,20);
  addrlen=sizeof(cliaddr);
  bzero(&cliaddr,sizeof(cliaddr));
  for(;
     {
      len=addrlen;
      printf("1\n";
      connfd=accept(listenfd,(struct sockaddr *)&cliaddr,&addrlen);
      // if(connfd==INVALID_SOCKET)
      //{
      //  break;
      //}
      printf("2\n";
      pthread_create(&tid,NULL,&doit,(void *)connfd);
      pthread_join(tid,NULL);
      }
}
在客户端的命令如下:./client 127.0.0.1(本机内部循环测试),但是用printf测试程序,发现server主函数会一直阻塞在accept函数中,即使在客户端的connect已经成功返回的情况下,accept也是会阻塞。在最后一次握手不是客户端接受到服务器的同步信号并且回应就可以建立连接吗?连connect都成功返回了,应该accpet就可以收到一个连接序列了吧?为什么会被一直阻塞呢?

论坛徽章:
0
2 [报告]
发表于 2008-10-28 05:53 |只看该作者
client 要先socket()后再connect()
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP