2013-01-17 33 views
47

Điều gì có thể gây ra lỗi Resource temporarily unavailable trên một lệnh socket send()? Ổ cắm được thiết lập là AF_UNIX, SOCK_STREAM. Nó hoạt động phần lớn thời gian, nhưng đôi khi bị lỗi này. Đầu nhận của ổ cắm có vẻ hoạt động tốt.Điều gì có thể khiến “Tài nguyên tạm thời không khả dụng” trên lệnh send send()

Tôi biết điều này không phải là rất chi tiết, nhưng tôi chỉ đang tìm kiếm các ý tưởng chung. Cảm ơn!

+0

Điều này có liên quan không? http://stackoverflow.com/questions/5737493/sendto-resource-temporarily-unavailable-errno-11 – paddy

+2

Bạn có đang đặt ổ cắm của mình thành O_NONBLOCK không? –

+0

Tôi không nghĩ rằng nó liên quan đến bài đăng đó. Ổ cắm của tôi là SOCK_STREAM mà tôi tin rằng đang chặn đó là những gì tôi muốn. – giroy

Trả lời

59

"Resource temporarily unavailable" là thông báo lỗi tương ứng với EAGAIN, có nghĩa là thao tác sẽ bị chặn nhưng thao tác không chặn được yêu cầu. Đối với send(), có thể là do bất kỳ:

  • đánh dấu rõ ràng bộ mô tả tệp là không chặn với fcntl(); hoặc
  • chuyển cờ MSG_DONTWAIT tới send(); hoặc
  • đặt thời gian chờ gửi bằng tùy chọn ổ cắm SO_SNDTIMEO.
+0

Nguyên nhân gây ra sự cố của tôi là đặt thời gian chờ gửi. Cảm ơn bạn vì sự giúp đỡ của bạn! – giroy

+0

@caf, Trong trường hợp của tôi, cấu hình kích thước MTU khác nhau ở hai bên đã khiến cho liên kết sctp Txqueue bị tràn ngập khi tỷ lệ trao đổi gói đang diễn ra cao. Làm cho MTU giống nhau trên cả hai hệ thống làm cho vấn đề biến mất. Nhưng ai cũng có thể giải thích lý do đằng sau vấn đề là gì? –

30

Đó là vì bạn đang sử dụng ổ cắm non-blocking và bộ đệm đầu ra đã đầy.

Từ trang send() người

When the message does not fit into the send buffer of the socket, 
    send() normally blocks, unless the socket has been placed in non-block- 
    ing I/O mode. In non-blocking mode it would return EAGAIN in this 
    case. 

EAGAIN là mã lỗi gắn với "Resource tạm thời không có"

Xem xét sử dụng select() để có được một kiểm soát tốt hơn này hành vi nào

+0

Câu trả lời này cũng rất hữu ích. Cảm ơn! – giroy

Các vấn đề liên quan