检查套接字监听积压队列是否为空
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() 做一些其他事情,而不是陷入等待。
您可以生成一个新线程并在主线程等待客户端时在该线程中执行您的替代工作。连接客户端后,accept()
将解除阻塞,然后您可以取消新生成的线程。
代码应位于:
while(1) {
pthread_create(&thread, NULL, do_something_else, NULL);
consocket = accept(mysocket, (struct sockaddr *)&dest, &socksize);
pthread_cancel(thread);
}
您可以使用 fcntl
.
将套接字设置为非阻塞模式
fcntl(sockfd, F_SETFD, O_NONBLOCK);
之后,对 accept(sockfd)
的调用将立即 return 一个新接受的连接,或者立即失败 EWOULDBLOCK
您可以使用它来决定做“其他事情”。
另一种选择是使用 select
,也许有一个有限的超时,以获得对阻塞的更细粒度的控制。
有什么方法可以检查是否没有待处理的服务器连接请求?
就我而言,我有这段代码,来自 C:
listen(mysocket, 3);
//while(no pending connections) do this
int consocket = accept(mysocket, (struct sockaddr *)&dest, &socksize);
我需要的是,在没有挂起的连接时,通过调用 accept() 做一些其他事情,而不是陷入等待。
您可以生成一个新线程并在主线程等待客户端时在该线程中执行您的替代工作。连接客户端后,accept()
将解除阻塞,然后您可以取消新生成的线程。
代码应位于:
while(1) {
pthread_create(&thread, NULL, do_something_else, NULL);
consocket = accept(mysocket, (struct sockaddr *)&dest, &socksize);
pthread_cancel(thread);
}
您可以使用 fcntl
.
fcntl(sockfd, F_SETFD, O_NONBLOCK);
之后,对 accept(sockfd)
的调用将立即 return 一个新接受的连接,或者立即失败 EWOULDBLOCK
您可以使用它来决定做“其他事情”。
另一种选择是使用 select
,也许有一个有限的超时,以获得对阻塞的更细粒度的控制。