我正在使用C语言sockets实现可靠的UDP协议。我正在使用以下代码在等待确认时将超时设置为套接字。但我不确定为什么会得到errno 11,即"资源暂时不可用"。
//set timer for recv_socket
struct timeval tv;
tv.tv_usec = TIMEOUT_MS;
if(setsockopt(rcv_sock, SOL_SOCKET, SO_RCVTIMEO,&tv,sizeof(tv)) < 0){
printf("Error setting the socket timeout.\n");
}
int recv_msg_len;
if(recv_msg_len = recvfrom(rcv_sock, ackBuffer,sizeof(ackBuffer), 0,
(struct sockaddr *) &servAddr2, &fromSize) < 0){
//timeout reached
printf("Error Reporting: %d : %s\n", errno, strerror(errno));
num_timeouts++;
}
我也尝试了评论中提到的
recvfrom()
。 - alkrecvfrom()
返回的是ssize_t
而不是int
,顺便说一下。 - alk