[英]Check if socket listen backlog queue is empty
有没有办法检查服务器是否没有挂起的连接请求?
就我而言,我有这个代码,来自C:
listen(mysocket, 3);
//while(no pending connections) do this
int consocket = accept(mysocket, (struct sockaddr *)&dest, &socksize);
而我需要的是,虽然没有待处理的连接,但是通过调用accept()来做其他事情,而不是等待等待。
您可以使用fcntl
在非阻塞模式下设置套接字。
fcntl(sockfd, F_SETFD, O_NONBLOCK);
之后,调用accept(sockfd)
将立即返回一个新接受的连接,或者立即失败并使用EWOULDBLOCK
,您可以使用它来决定做“其他”。
另一种选择是使用select
,可能具有有限超时,以获得对阻塞的更精细控制。
您可以生成一个新线程,并在主线程等待客户端时在该线程中执行备用工作。 连接客户端后, accept()
将被取消阻止,然后您可以取消新生成的线程。
代码应该是:
while(1) {
pthread_create(&thread, NULL, do_something_else, NULL);
consocket = accept(mysocket, (struct sockaddr *)&dest, &socksize);
pthread_cancel(thread);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.