Chinaunix首页 | 论坛 | 博客
  • 博客访问: 179959
  • 博文数量: 27
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 285
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-20 10:21
个人简介

6年的blog,重新拾起,再来耕耘!

文章分类

全部博文(27)

文章存档

2013年(1)

2009年(9)

2007年(17)

我的朋友

分类: 系统运维

2007-03-23 12:55:15

文件: pthread_examples.tar.gz
大小: 2KB
下载: 下载
struct sockets {
       int local;
       FILE *in, *out;
};

int socket_setup(void) {
    struct protoent *tcp_proto;
    struct sockaddr_in local;
    int r, s, one;
 
    tcp_proto = getprotobyname("tcp");
    if (!tcp_proto) {
        fail("Can't find TCP/IP protocol: %s\n", strerror(errno));
    }
    s = socket(PF_INET, SOCK_STREAM, tcp_proto->p_proto);
    if (s == -1) {
        fail("socket: %s\n", strerror(errno));
    }
    one = 1;
    setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
    memset(&local, 0, sizeof(struct sockaddr_in));
    local.sin_family = AF_INET;
    local.sin_port = htons(DICE_PORT);
    r = bind(s, (struct sockaddr *) &local, sizeof(struct sockaddr_in));
    if (r == -1) {
       fail("bind: %s\n", strerror(errno));
    }
    r = listen(s, 5);
    if (r == -1) {
       fail("listen: %s\n", strerror(errno));
    }
    return s;
}

struct sockets *get_sockets(int sock) {
               int conn;
               if ((conn = accept(sock, NULL, NULL)) < 0) {
                   warn("accept: %s\n", strerror(errno));
                   return 0;
               }
               else {
                    struct sockets *s;
                    s = malloc(sizeof(struct sockets));
                    if (s == NULL) {
                        warn("malloc failed.\n");
                        return 0;
                    }
                    s->local = 0;
                    s->in = fdopen(conn, "r");
                    s->out = fdopen(conn, "w");

                    setlinebuf(s->in);
                    setlinebuf(s->out);
                    return s;
              }
}

阅读(2457) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~