Posted on 2010-02-21 19:08
sin 阅读(327)
评论(0) 编辑 收藏 引用 所属分类:
读书笔记
只是简单介绍下每个函数的作用,很容易通过参数名知道每个参数的意义。
int socket(int family, int type, int protocol);
此函数根据参数创建一个指定的套接口,返回套接口描述符。
int connect(int sockfd, const struct sockaddr *servaddr, socklen addrlen);
TCP客户调用此函数向服务器发起连接,激发三路握手过程,在连接建立或出错时返回。此函数导致客户端从CLOSED状态转到SYN_SENT状态,再到
ESTABLISHED状态。若函数调用失败,套接口sockfd不再可用,必须关闭。
int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen);
此函数用来给套接口绑定套接口地址。服务器通常调用此函数,来指定IP地址和端口号。
int listen(int sockfd, int backlog);
此函数完成两件事:将一个套接口置为被动套接口,默认是主动套接口;指定此套接口排队的最大连接数。
int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen);
一般服务器端调用此函数从已经建立连接的队列里返回下一个连接。若已连接队列为空,则进程睡眠。也返回对方的套接口地址。
int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t *addrlen);
当建立建立后(客户端connect成功,服务器端accept成功),调用此函数来获得本地套接口地址。sockfd必须是已经建立连接的套接口描述符。
int getpeername(int sockfd, struct sockaddr *peeraddr, socklen_t *addrlen);
一般情况下,服务器端调用此函数来获取客户端套接口地址。虽然accept也返回客户端套接口地址,但是在并发服务器上fork exec后,子进程的存储映像被新的程序文件代替,这样子进程就无法取得由accept返回的客户端套接口地址结构。此时就需要调用getpeername。