0%

大多数的套接字函数都需要一个指向套接字地址结构的指针作为参数。在使用中经常遇到两个结构体sockaddr_insockaddr,它们的区别是什么呢?

POSIX

sockaddr_in是IPv4套接字地址结构体,它的定义在<netinet/in.h>头文件中,在POSIX中,它的定义如下:

阅读全文 »

理解协议

Richard Stevens先生在UNP2e的前言中写道:

I have found when teaching network programming that about 80% of all network programming problems have nothing to do with network programming, per se. That is, the problems are not with the API functions such as accept and select, but the problems arise from a lack of understanding of the underlying network protocols. For example, I have found that once a student understands TCP’s three-way handshake and four-packet connection termination, many network programming problems are immediately understood.

阅读全文 »

问题

I/O多路复用之epoll一文简单介绍了I/O多路复用模型。I/O多路复用的API函数返回就绪(ready)的文件描述符,在这些文件描述符上执行readwrite都不会阻塞。那么即使描述符是默认的阻塞方式,调用读写函数应该也不会阻塞。但实际情况是,I/O多路复用一般和非阻塞I/O配合使用,比如libevent网络库所采用的Reactor模式。实际上,如果多路复用不搭配非阻塞I/O,在下面几种情况下会出现问题。

阅读全文 »

简介

I/O多路复用(I/O multiplexing)使得程序可以同时监测多个文件描述符,查看它们是否就绪(ready),即能否进行I/O操作。能够进行I/O操作,具体来说就是,在描述符上执行I/O相关的系统调用时不会阻塞,函数要么成功返回,要么返回错误,进程不会进入睡眠状态。

在Linux系统中,多路复用由selectpollepoll三个函数支持。它们的作用相同,特别地,pollepoll的接口非常相似。在处理大量描述符时,epoll的性能优于另外两个函数。epoll同时支持水平触发(level-triggered)和边沿触发(edge-triggered)模式,而selectpoll只支持水平触发模式。本文结合一个回射服务器程序来介绍epoll的基本用法。

阅读全文 »

需求

上一篇文章提到,在Emacs中可以预览Markdown文本得到的网页,但前提是,你的系统中要有将Markdown文本转化为HTML文本的Markdown命令。如果没有任何配置,直接使用预览的快捷键,Emacs将提示/bin/bash: markdown: command not found。我找到了两种办法来解决这个问题:

markdown_py

Python有将Markdown转化为HTML的命令,只不过它的名字不叫Markdown。我通过如下的命令找到了它:

阅读全文 »

介绍

本文介绍Linux服务端开发中常用的迭代(iterative)模型和并发(concurrent)模型,通过简单的回射服务器程序来说明。在这两种模型下,套接字均使用默认的阻塞(blocking)方式,如果I/O操作不能立即完成,用于读写的系统调用会阻塞。

阅读全文 »

大多数计算机使用字节(byte)作为最小的可寻址的内存单位。对于跨越多字节的对象,我们需要知道该对象的地址以及内存中是如何排列这些字节的。在几乎所有的机器上,多字节对象存储在连续的字节序列上,对象的地址即为所使用字节中最小的地址。

那么,字节存储的顺序就成了一个问题。有的机器在内存中按照从最低有效字节(Least Significant Byte, LSB)到最高有效字节(Most Significant Byte, MSB)的顺序存储对象,而另一些机器则按照从最高有效字节到最低有效字节的顺序存储,分别称之为小端(little endian)存储和大端(big endian)存储:

阅读全文 »

错误的产生

在C语言中,将两个正数相加可能会得到一个负数,x < yx - y < 0两个语句得到的结果有可能不一样。这些“莫名其妙”的现象经常会导致bug,编程老手不经意也会犯下错误。了解整数运算的原理有助于写出更可靠的程序。

无符号加法运算

阅读全文 »

上学期从酷壳网的文章得知LeetCode这个很有名气的OJ平台。我以后很有可能要去做程序员,借助LeetCode提高自己的算法和编码能力还是很有必要的。这个学期就要为找工作做准备,刷LeetCode至少对面试有帮助。

阅读全文 »