Quantcast
Channel: C++博客-MemoryGarden's Blog-随笔分类-网络编程
Browsing all 28 articles
Browse latest 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
Browsing all 28 articles
Browse latest View live


Latest Images