LinuxSir.cn,穿越时空的Linuxsir!

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

大家帮我看看这段socket程序一连接accept就出错呢

[复制链接]
发表于 2005-4-15 22:58:24 | 显示全部楼层 |阅读模式
程序代码
[PHP]#include<sys/socket.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<netdb.h>
int main(int argc, char** argv) {
    struct sockaddr_in servaddr, clientaddr;
    int listenfd, connfd;
    int clientlen;
    int service_port =9999;

    listenfd = socket(PF_INET, SOCK_STREAM, 0);
    if(listenfd < 0) {
        perror("socket error\n");
        exit(-1);
    }
    memset(&servaddr,0,sizeof(struct sockaddr_in));
    servaddr.sin_family=PF_INET;
    servaddr.sin_port=htons(service_port);
    servaddr.sin_addr.s_addr=INADDR_ANY;

    if( bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0 ) {
        perror("bind error");
        exit(-1);
    }
    if( listen(listenfd, 5) < 0 ) {
        perror("listen error");
        exit(-1);
    }

    for(;;) {
        connfd = accept( listenfd, (struct sockaddr *)&clientaddr, &clientlen );
        if( connfd < 0 ) {
            perror("accept error");
            exit(-1);
        }
    }
    exit(0);
}[/PHP]

发出如下连接请求:
  1. parrot ~ # telnet localhost 9999
  2. Trying 127.0.0.1...
  3. Connected to localhost.
  4. Escape character is '^]'.
  5. Connection closed by foreign host.
  6. parrot ~ #
复制代码


服务器端就退出了
  1. parrot ~ # ./a.out
  2. accept error:[color=Red] Invalid argument[/color]
  3. parrot ~ #
复制代码
 楼主| 发表于 2005-4-16 07:33:10 | 显示全部楼层
找到问题了,int clientlen; 未初始化
改为:
int clientlen=sizeof(struct sockaddr_in);
回复 支持 反对

使用道具 举报

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

本版积分规则

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