gpt4 book ai didi

c - 如何防止程序被socket listen()阻塞

转载 作者:太空宇宙 更新时间:2023-11-04 07:45:06 24 4
gpt4 key购买 nike

我正在写一个服务器程序,在初始化时,我想在某个ip/portbind()listen() >。但是随后整个程序被 listen() 阻塞了。有没有什么方法可以让程序每隔 5 毫秒检查一次新的传入连接?

我的代码目前是这样的:

int main(){
initialize();
do_something();

return 0;
}

initialize()中,设置套接字:

void initialize(){
sockfd = sock_create_bind(ip_addr[nodeid], port_addr[nodeid]);
listen(sockfd, 5);
peer_sockfd = accept(sockfd, (struct sockaddr *)&peer_addr, &peer_addr_len);
}

但是 initialize() 永远不会返回,并且 do_something() 永远不会被调用。所以我想知道有没有办法防止这种阻塞?谢谢。

最佳答案

你在这里阻止

peer_sockfd = accept(sockfd, (struct sockaddr *)&peer_addr, &peer_addr_len);

为避免阻塞,您可以使用select

fd_set fds;
FD_ZERO(fds);
FD_SET(sockfd, fds);
struct timeval tv = { 0, 0 };
select(sockfd + 1, &fds, NULL, NULL, &tf);
if (FD_ISSET(socktf, fds)) {
peer_sockfd = accept(sockfd, (struct sockaddr *)&peer_addr, &peer_addr_len);
}

要确定检查的时间间隔,请编写您的代码以便在适当的时间间隔调用它。

您需要对 peer_sockfd 上的 read()write() 执行类似的操作。如果您假设 sockfd 不是来自恶意主机操作系统,您可以只检查 read()

关于c - 如何防止程序被socket listen()阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57826616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com