Quantcast
Channel: C++博客-MemoryGarden's Blog-随笔分类-网络编程
Browsing latest articles
Browse All 28 View Live

Image may be NSFW.
Clik here to view.

APUE fork

fork 在现有进程下创建一个新的进程,现有进程为父进程,新创建的进程为子进程。子进程创建后,获得父进程的数据空间,堆栈的副本(子进程改变,父进程不改变)父子进程的执行顺序是不确定的,取决于内核的调度算法,如果要求父子进程之间的相互同步,则要求某种形式的进程间通信(IPC)  下面代码在父进程中sleep了2秒,但是不保证子进程可以完全执行完毕。进程执行的示意图 运行结果 :1 process...

View Article



Image may be NSFW.
Clik here to view.

APUE vfork

vfork 同 fork 的返回值是一样的,不同的地方是vfork通常创建子进程的目的是 exec一个新的程序,vfork不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用 exec 或者是 exit 于是就不会存在访问该空间。如果子进程在调用 exec 或者 exit 的时候,它是在父进程的空间中运行的。vfork 保证子进程先运行,它在exec 或 exit...

View Article

Image may be NSFW.
Clik here to view.

pthread_self, pthread_equal

pthread_t pthread_self();  获取线程自身IDint pthread_equal(pthread_t threadid1, pthread_t thread2)  判断两个线程ID是否相等,返回0 不相等,非零相等。 1 #include <pthread.h> 2 #include <stdio.h> 3 int main(){ 4  5...

View Article

Image may be NSFW.
Clik here to view.

pthread_create

int pthread_create (pthread_t tid, const pthread_attr_t* attr, void *(*start_fun)(void), void* arg);创建线程函数:   tid : 创建线程成功后的线程ID。   attr: 线程的一些配置,用于指定各种线程的属性。   start_fun: 线程创建以后从这个函数开始执行。   arg :...

View Article

Image may be NSFW.
Clik here to view.

pthread_exit pthread_join

void pthread_exit(void * rval_ptr)线程退出函数    其他线程可以通过 pthread_jion 得到这个 无类型指针 rval_ptrint pthread_join (pthread_t tid, void **rval_ptr)等待线程 tid 终止,调用线程将阻塞,直到 线程 tid 调用 pthrad_exit, 返回,或者被取消。...

View Article


Image may be NSFW.
Clik here to view.

pthread_mutex

int pthread_mutex_init(pthrad_mutex_t* mutex, const pthread_mutexatr_t* attr);初始化互斥量mutexint pthread_mutex_destory(pthread_mutex_t* mutex);如果动态分配互斥量,那么在释放内存前,需要调用这个函数。int...

View Article

Image may be NSFW.
Clik here to view.

pthread_cond

