考试网 >> IT认证 >> 水平 >> 软件指导 >> socket编程原理(四)

socket编程原理(四)

发布时间:2006-06-28 03:34     点击:
分页:[1] 2  下一页

监听连接──listen()

此调用用于面向连接服务器,表明它愿意接收连接。listen()需在accept()之前调用,其调用格式如下:

int PASCAL FAR listen(SOCKET s, int backlog);

参数s标识一个本地已建立、尚未连接的套接字号,服务器愿意从它上面接收请求。backlog表示请求连接队列的最大长度,用于限制排队请求的个数,目前允许的最大值为5。如果没有错误发生,listen()返回0。否则它返回SOCKET_ERROR。

listen()在执行调用过程中可为没有调用过bind()的套接字s完成所必须的连接,并建立长度为backlog的请求连接队列。 

调用listen()是服务器接收一个连接请求的四个步骤中的第三步。它在调用socket()分配一个流套接字,且调用bind()给s赋于一个名字之后调用,而且一定要在accept()之前调用。

有关listen()的详细描述参看5.2.13。

2.2.3节中提到在客户/服务器模式中,有两种类型的服务:重复服务和并发服务。accept()调用为实现并发服务提供了极大方便,因为它要返回一个新的套接字号,其典型结构为:

int initsockid, newsockid;

if ((initsockid = socket(....)) < 0)

error("can’t create socket");

if (bind(initsockid,....) < 0)

error("bind error");

if (listen(initsockid , 5) < 0)

error("listen error");

for (;;) {

newsockid = accept(initsockid, ...) /* 阻塞 */

if (newsockid < 0)

error("accept error");

if (fork() == 0){ /* 子进程 */

closesocket(initsockid);

do(newsockid); /* 处理请求 */ 

exit(0);

}

closesocket(newsockid); /* 父进程 */

}

面向连接服务器也可以是重复服务器,其结构如下:

int initsockid, newsockid;
分页:[1] 2  下一页
版权申明:未经书面授权请勿转载本站信息!!作品版权归所属媒体与作者所有!!
发表评论: 匿名发表 用户名: 查看评论
您将承担一切因您的行为、言论而直接或间接导致的民事或刑事法律责任
留言板管理人员有权保留或删除其管辖留言中的任意内容
本站提醒:不要进行人身攻击。谢谢配合。
在本站搜索相关信息
2003-2005 Ksw123.com All Rights Reserved. - TOP
Copyright © 2006 Ksw123.com. All rights reserved.中国考题网 版权所有