相关疑难解决方法(0)

带有recv-timeout的套接字:这段代码有什么问题?

我正在尝试实现一个recv超时为1秒的套接字:

int sockfd;
struct sockaddr_in self;
struct sockaddr_in client_addr;
int addrlen=sizeof(client_addr);
ssize_t nBytes;

sockfd = socket(AF_INET, SOCK_STREAM, 0);

self.sin_family = AF_INET;
self.sin_port = htons(PORT);
self.sin_addr.s_addr = INADDR_ANY;

int on = 1;
setsockopt( sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on);

// 1 Sec Timeout
tv.tv_sec  = 1;  
tv.tv_usec = 0;
setsockopt( sockfd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv);

bind(sockfd, (struct sockaddr*)&self, sizeof(self));

listen(sockfd, 20);

clientfd = accept(sockfd, (struct sockaddr*)&client_addr, &addrlen);

nBytes = recv(clientfd, buffer, MAXBUF-1, 0);
Run Code Online (Sandbox Code Playgroud)

没有'setsockopt(sockfd,SOL_SOCKET,SO_RCVTIMEO,&t​​v,sizeof(tv);'调用接受和recv工作,但recv阻止.

使用'setsockopt(sockfd,SOL_SOCKET,SO_RCVTIMEO,&t​​v,sizeof(tv);'接受调用会产生错误'资源暂时不可用'.

有人可以告诉我这种方法有什么问题吗?

c sockets linux

10
推荐指数
3
解决办法
4万
查看次数

标签 统计

c ×1

linux ×1

sockets ×1