sin的博客

时间悄悄地流过,今天你做了什么
posts - 17, comments - 3, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

UNP读书笔记二 常用TCP编程API

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。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理