免费注册 查看新帖 |

Chinaunix

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

UDP的bind为什么堵塞不返回? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-30 12:10 |只看该作者 |倒序浏览
以下代码,在Solaris和linux下都一样,bind的时候,堵塞了。不知道怎么回事,很多例子都是这么写的啊 ... 请大家帮我看看。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <sys/socket.h>
  5. #include <netinet/in.h>

  6. #define BUF_LEN 1024

  7. int main()
  8. {
  9.   int svrSock;
  10.   struct sockaddr_in server;

  11.   printf("initialize socket\n");
  12.   svrSock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  13.   if(svrSock==-1) {
  14.     printf("Error when creating socket.\n");
  15.     exit(1);
  16.   }

  17.   int one = 1;
  18.   if (setsockopt(svrSock, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)) == -1) {
  19.     printf("Error when setting socket option.\n");
  20.     close(svrSock);
  21.     exit(3);
  22.   }

  23.   printf("bind ...\n");
  24.   server.sin_family = AF_INET;
  25.   server.sin_addr.s_addr = htonl(INADDR_ANY);
  26.   server.sin_port = htons(8849);
  27.   if (bind(svrSock, (struct sockaddr *)&server, sizeof(server)) == -1) {
  28.     printf("Error when binding the socket.\n");
  29.     exit(2);
  30.   }

  31.   printf("Reading ...");
  32.   while(1) {
  33.     char rawBuf[BUF_LEN];
  34.     int bytesRead=read(svrSock, rawBuf, BUF_LEN);
  35.     if( bytesRead <= 0) {
  36.       printf("Error on reading.\n");
  37.       continue;
  38.     }
  39.     rawBuf[bytesRead]='\0';
  40.     printf("Received: %s\n", rawBuf);

  41.   }

  42.   close(svrSock);
  43.   return 0;
  44. }

复制代码

论坛徽章:
0
2 [报告]
发表于 2007-07-30 13:10 |只看该作者
标准输出是行缓冲的。
加"\n"到printf("Reading ...");或者调用fflush(stdout);

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2007-07-31 08:33 |只看该作者
ltrace 能让你看得更真实。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP