MENU

标签 摸爬滚打C++之路 下的文章

socket编程Transport endpoint is not connected错误总结

前言

最近使用C++网络编程,计划实现一个web服务(模拟http请求、支持host模式)。刚接触犯了一个低级的通信错误,导致Transport endpoint is not connected。

原因分析

在server端accept一个新的连接后返回一个文件描述符(这里就叫connect_fd),但这个文件描述符有区别于初始化socket的listen_fd文件描述符。在read函数的时候错误将listen_fd传入到函数中,最终导致Transport endpoint is not connected错误。

# read读取数据过程
while(true){
    if((nread = read(connect_fd, ptr, nleft)) < 0){
    
    }
}

# accept函数 使用的是
int accept(int listen_fd, struct sockaddr *cliaddr, socklen_t *addrlen);

Linux下系统调用

知识点

操作系统的进程空间有用户态系统态,它们具有不同的执行权限。系统调用是指运行在用户态的进程向操作系统内核态请求获得更高的运行权限而能够受限访问硬件设备(比如CPU、打印机)。

当发生系统调用时,CPU通过软中断切换到内核态开始执行内核系统调用函数。

阅读全文

makefile文件编写技巧

前言

之前用C++写的都是一些小小几个文件,所以直接使用gcc/g++直接编译文件。但是最近做一个webserver项目,涉及到头文件且多个文件存在有依赖关系,因此使用makefile编译变得更方便。
编译过程为:源文件首先会生成中间目标文件,再由中间目标文件生成执行文件。也即编译+链接过程。

makefile

makefile编写按照如下格式

target ... : requisites ...  目标 : 依赖
    command                     命令(注意命令必须要以Tab键开始)

大致执行过程:①先在目录中找到makefile或Makefile文件 ②在makefile文件中找到第一个目标target做为最终生成目标文件 ③判断最终目标文件是否存在,不存在最终目标文件或者.o的依赖文件更新时间比最终目标文件新,则重新执行编译生成最终目标文件

阅读全文

字节序的理解

前言

最近一直在看《深入理解计算机系统》补充基础知识,看到有关介绍大端小端的介绍,下面就做个总结。

详细

  • 大端:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。(符合我们平时的读写字符数值)
  • 小端:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。

举例:如数组0x2356,高位为:0x23 低位为:0x56,在内存的存放如下。

内存地址 小端模式 大端模式
0x5000 0x56 0x23
0x5001 0x23 0x56

阅读全文