LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 858|回复: 2

帮看一下这个简单的服务器套接字在哪有错!

[复制链接]
发表于 2006-4-13 00:20:44 | 显示全部楼层 |阅读模式
程序表现为不停的打印,不是说在accept调用这个地方会等到有客户试图连接才会返回的吗?:help

  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <stdio.h>
  4. #include <sys/un.h>
  5. #include <unistd.h>

  6. int main(void)
  7. {
  8.         int server_sockfd, client_sockfd;
  9.         int server_len, client_len;
  10.         struct sockaddr_un server_address;
  11.         struct sockaddr_un client_address;

  12.         unlink("server_address");
  13.         server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0);

  14.         server_address.sun_family = AF_UNIX;
  15.         strcpy(server_address.sun_path, "server_socket");
  16.         server_len = sizeof (server_address);
  17.         bind (server_sockfd, (struct sockaddr *)&server_address, server_len);

  18.         listen (server_sockfd, 5);
  19.         while(1) {
  20.                 char ch;
  21.                 printf("server waiting\n");

  22.                 client_len = sizeof (client_address);
  23.                 client_sockfd = accept (server_sockfd, (struct sockaddr *)&client_address, &client_len);
  24.                 read (client_sockfd, &ch, 1);
  25.                 ch++;
  26.                 write (client_sockfd, &ch, 1);
  27.                 close(client_sockfd);
  28.         }

  29. return(0);
  30. }
复制代码
发表于 2006-4-14 13:32:58 | 显示全部楼层
it works fine to me, I'm not sure why it cannot work properly
回复 支持 反对

使用道具 举报

发表于 2006-4-19 09:58:09 | 显示全部楼层

经过重复实验发现问题有以下可能:

<1>程序中某一步出现异常,导致后来的步骤出问题.
比如说:socket()就已经出现问题,那么后来的connect()就会立即返回错误,导致死循环.
<2>地址已经被绑定.
由于编程不规范,第一此运行程序没有出问题.但第二次就出现这种情况.

建议:不要懒惰,把返回值检查一下,确保出现异常或错误能够立即输出提示.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表