sparoid 2.1.2 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b9b409fe26f6c1e4e114ef772a721c55fe5c33c41ad1e45319cdf391074d084b
4
- data.tar.gz: 4eaf23fb8ed1afb254bfce4956d68618eb5c31581cd5e36174ef950eaec87320
3
+ metadata.gz: d077c30ec18d566719f9d594991798d8ecd94ac74938d5f5b21fb37a677066ca
4
+ data.tar.gz: b5f44ce465c4705dfdf5a0c705ad29603744be2145a831cd9c000be0ebb03ea0
5
5
  SHA512:
6
- metadata.gz: 8cda0c092e0fcea01748df2a4b5d26f480f6162135aea3b9863e39c8a224f7ed7ca4e105b982f032605b49dd0a7fa467ea92a3776b16592c858f7b38bb1ce2b4
7
- data.tar.gz: ddb2ac64f0db2115b49712c6d7aebac1e29bed8dbf52354ee806282be72955f6a08a35794965f727221152de360796c82ceb4a79554f2c95283fce4ffc12cb9c
6
+ metadata.gz: e937c061cacbadf3206cffc1d96eb4f99dd667ce8daf1becb91db2eba8aa3893384dd31a59924acc255c11e39bd0aad3ebed7b5e29430c92356e3c54162d2d1b
7
+ data.tar.gz: 5ee4e40eef7d12ee5e052ca92452bdae45814f81260d10e35339710255eec8b8cd207fcba2cd31af73a35b50344a2d224cb5f237ce8c6a498b94b7c61249b61e
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## [2.2.0] - 2026-05-06
2
+
3
+ - Raise when sendmsg fails for every resolved address (#23)
4
+
1
5
  ## [2.1.2] - 2026-04-30
2
6
 
3
7
  - Skip addresses that fail synchronous connect in fdpass (#20)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sparoid
4
- VERSION = "2.1.2"
4
+ VERSION = "2.2.0"
5
5
  end
data/lib/sparoid.rb CHANGED
@@ -22,20 +22,27 @@ module Sparoid # rubocop:disable Metrics/ModuleLength
22
22
  # Send an authorization packet
23
23
  def auth(key, hmac_key, host, port, open_for_ip: nil)
24
24
  addrs = resolve_ip_addresses(host, port)
25
- addrs.each do |addr|
25
+ errors = []
26
+ successful_addrs = addrs.filter_map do |addr|
26
27
  messages = generate_messages(open_for_ip)
27
28
  data = messages.map do |message|
28
29
  prefix_hmac(hmac_key, encrypt(key, message))
29
30
  end
30
31
  sendmsg(addr, data)
32
+ addr
33
+ rescue SystemCallError => e
34
+ errors << "#{addr.ip_address}: #{e.message}"
35
+ nil
31
36
  end
32
37
 
38
+ raise Error, "Sparoid failed to send to any address for #{host}: #{errors.join("; ")}" if successful_addrs.empty?
39
+
33
40
  # wait some time for the server to actually open the port
34
41
  # if we don't wait the next SYN package will be dropped
35
42
  # and it have to be redelivered, adding 1 second delay
36
43
  sleep 0.02
37
44
 
38
- addrs
45
+ successful_addrs
39
46
  end
40
47
 
41
48
  # Generate new aes and hmac keys, print to stdout
@@ -105,11 +112,9 @@ module Sparoid # rubocop:disable Metrics/ModuleLength
105
112
  socket.nonblock = false
106
113
  data.each do |packet|
107
114
  socket.sendmsg packet, 0, addr
108
- rescue StandardError => e
109
- warn "Sparoid error: #{e.message}"
110
115
  end
111
116
  ensure
112
- socket.close
117
+ socket&.close
113
118
  end
114
119
 
115
120
  def encrypt(key, data)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sparoid
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.2
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carl Hörberg