Unix网络编程-----阅读笔记(1)

一、常见socket函数

1.     函数原型:int socket(int family,int type,int protocol),若成功返回非负描述符。

例子:         listenfds=socket(AF_INET,SOCK_STREAM,0);

family:表示协议族,ipv4,ipv6

type:表示套接字类型,字节流套接字,数据报套接字

protocol:传输协议,tcp,udp,sctp

2.     函数原型:int connect(int sockfd,const structaddr *servaddr,socklen_taddrlen),若成功返回0,出错返回-1.

客户端用connect函数来建立与TCP服务器的连接。

3.     函数原型:int bind(int sockfd,const structaddr *servaddr,socklen_t addrlen) ,若成功返回0,出错返回-1.把一个本地协议地址赋予一个套接字。如果一个TCP客户或服务器未曾调用bind捆绑一个临时端口,让内核来选择临时端口通信是很正常的,然后对TCP服务器来说是极为罕见的,因为服务器通过他们的众所周知的端口被大家认识。

4.     函数原型:int  listen(int sockfd,intbacklog),若成功返回0,出错返回-1。我们必须认识到内核给任一个监听的套接字维护两个队列a.未完成连接队列,每个SYN分节对应其中一项,服务器正在等待完成相应的TCP三次握手,这些套接字处于SYN_RCVD状态。b.已完成连接队列,每个已完成TCP三次握手过程的客户对应其中一项,这些套接字处于ESTABLISHED。

5.     函数原型:int  accept(int sockfd,conststructaddr *servaddr,socklen_t addrlen),若成功则为非负描述符,若出错则为-1.如果accept成功,那么其返回值是由内核自动生成的一个全新描述符,代表与所返回客户的TCP连接。这个描述符成为已连接套接字。前面socket生成的称之为监听套接字。

二、fork函数

fork子进程返回0而不是父进程ID的原因在于,任何子进程只有一个父进程,而且子进程总是可以通过getppid获得父进程的ID,相反父进程有多个子进程,而且无法获取各个子进程的ID,所以必须记录每次调用fork的返回值。

fork的两个典型用法:

a.     一个进程创建一个自身的副本,这样每个副本都可以在另一个副本执行其他任务的同事处理各自的某个操作。

b.     一个进程想执行另一个程序,然后再在副本中调用exec把自己替换成新的程序。

你可能感兴趣的:(网络编程)