Sockets 在使用C语言的套接字编程中,如何在服务器上设置接受客户端建立连接的时间限制?
我正在开发一个应用程序,其中包括一个客户端和一个服务器 我希望服务器只监听连接5秒钟。如果客户端未尝试建立连接,则服务器应停止侦听并返回错误消息。如果客户端试图建立连接,则服务器应接受该连接 如果客户端未尝试建立连接,则服务器将一直在侦听。我希望服务器只监听5秒钟,这是如何实现的 这是服务器端输出-服务器永远在等待客户端:Sockets 在使用C语言的套接字编程中,如何在服务器上设置接受客户端建立连接的时间限制?,sockets,setsockopt,time-limiting,getsockopt,Sockets,Setsockopt,Time Limiting,Getsockopt,我正在开发一个应用程序,其中包括一个客户端和一个服务器 我希望服务器只监听连接5秒钟。如果客户端未尝试建立连接,则服务器应停止侦听并返回错误消息。如果客户端试图建立连接,则服务器应接受该连接 如果客户端未尝试建立连接,则服务器将一直在侦听。我希望服务器只监听5秒钟,这是如何实现的 这是服务器端输出-服务器永远在等待客户端: 您正在阻塞模式下使用侦听套接字,因此accept将阻塞调用线程,直到客户端连接。要使用超时,请先调用select或epoll,等待侦听套接字进入可读状态,指示连接处于挂起状态
您正在阻塞模式下使用侦听套接字,因此accept将阻塞调用线程,直到客户端连接。要使用超时,请先调用select或epoll,等待侦听套接字进入可读状态,指示连接处于挂起状态,然后再调用accept 例如: ... fd_集rds; FD_ZERO&rds; FD_SETsockfd和rds; 结构timeval超时; timeout.tv_sec=5; timeout.tv_usec=0; 国际关系; 如果res=selectsockfd+1、&rds、NULL、NULL和timeout
void reception(){
int sockfd, connfd, len;
struct sockaddr_in servaddr, cli;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
printf("socket creation failed...\n");
exit(0);
}
else
printf("Socket successfully created..\n");
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(PORT);
if ((bind(sockfd, (SA*)&servaddr, sizeof(servaddr))) != 0) {
printf("socket bind failed...\n");
exit(0);
}
else
printf("Socket successfully binded..\n");
if ((listen(sockfd, 5)) != 0) {
printf("Listen failed...\n");
exit(0);
}
else
printf("Server listening..\n");
len = sizeof(cli);
connfd = accept(sockfd, (SA*)&cli, &len);
/*
Some function should be added at this point to
stop the server from listening after 5 seconds
*/
if (connfd < 0) {
printf("server acccept failed...\n");
exit(0);
}
else
printf("server acccept the client...\n");
receive(connfd);
close(sockfd);
}