gpt4 book ai didi

linux - 在阻塞套接字上接受 EAGAIN 错误

转载 作者:可可西里 更新时间:2023-11-01 02:34:23 25 4
gpt4 key购买 nike

我正在使用阻塞套接字来接受连接。我很少收到此错误,这使得调试变得困难。接受返回 EAGAIN 错误。这怎么可能是阻塞套接字?

最佳答案

如果套接字设置了接收超时(使用 SO_RCVTIMEO 套接字选项),则 accept 将在超时到期时返回 EAGAIN

此代码将对其进行演示(并让您研究传递信号的效果):

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/time.h>

#define TESTEXIT(s, f) if (s < 0) { perror(f); exit(1); }

void handler(int x)
{
return;
}

int main()
{
int s;
int r;
struct sockaddr_in sin;
socklen_t sin_len = sizeof sin;
struct timeval timeo = { .tv_sec = 5, .tv_usec = 0 };

signal(SIGUSR1, handler);

s = socket(PF_INET, SOCK_STREAM, 0);
TESTEXIT(s, "socket");

r = listen(s, 10);
TESTEXIT(r, "listen");

r = setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &timeo, sizeof timeo);
TESTEXIT(r, "setsockopt");

r = accept(s, (struct sockaddr *)&sin, &sin_len);
TESTEXIT(r, "accept");

return 0;
}

关于linux - 在阻塞套接字上接受 EAGAIN 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1917814/

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