`
luliangok
  • 浏览: 816457 次
文章分类
社区版块
存档分类
最新评论

Beej’s Guide Network to Programming 系列连载12

 
阅读更多

5.5. listen() ---如果有“人”,请叫我?

是换换内容得时候了。假如你不希望与远程的一个地址相连,或者说, 仅仅是将它踢开,那你就需要等待接入请求并且用各种方法处理它们。处理过程分两步:首先,监听--listen(),然后,你接受--accept()

函数原型:

int listen(intsockfd, int backlog);

sockfd 是调用socket() 返回的套接字文件描述符。backlog 是在进入队列中允许的连接数目。什么意思呢? 进入的连接是在队列中一直等待直到你接受 (accept() 请看下面的文章)连接。它们的数目限制于队列的允许。 大多数系统的允许数目是20,你也可以设置为5到10。

和别的函数一样,在发生错误的时候返回-1,并设置全局错误变量 errno。

你可能想象到了,在你调用 listen() 前你或者要调用bind() 或者让内核随便选择一个端口。如果你想侦听进入的连接,那么系统调用的顺序可能是这样的:

getaddrinfo();

socket();

bind();

listen();

/* accept() goeshere */

因为它相当的明了,我将在这里不给出例子了。(在 accept() 那一章的代码将更加完全。)真正麻烦的部分在 accept()。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics