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

来源:互联网 发布:金缕玉衣知乎 编辑:程序博客网 时间:2024/05/01 10:10

 

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()。


原创粉丝点击