Linux高性能服务器编程(第二篇 第5-8章)——阅读笔记

Linux高性能服务器编程(第二篇 深入解析高性能服务器编程)


第5章 Linux网络编程基础API

1. socket地址API

  • 主机字节序和网络字节序:32位机一次性装载4字节,字节排列顺序影响装载后整数的值。现代PC大多采用小端字节序,因此小端字节序也称主机字节序。发送端统一发送大端字节序,因此大端字节序也称网络字节序
/**
 * g++ chapter5/5.1_byteorder.cpp -o out.app && ./out.app
 * 
 * 代码5-1 判断机器字节序
 */

#include <iostream>
using namespace std;

// 字节序转换函数:
#include <netinet/in.h>
unsigned long int htonl(unsigned long int hostlong);
unsigned short int htons(unsigned short int hostlong);
unsigned long int ntohl(unsigned long int netlong);
unsigned short int ntohs(unsigned short int netshort);

int main()
{
   

    union {
   
        short value;
        char union_bytes[sizeof(short)];
    } test;

    test.value = 0x0102;

    if ((test.union_bytes[0] == 1) && (test.union_bytes[1] == 2))
    {
   
        cout << "Big Endian" << endl;
    }
    else if ((test.union_bytes[0] == 2) && (test.union_bytes[1] == 1))
    {
   
        cout << "Little Endian" << endl; //实际输出
    }
    else
    {
   
        cout << "Unknown..." << endl;
    }

    return 0;
}

2. 创建socket

  • Linux中一切皆文件,socket也不例外
#include <sys/types.h>
#include <sys/socket.h>
// domain: IPv4设置为PF_INET,IPv6设置为PF_INET6
// type: TCP为SOCK_STREAM,UDP为SOCK_DGRAM
// protocol: 给定前两个参数时选择一个具体协议,通常是唯一的(前两个参数已经完全决定),默认设为0
// 调用成功时返回socket文件描述符,失败返回-1并设置errno
int socket(int domain, int type, int protocol);

3. 命名socket

  • 创建socket时指定了协议族,但未指定具体地址,将一个socket与socket地址绑定称为给socket命名;服务器需要命名socket,但客户端通常匿名,由操作系统自动分配socket地址。
#include <sys/types.h>
#include <sys/socket.h>
// 成功返回0,失败返回-1并设置errno。最常见的两种errno:
// EACCESS:被绑定的是受保护地址(普通用户绑定端口号0~1023)
// EADDRINUSE: 被绑定的地址正在使用中。
int bind(int sockfd,const struct sockaddr* my_addr,socklen_t addrlen);

4. 监听socket

  • 服务器要创建监听队列存放待处理的客户连接
  • 完整连接最多有 b a c k l o g + 1 backlog+1 backlog+1
#include <sys/types.h>
#include <sys/socket.h>
// backlog: 监听队列的最大长度,完全连接状态的socket的上限
int listen(int sockfd,int backlog);
/**
 * g++ chapter5/5.4_testlisten.cpp -o testlisten.app && ./testlisten.app 127.0.0.1 12345 3
 * 
 * telnet 127.0.0.1 12345 #
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值