条件变量 pthread_cond, 另外一种线程间的同步机制。普通的 mutex 只允许一个线程进入临界区,就是拿到mutex这把锁的线程,而cond 允许多个线程同时进入临界区,由它来控制,在某些条件成立的时候,来唤醒其中一个等待着的线程,或者是唤醒所有等待着的线程。int pthread_cond_wait(pthread_cond_t* cond, pthread_mutex_t*...

View Article

Image may be NSFW.
Clik here to view.

套接字 socket

套接字是通信断电的抽象。  int socket(int domain, int type, int protocol)domain : 确定通信的特征,每个domain 通常以 AF_ 开头(address family)AF_INET(ipv4因特网域)AF_INET6 (ipv6因特网域)AF_UNIX(UNIX 域)AF_UNSPEC(未指定)type :...

View Article


Image may be NSFW.
Clik here to view.

socket ---- shutdown

int shutdown(int sockfd, int how)如果how 是 SHUT_RD 关闭读端,那么,无法从套接字读取数据。如果how 是 SHUT_WR 关闭写端,那么,无法使用套接字发送数据。如果how 是 SHUT_RDWR 那么 同时无法读取数据和发送数据能够close(关闭)...

View Article


Image may be NSFW.
Clik here to view.

字节序

每一台机器内部对变量的字节存储顺序不同,(有的系统是高位在前,地位在后,而有的是相反的),而网络传输数据大家一定要统一顺序,所以,对内部字节表示顺序和网络字节序不同的机器,就一定要对数据进行转换(比如ip地址,端口的表示) 如果相同的话,也要调用,转换与否是由系统函数自己来决定的。uint32_t htonl(uint32_t hostint32) // host to network long...

View Article

Image may be NSFW.
Clik here to view.

socket 地址格式

Linux 中,套接字地址用如下结构表示:struct in_addr{   in_addr_t s_addr;};struct sockaddr_in{   sa_family_t sin_family; //address family   in_port_t sin_port //port number   struct in_addr sin_addr;//ipv4 address...

View Article

Image may be NSFW.
Clik here to view.

socket ip 转换函数

仅仅适用于ipv4的函数:   1 : inet_addr 函数将数字和点组成的字符串转换为一个无符号长整形      ina.sin_addr.s_addr = inet_addr("10.2.3.44")      注意:inet_addr 返回的已经是网络字节序的了,没有必要再次调用  htonl 函数   2 : inet_ntoa 函数接受一个sin_addr 将...

View Article

Image may be NSFW.
Clik here to view.

socket bind

bind 函数可以帮助你指定一个套接字使用的端口当你使用socket 函数获得一个套接字描述符后,你也许需要将socket绑定上一个你的机器的端口   当你需要进行端口listen操作,等待接收一个连入请求的时候,一般需要这一步。   与客户端的套接字关联的地址没有太大意义,当你只是想连接一台服务器,也就是进行connect操作的时候,这一步并不是必须的。int bind(int sockfd,...

View Article


Image may be NSFW.
Clik here to view.

socket connect

int connect(int sockfd, struct sockaddr* serv_addr, int addrlen);socket : 套接字文件描述符,由socket函数返回的.serv_addr : 是一个存储远程计算机ip地址和端口信息的结构addrlen :  sizeof(serv_addr)返回值 : 如果发生了错误,它会返回错误值-1 全局变量 errno...

View Article

Image may be NSFW.
Clik here to view.

socket listen

listen()函数是等待别人连接,系统进行监听请求的函数。当有人连接你的时候,你需要做两步,通过listen函数等待连接请求,然后使用accept 函数处理int listen(int sockfd, int backlog);sockfd : 是一个套接字描述符,由socket()系统调用获得。backlog :...

View Article


Image may be NSFW.
Clik here to view.

socket accept

大致过程如下:   客户机通过connect 函数来连接你机器上,某个你已经listen的端口   他的连接将被listen加入队列等待accept函数的调用。   你调用accept函数告诉他你准备连接。   accept函数返回一个新的套接字描述符,这个描述符代表了这个连接。...

View Article

Image may be NSFW.
Clik here to view.

socket send

通过套接字进行通讯的函数int send(int sockfd, const void* msg, int len, int flags);参数:   sockfd :代表你与远程程序连接的套接字   msg : 是一个指针,指向你想要发送信息的地址   len :  是你想要发送信息的长度   flags :  发送标记,一般为0返回值:   正常 :真正发送数据的长度。   错误 :...

View Article


Image may be NSFW.
Clik here to view.

socket recv

函数 recv 在许多方面与 send 函数相似int recv (int sockfd, void* buf, int len, unsigned int flags);参数:   sockfd :是你要读取数据的套接字描述符。   buf : 是一个指针,指向能存储数据的内存缓存数据。   len :  是缓存区的大小。   flags : 一般为0返回值:    正常: 它真正收到数据的长度...

View Article

Image may be NSFW.
Clik here to view.

socket sendto

进行无连接的UDP通讯使用的。使用sendto 函数,则数据会在没有建立任何网络连接额网络上传输。int sendto(int sockfd, const void* msg, int len, int flags, const struct sockaddr *to, int tolen);参数:   sockfd : 代表你与远程程序连接的套接字   msg :...

View Article

Image may be NSFW.
Clik here to view.

socket recvfrom

int recvfrom (int sockfd, void* buf, int len, unsigned int flags, struct sockaddr* from, int* fromlen);参数:   sockfd : 是你想要读取数据的套接字描述符   buf :  一个指针,指向你能存储数据的内存缓冲数据区   len : 缓存区的尺寸大小。   flags : 通常为0...

View Article

Image may be NSFW.
Clik here to view.

socket close shutdown

传输完毕后,你需要关闭这个套接字描述符所表示的连接。close(sockfd);执行了close之后,套接字将不会允许进行读写操作,任何企图读写一个已经关闭的套接字,都会收到一个错误。如果你想对网络套接字的关闭进行进一步的操作,可以使用 shutdown 操作,它允许你进行单向的关闭,或者是全部禁止掉。int shutdown(int sockfd, int how);参数 :    sockfd...

View Article


Image may be NSFW.
Clik here to view.

socket getsockopt setsockopt

int getsockopt (int sockfd, int level, int name, char* value, int* optlen);int setsockopt (int sockfd, int level, int name, char* value, int* optlen);参数:   sockfd : 必须是一个已经打开的套接字   level :...

View Article


Image may be NSFW.
Clik here to view.

socket getpeername

这个函数可以取得一个已经连接上的套接字的远程信息(例如 ip, port) 告诉你在远程和你连接的究竟是谁。int getpeername(int sockfd, struct sockaddr* addr, int *addrlen);参数:   sockfd 是你想取得远程信息的那个套接字描述符   addr 是一个指向 struct sockaddr 或者是 struct...

View Article

Image may be NSFW.
Clik here to view.

socket gethostname

gethostname 可以取得本地主机的信息。返回正在执行它的计算机的名字int gethostname(char* hostname, size_t size);参数:   hostname :  指向字符数组的指针,当函数返回的时候,它里面的数据就是本地主机的名字。   size : 是hostname 只想数组的长度。返回值   -1 出错 errno 全局变量存储出错信息。   0...

View Article

Image may be NSFW.
Clik here to view.

socket gethostbyname

struct hostent* gethostbyname(const char* name);struct hostent 是这样定义的:struct hostent{   char* h_name;   char **h_aliases;   int h_addrtype;   int h_length;   char **h_addr_list;};解释 :   h_name :...

View Article


Image may be NSFW.
Clik here to view.

TCP连接的建立和终止

建立一个TCP连接时,会发生下述情形:1、服务器端必须做好准备接受外来的连接。这通常通过 socket(), bind(), listen() 三个函数来完成的。我们称之为 被动打开(passive open).2、客户端通过调用connect发起主动打开(active...

View Article

Image may be NSFW.
Clik here to view.

套接字对

一个TCP连接的套接字对(socket pair) 是一个定义该连接的两个端点的四元组:本地IP地址、本地TCP端口号、外地IP地址,外地TCP端口号。套接字对唯一标识网络的一个TCP连接。标识每个端点的两个值(IP和端口号) 通常成为一个 套接字ps: 好短....memorygarden 2011-07-04 00:44 发表评论

View Article

Image may be NSFW.
Clik here to view.

TCP端口号与并发服务器

背景 : 并发服务器中,主服务循环通过派生一个子进程来处理每个新的连接,如果一个子进程继续使用服务器众所周知的端口来服务一个长时间的请求,那将会发生什么?首先,在一台 IP地址为 10.2.16.48 的服务器,服务器在端口21上执行被动打开(socket,bind,listen) 等待客户请求。服务器 : {*:21,*:*}...

View Article
Browsing latest articles
Browse All 28 View Live




Latest Images