recvmsg trả về 'EAGAIN (Tài nguyên tạm thời không khả dụng)'


11

Sau một lần di chuyển máy chủ gần đây, chúng tôi đang khắc phục sự cố nghiêm trọng này của một trong những máy chủ bị mất kết nối n / w mà không có lý do rõ ràng và lấy lại kết nối trong vài giây hoặc vài phút. Không có dấu vết của nó trong /var/log/messages dmesghoặc mcelogs. Trong khi tìm cách gỡ lỗi này, tôi đã ban hành strace ping google.comvà nó nói = -1 EAGAIN (Resource temporarily unavailable).

Ai đó có thể ném ánh sáng đến những gì tin nhắn này có thể có nghĩa? pinggiải quyết google.com, nhưng nó sẽ không hiển thị bất kỳ phản hồi nào như thể các phản hồi ping được đặt thành từ chối trong tường lửa.

sendmsg(3, {msg_name(16)={sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("74.125.131.113")}, msg_iov(1)=[{"\10\0005\321?i\0\3v\301lT\0\0\0\0\335\331\3\0\0\0\0\0\20\21\22\23\24\25\26\27"..., 64}], msg_controllen=0, msg_flags=0}, 0) = 64
recvmsg(3, 0x7fffd48b9cc0, 0)           = -1 EAGAIN (Resource temporarily unavailable)

PS: Đây là VMware VM và chạy RHEL 6.5

Câu trả lời:


13

Khi bạn đọc từ một ổ cắm (hoặc đường ống hoặc nguồn không đồng bộ khác), bạn có thể chọn điều gì xảy ra nếu không có dữ liệu ngay lập tức. Hoặc bạn có thể chờ đọc cho đến khi một số dữ liệu đến (chế độ chặn) hoặc bạn có thể trả lại ngay lập tức khi có lỗi (chế độ không chặn).

Lỗi nó trả về trong trường hợp thứ hai là EAGAIN.

Vì vậy, EAGAINlỗi không thực sự cho bạn biết bất cứ điều gì ở đây. Điều đó chỉ có nghĩa là không có gì recvmsg()để nhận ngay lúc đó.


0

Tôi đã nhận được lỗi này bằng cách cố gắng đọc từ stdinkhi không có stdin, ví dụ isTTYlà sai.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.